Full Code of eclipse-mosquitto/mosquitto for AI

master b3b4d77ef3fa cached
1864 files
7.2 MB
2.0M tokens
6236 symbols
1 requests
Download .txt
Showing preview only (7,856K chars total). Download the full file or copy to clipboard to get everything.
Repository: eclipse-mosquitto/mosquitto
Branch: master
Commit: b3b4d77ef3fa
Files: 1864
Total size: 7.2 MB

Directory structure:
gitextract_o5h0yyj5/

├── .editorconfig
├── .github/
│   ├── issue_template.md
│   ├── labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── build-variants.yml
│       ├── cifuzz.yml
│       ├── codeql-analysis.yml
│       ├── coverage.yml
│       ├── coverity-scan-develop.yml
│       ├── coverity-scan-fixes.yml
│       ├── delete-old-workflow-runs.yml
│       ├── issue-labler.yml
│       ├── lock.yml
│       ├── macos.yml
│       ├── mosquitto-cmake.yml
│       ├── mosquitto-make-asan.yml
│       ├── mosquitto-make.yml
│       ├── windows-x86.yml
│       └── windows.yml
├── .gitignore
├── .uncrustify.cfg
├── CITATION.cff
├── CMakeLists.txt
├── CONTRIBUTING.md
├── ChangeLog.txt
├── LICENSE.txt
├── Makefile
├── NOTICE.md
├── README-compiling.md
├── README-letsencrypt.md
├── README-tests.md
├── README-windows.txt
├── README.md
├── SECURITY.md
├── THANKS.txt
├── about.html
├── aclfile.example
├── apps/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── db_dump/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── db_dump.c
│   │   ├── db_dump.h
│   │   ├── json.c
│   │   ├── print.c
│   │   └── stubs.c
│   ├── mosquitto_ctrl/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── broker.c
│   │   ├── client.c
│   │   ├── ctrl_shell.c
│   │   ├── ctrl_shell.h
│   │   ├── ctrl_shell_broker.c
│   │   ├── ctrl_shell_client.c
│   │   ├── ctrl_shell_completion_tree.c
│   │   ├── ctrl_shell_dynsec.c
│   │   ├── ctrl_shell_internal.h
│   │   ├── ctrl_shell_io.c
│   │   ├── ctrl_shell_post_connect.c
│   │   ├── ctrl_shell_pre_connect.c
│   │   ├── ctrl_shell_printf.c
│   │   ├── dynsec.c
│   │   ├── dynsec_client.c
│   │   ├── dynsec_group.c
│   │   ├── dynsec_role.c
│   │   ├── example.c
│   │   ├── mosquitto_ctrl.c
│   │   ├── mosquitto_ctrl.h
│   │   ├── options.c
│   │   └── test/
│   │       └── Makefile
│   ├── mosquitto_passwd/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── get_password.c
│   │   ├── get_password.h
│   │   └── mosquitto_passwd.c
│   └── mosquitto_signal/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── mosquitto_signal.c
│       ├── mosquitto_signal.h
│       ├── signal_unix.c
│       └── signal_windows.c
├── buildtest.py
├── client/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── args.txt
│   ├── client_props.c
│   ├── client_shared.c
│   ├── client_shared.h
│   ├── pub_client.c
│   ├── pub_shared.c
│   ├── pub_shared.h
│   ├── pub_test_properties
│   ├── rr_client.c
│   ├── sub_client.c
│   ├── sub_client_output.c
│   ├── sub_client_output.h
│   ├── sub_test_fixed_width
│   └── sub_test_properties
├── cmake/
│   ├── FindCUnit.cmake
│   ├── FindLineEditing.cmake
│   ├── Findargon2.cmake
│   └── FindcJSON.cmake
├── codecov.yml
├── common/
│   ├── json_help.c
│   ├── json_help.h
│   └── lib_load.h
├── config.h
├── config.mk
├── dashboard/
│   ├── README.md
│   └── src/
│       ├── app/
│       │   ├── consts.js
│       │   ├── dashboard.js
│       │   ├── index.js
│       │   ├── listeners.js
│       │   └── sidebar.js
│       ├── css/
│       │   └── styles.css
│       ├── index.html
│       ├── lib/
│       │   └── chart.umd.js
│       ├── listeners.html
│       ├── tailwind/
│       │   └── styles.css
│       ├── tailwind.config.js
│       └── utils/
│           ├── assert.js
│           ├── queue.js
│           └── utils.js
├── deps/
│   ├── picohttpparser/
│   │   ├── README.md
│   │   ├── picohttpparser.c
│   │   └── picohttpparser.h
│   ├── uthash.h
│   └── utlist.h
├── doc/
│   ├── historical/
│   │   ├── old-regex.txt
│   │   └── topic-match.kds
│   └── joss-paper/
│       ├── codemeta.json
│       ├── paper.bib
│       └── paper.md
├── docker/
│   ├── 1.6-openssl/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   └── docker-entrypoint.sh
│   ├── 2.0-openssl/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto-no-auth.conf
│   ├── 2.1-alpine/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto.conf
│   ├── 2.1-ubuntu/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto.conf
│   ├── README.md
│   ├── generic/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto-no-auth.conf
│   └── local/
│       ├── Dockerfile
│       ├── README.md
│       ├── docker-entrypoint.sh
│       └── mosquitto.conf
├── edl-v10
├── epl-v20
├── examples/
│   ├── mysql_log/
│   │   ├── Makefile
│   │   └── mysql_log.c
│   ├── publish/
│   │   ├── Makefile
│   │   ├── basic-1.c
│   │   └── basic-websockets-1.c
│   ├── subscribe/
│   │   └── basic-1.c
│   ├── subscribe_simple/
│   │   ├── Makefile
│   │   ├── callback.c
│   │   ├── multiple.c
│   │   └── single.c
│   └── temperature_conversion/
│       ├── Makefile
│       ├── main.cpp
│       ├── readme.txt
│       ├── temperature_conversion.cpp
│       └── temperature_conversion.h
├── format.sh
├── fuzzing/
│   ├── Makefile
│   ├── apps/
│   │   ├── Makefile
│   │   ├── db_dump/
│   │   │   ├── Makefile
│   │   │   ├── db_dump_fuzz_load.cpp
│   │   │   ├── db_dump_fuzz_load_client_stats.cpp
│   │   │   └── db_dump_fuzz_load_stats.cpp
│   │   └── mosquitto_passwd/
│   │       ├── Makefile
│   │       └── mosquitto_passwd_fuzz_load.cpp
│   ├── broker/
│   │   ├── Makefile
│   │   ├── broker_fuzz.cpp
│   │   ├── broker_fuzz.h
│   │   ├── broker_fuzz_acl_file.cpp
│   │   ├── broker_fuzz_handle_auth.cpp
│   │   ├── broker_fuzz_handle_connect.cpp
│   │   ├── broker_fuzz_handle_publish.cpp
│   │   ├── broker_fuzz_handle_subscribe.cpp
│   │   ├── broker_fuzz_handle_unsubscribe.cpp
│   │   ├── broker_fuzz_password_file.cpp
│   │   ├── broker_fuzz_proxy_v1.cpp
│   │   ├── broker_fuzz_proxy_v2.cpp
│   │   ├── broker_fuzz_psk_file.cpp
│   │   ├── broker_fuzz_queue_msg.cpp
│   │   ├── broker_fuzz_read_handle.cpp
│   │   ├── broker_fuzz_test_config.cpp
│   │   ├── broker_fuzz_with_init.cpp
│   │   ├── fuzz_packet_read_base.c
│   │   └── fuzz_packet_read_base.h
│   ├── config.mk
│   ├── corpora/
│   │   ├── broker_acl_file.dict
│   │   └── broker_conf.dict
│   ├── generate_packet_corpora.py
│   ├── libcommon/
│   │   ├── Makefile
│   │   ├── libcommon_fuzz_property.cpp
│   │   ├── libcommon_fuzz_property.proto
│   │   ├── libcommon_fuzz_pub_topic_check2.cpp
│   │   ├── libcommon_fuzz_sub_topic_check2.cpp
│   │   ├── libcommon_fuzz_topic_matching.cpp
│   │   ├── libcommon_fuzz_topic_matching.proto
│   │   ├── libcommon_fuzz_topic_tokenise.cpp
│   │   └── libcommon_fuzz_utf8.cpp
│   ├── plugins/
│   │   ├── Makefile
│   │   └── dynamic-security/
│   │       ├── Makefile
│   │       └── dynsec_fuzz_load.cpp
│   └── scripts/
│       ├── oss-fuzz-build.sh
│       └── oss-fuzz-dependencies.sh
├── include/
│   ├── mosquitto/
│   │   ├── broker.h
│   │   ├── broker_control.h
│   │   ├── broker_plugin.h
│   │   ├── defs.h
│   │   ├── libcommon.h
│   │   ├── libcommon_base64.h
│   │   ├── libcommon_cjson.h
│   │   ├── libcommon_file.h
│   │   ├── libcommon_memory.h
│   │   ├── libcommon_password.h
│   │   ├── libcommon_properties.h
│   │   ├── libcommon_random.h
│   │   ├── libcommon_string.h
│   │   ├── libcommon_time.h
│   │   ├── libcommon_topic.h
│   │   ├── libcommon_utf8.h
│   │   ├── libmosquitto.h
│   │   ├── libmosquitto_auth.h
│   │   ├── libmosquitto_callbacks.h
│   │   ├── libmosquitto_connect.h
│   │   ├── libmosquitto_create_delete.h
│   │   ├── libmosquitto_helpers.h
│   │   ├── libmosquitto_loop.h
│   │   ├── libmosquitto_message.h
│   │   ├── libmosquitto_options.h
│   │   ├── libmosquitto_publish.h
│   │   ├── libmosquitto_socks.h
│   │   ├── libmosquitto_subscribe.h
│   │   ├── libmosquitto_tls.h
│   │   ├── libmosquitto_unsubscribe.h
│   │   ├── libmosquitto_will.h
│   │   ├── libmosquittopp.h
│   │   └── mqtt_protocol.h
│   ├── mosquitto.h
│   ├── mosquitto_broker.h
│   ├── mosquitto_plugin.h
│   ├── mosquittopp.h
│   └── mqtt_protocol.h
├── installer/
│   ├── mosquitto.nsi
│   └── mosquitto64.nsi
├── lib/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── actions_publish.c
│   ├── actions_subscribe.c
│   ├── actions_unsubscribe.c
│   ├── alias_mosq.c
│   ├── alias_mosq.h
│   ├── callbacks.c
│   ├── callbacks.h
│   ├── connect.c
│   ├── cpp/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   └── mosquittopp.cpp
│   ├── extended_auth.c
│   ├── handle_auth.c
│   ├── handle_connack.c
│   ├── handle_disconnect.c
│   ├── handle_ping.c
│   ├── handle_pubackcomp.c
│   ├── handle_publish.c
│   ├── handle_pubrec.c
│   ├── handle_pubrel.c
│   ├── handle_suback.c
│   ├── handle_unsuback.c
│   ├── helpers.c
│   ├── http_client.c
│   ├── http_client.h
│   ├── libmosquitto.c
│   ├── linker.version
│   ├── logging_mosq.c
│   ├── logging_mosq.h
│   ├── loop.c
│   ├── messages_mosq.c
│   ├── messages_mosq.h
│   ├── mosquitto_internal.h
│   ├── net_mosq.c
│   ├── net_mosq.h
│   ├── net_mosq_ocsp.c
│   ├── net_ws.c
│   ├── options.c
│   ├── packet_datatypes.c
│   ├── packet_mosq.c
│   ├── packet_mosq.h
│   ├── property_mosq.c
│   ├── property_mosq.h
│   ├── pthread_compat.h
│   ├── read_handle.c
│   ├── read_handle.h
│   ├── send_connect.c
│   ├── send_disconnect.c
│   ├── send_mosq.c
│   ├── send_mosq.h
│   ├── send_publish.c
│   ├── send_subscribe.c
│   ├── send_unsubscribe.c
│   ├── socks_mosq.c
│   ├── socks_mosq.h
│   ├── srv_mosq.c
│   ├── thread_mosq.c
│   ├── tls_mosq.c
│   ├── tls_mosq.h
│   ├── util_mosq.c
│   ├── util_mosq.h
│   ├── will_mosq.c
│   └── will_mosq.h
├── libcommon/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── base64_common.c
│   ├── cjson_common.c
│   ├── file_common.c
│   ├── linker.version
│   ├── memory_common.c
│   ├── mqtt_common.c
│   ├── password_common.c
│   ├── property_common.c
│   ├── property_common.h
│   ├── random_common.c
│   ├── strings_common.c
│   ├── time_common.c
│   ├── topic_common.c
│   └── utf8_common.c
├── libmosquitto.pc.in
├── libmosquittopp.pc.in
├── make/
│   ├── broker.mk
│   └── unit-test.mk
├── man/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── common/
│   │   ├── env-var-mosquitto-unsafe-allow-symlinks.xml
│   │   ├── option-bind.xml
│   │   ├── option-clean-session.xml
│   │   ├── option-clientid-prefix.xml
│   │   ├── option-clientid.xml
│   │   ├── option-config-file.xml
│   │   ├── option-debug.xml
│   │   ├── option-format-no-eol.xml
│   │   ├── option-format-pretty.xml
│   │   ├── option-format-verbose.xml
│   │   ├── option-format.xml
│   │   ├── option-help.xml
│   │   ├── option-hide-retain.xml
│   │   ├── option-host.xml
│   │   ├── option-keepalive.xml
│   │   ├── option-no-tls.xml
│   │   ├── option-nodelay.xml
│   │   ├── option-password.xml
│   │   ├── option-payload-file.xml
│   │   ├── option-payload-message.xml
│   │   ├── option-payload-null.xml
│   │   ├── option-payload-stdin-file.xml
│   │   ├── option-port.xml
│   │   ├── option-property.xml
│   │   ├── option-protocol-version.xml
│   │   ├── option-proxy.xml
│   │   ├── option-qos-incoming.xml
│   │   ├── option-quiet.xml
│   │   ├── option-retain-handling.xml
│   │   ├── option-session-expiry-interval.xml
│   │   ├── option-srv.xml
│   │   ├── option-timeout.xml
│   │   ├── option-tls-alpn.xml
│   │   ├── option-tls-cafile.xml
│   │   ├── option-tls-capath.xml
│   │   ├── option-tls-cert.xml
│   │   ├── option-tls-ciphers.xml
│   │   ├── option-tls-engine-kpass-sha1.xml
│   │   ├── option-tls-engine.xml
│   │   ├── option-tls-insecure.xml
│   │   ├── option-tls-key.xml
│   │   ├── option-tls-keyform.xml
│   │   ├── option-tls-keylog.xml
│   │   ├── option-tls-psk-identity.xml
│   │   ├── option-tls-psk.xml
│   │   ├── option-tls-use-os-certs.xml
│   │   ├── option-tls-version.xml
│   │   ├── option-unix-socket.xml
│   │   ├── option-url.xml
│   │   ├── option-username.xml
│   │   ├── option-websockets.xml
│   │   ├── option-will-payload.xml
│   │   ├── option-will-qos.xml
│   │   ├── option-will-retain.xml
│   │   ├── option-will-topic.xml
│   │   ├── options-intro.xml
│   │   ├── section-bugs.xml
│   │   ├── section-encrypted-connections.xml
│   │   ├── section-exit-status.xml
│   │   ├── section-output-format.xml
│   │   ├── section-properties-connect.xml
│   │   ├── section-properties-disconnect.xml
│   │   ├── section-properties-publish.xml
│   │   ├── section-properties-subscribe.xml
│   │   ├── section-properties-unsubscribe.xml
│   │   ├── section-properties-will.xml
│   │   ├── section-wills.xml
│   │   ├── synopsis-tls-certificate-options.xml
│   │   ├── synopsis-tls-psk-options.xml
│   │   ├── synopsis-will.xml
│   │   └── version-2.1.xml
│   ├── html.xsl
│   ├── libmosquitto.3.meta
│   ├── libmosquitto.3.xml
│   ├── manpage.xsl
│   ├── mosquitto-tls.7.meta
│   ├── mosquitto-tls.7.xml
│   ├── mosquitto.7.meta
│   ├── mosquitto.7.xml
│   ├── mosquitto.8.meta
│   ├── mosquitto.8.xml
│   ├── mosquitto.conf.5.meta
│   ├── mosquitto.conf.5.xml
│   ├── mosquitto_ctrl.1.meta
│   ├── mosquitto_ctrl.1.xml
│   ├── mosquitto_ctrl_dynsec.1.meta
│   ├── mosquitto_ctrl_dynsec.1.xml
│   ├── mosquitto_ctrl_shell.1.meta
│   ├── mosquitto_ctrl_shell.1.xml
│   ├── mosquitto_passwd.1.meta
│   ├── mosquitto_passwd.1.xml
│   ├── mosquitto_pub.1.meta
│   ├── mosquitto_pub.1.xml
│   ├── mosquitto_rr.1.meta
│   ├── mosquitto_rr.1.xml
│   ├── mosquitto_signal.1.meta
│   ├── mosquitto_signal.1.xml
│   ├── mosquitto_sub.1.meta
│   ├── mosquitto_sub.1.xml
│   ├── mqtt.7.meta
│   └── mqtt.7.xml
├── misc/
│   ├── currentcost/
│   │   ├── cc128_log_mysql.pl
│   │   ├── cc128_parse.pl
│   │   ├── cc128_read.pl
│   │   ├── cc128_read.py
│   │   └── gnome-panel/
│   │       ├── CurrentCostMQTT.py
│   │       └── CurrentCostMQTT.server
│   └── letsencrypt/
│       └── mosquitto-copy.sh
├── mosquitto.conf
├── plugins/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── README.md
│   ├── acl-file/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── acl_check.c
│   │   ├── acl_parse.c
│   │   ├── plugin.c
│   │   ├── test.conf
│   │   └── test.sh
│   ├── dynamic-security/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── acl.c
│   │   ├── auth.c
│   │   ├── clientlist.c
│   │   ├── clients.c
│   │   ├── config.c
│   │   ├── config_init.c
│   │   ├── control.c
│   │   ├── default_acl.c
│   │   ├── details.c
│   │   ├── dynamic_security.h
│   │   ├── grouplist.c
│   │   ├── groups.c
│   │   ├── kicklist.c
│   │   ├── migrate_to_dynsec.py
│   │   ├── plugin.c
│   │   ├── rolelist.c
│   │   ├── roles.c
│   │   ├── test.conf
│   │   ├── test.sh
│   │   └── tick.c
│   ├── examples/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── add-properties/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_add_properties.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── auth-by-env/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   └── mosquitto_auth_by_env.c
│   │   ├── auth-by-ip/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_auth_by_ip.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── client-lifetime-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_client_lifetime_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── client-properties/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_client_properties.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── connection-state/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_connection_state.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── delayed-auth/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_delayed_auth.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── deny-protocol-version/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_deny_protocol_version.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── force-retain/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_force_retain.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── limit-subscription-qos/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_limit_subscription_qos.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── message-timestamp/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_message_timestamp.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-ban/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_ban.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-modification/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_modification.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-size-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_size_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── plugin-event-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_plugin_event_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── print-ip-on-publish/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_print_ip_on_publish.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── tick-interval/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_tick_interval.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-hierarchy-flatten/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_hierarchy_flatten.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-jail/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_jail.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-modification/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_modification.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   └── wildcard-temp/
│   │       ├── CMakeLists.txt
│   │       ├── Makefile
│   │       ├── mosquitto_wildcard_temp.c
│   │       ├── test.conf
│   │       └── test.sh
│   ├── password-file/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── password_check.c
│   │   ├── password_parse.c
│   │   ├── plugin.c
│   │   ├── test.conf
│   │   ├── test.pwfile
│   │   └── test.sh
│   ├── persist-sqlite/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── base_msgs.c
│   │   ├── client_msgs.c
│   │   ├── clients.c
│   │   ├── common.c
│   │   ├── init.c
│   │   ├── migrate_to_persist_sqlite.py
│   │   ├── persist_sqlite.h
│   │   ├── plugin.c
│   │   ├── restore.c
│   │   ├── retain_msgs.c
│   │   ├── subscriptions.c
│   │   ├── test.conf
│   │   ├── test.sh
│   │   ├── tick.c
│   │   ├── util.h
│   │   └── will.c
│   ├── plugin.mk
│   └── sparkplug-aware/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── README.md
│       ├── on_message.c
│       ├── plugin.c
│       ├── plugin_global.h
│       ├── test.conf
│       └── test.sh
├── pskfile.example
├── pwfile.example
├── run_tests.py
├── security/
│   └── mosquitto.apparmor
├── service/
│   ├── monit/
│   │   └── mosquitto.monit
│   ├── svscan/
│   │   └── run
│   ├── systemd/
│   │   ├── README
│   │   ├── mosquitto.service.notify
│   │   └── mosquitto.service.simple
│   └── upstart/
│       └── mosquitto.conf
├── set-version.sh
├── snap/
│   ├── local/
│   │   ├── default_config.conf
│   │   └── launcher.sh
│   └── snapcraft.yaml
├── src/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── acl_file.c
│   ├── acl_file.h
│   ├── bridge.c
│   ├── bridge_topic.c
│   ├── broker_control.c
│   ├── conf.c
│   ├── conf_includedir.c
│   ├── context.c
│   ├── control.c
│   ├── control_common.c
│   ├── database.c
│   ├── handle_auth.c
│   ├── handle_connack.c
│   ├── handle_connect.c
│   ├── handle_disconnect.c
│   ├── handle_publish.c
│   ├── handle_subscribe.c
│   ├── handle_unsubscribe.c
│   ├── http_api.c
│   ├── http_serv.c
│   ├── keepalive.c
│   ├── linker-aix.syms
│   ├── linker-macosx.syms
│   ├── linker.syms
│   ├── listeners.c
│   ├── logging.c
│   ├── loop.c
│   ├── mosquitto.c
│   ├── mosquitto_broker_internal.h
│   ├── mux.c
│   ├── mux.h
│   ├── mux_epoll.c
│   ├── mux_kqueue.c
│   ├── mux_poll.c
│   ├── net.c
│   ├── password_file.c
│   ├── password_file.h
│   ├── persist.h
│   ├── persist_read.c
│   ├── persist_read_v234.c
│   ├── persist_read_v5.c
│   ├── persist_write.c
│   ├── persist_write_v5.c
│   ├── plugin_acl_check.c
│   ├── plugin_basic_auth.c
│   ├── plugin_callbacks.c
│   ├── plugin_cleanup.c
│   ├── plugin_client_offline.c
│   ├── plugin_connect.c
│   ├── plugin_disconnect.c
│   ├── plugin_extended_auth.c
│   ├── plugin_init.c
│   ├── plugin_message.c
│   ├── plugin_persist.c
│   ├── plugin_psk_key.c
│   ├── plugin_public.c
│   ├── plugin_reload.c
│   ├── plugin_subscribe.c
│   ├── plugin_tick.c
│   ├── plugin_unsubscribe.c
│   ├── plugin_v2.c
│   ├── plugin_v3.c
│   ├── plugin_v4.c
│   ├── plugin_v5.c
│   ├── property_broker.c
│   ├── proxy_v1.c
│   ├── proxy_v2.c
│   ├── psk_file.c
│   ├── read_handle.c
│   ├── retain.c
│   ├── security_default.c
│   ├── send_auth.c
│   ├── send_connack.c
│   ├── send_suback.c
│   ├── send_unsuback.c
│   ├── service.c
│   ├── session_expiry.c
│   ├── signals.c
│   ├── subs.c
│   ├── sys_tree.c
│   ├── sys_tree.h
│   ├── topic_tok.c
│   ├── watchdog.c
│   ├── websockets.c
│   ├── will_delay.c
│   └── xtreport.c
├── test/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── __init__.py
│   ├── apps/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── TODO.md
│   │   ├── ctrl/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── ctrl-args.py
│   │   │   ├── ctrl-broker.py
│   │   │   ├── ctrl-dynsec.py
│   │   │   ├── ctrl_shell_broker_test.cpp
│   │   │   ├── ctrl_shell_completion_test.cpp
│   │   │   ├── ctrl_shell_dynsec_test.cpp
│   │   │   ├── ctrl_shell_help_test.cpp
│   │   │   ├── ctrl_shell_options_test.cpp
│   │   │   ├── ctrl_shell_pre_connect_test.cpp
│   │   │   ├── ctrl_shell_test.cpp
│   │   │   ├── mosq_test_helper.py
│   │   │   └── test.py
│   │   ├── db_dump/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── data/
│   │   │   │   ├── bad-chunk.test-db
│   │   │   │   ├── bad-dbid-size.test-db
│   │   │   │   ├── bad-magic.test-db
│   │   │   │   ├── short.test-db
│   │   │   │   ├── v3-corrupt.test-db
│   │   │   │   ├── v3-empty.test-db
│   │   │   │   ├── v4-corrupt.test-db
│   │   │   │   ├── v4-empty.test-db
│   │   │   │   ├── v4-single-client.test-db
│   │   │   │   ├── v4-single-cmsg.test-db
│   │   │   │   ├── v4-single-retain.test-db
│   │   │   │   ├── v4-single-sub.test-db
│   │   │   │   ├── v5-corrupt.test-db
│   │   │   │   ├── v5-empty.test-db
│   │   │   │   ├── v6-corrupt-client.test-db
│   │   │   │   ├── v6-corrupt-cmsg.test-db
│   │   │   │   ├── v6-corrupt-retain.test-db
│   │   │   │   ├── v6-corrupt-sub.test-db
│   │   │   │   ├── v6-corrupt.test-db
│   │   │   │   ├── v6-empty.test-db
│   │   │   │   ├── v6-mqtt-v5-props.test-db
│   │   │   │   ├── v6-single-all.test-db
│   │   │   │   ├── v6-single-client.test-db
│   │   │   │   ├── v6-single-cmsg.test-db
│   │   │   │   ├── v6-single-retain.test-db
│   │   │   │   └── v6-single-sub.test-db
│   │   │   ├── db-dump-client-stats.py
│   │   │   ├── db-dump-corrupt.py
│   │   │   ├── db-dump-json-v6-mqtt-v5-props.py
│   │   │   ├── db-dump-print-empty.py
│   │   │   ├── db-dump-print-v6-all.py
│   │   │   ├── db-dump-print-v6-mqtt-v5-props.py
│   │   │   ├── db-dump-stats-current.py
│   │   │   ├── db-dump-stats.py
│   │   │   ├── mosq_test_helper.py
│   │   │   └── test.py
│   │   ├── mosq_test_helper.py
│   │   ├── passwd/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosq_test_helper.py
│   │   │   ├── passwd-args.py
│   │   │   ├── passwd-changes.py
│   │   │   ├── passwd-stdout.py
│   │   │   └── test.py
│   │   └── signal/
│   │       ├── CMakeLists.txt
│   │       ├── Makefile
│   │       ├── mosq_test_helper.py
│   │       ├── signal-args.py
│   │       └── test.py
│   ├── broker/
│   │   ├── 01-bad-initial-packets.py
│   │   ├── 01-connect-575314.py
│   │   ├── 01-connect-accept-protocol.py
│   │   ├── 01-connect-allow-anonymous.py
│   │   ├── 01-connect-auto-id.py
│   │   ├── 01-connect-disconnect-v5.py
│   │   ├── 01-connect-global-max-clients.py
│   │   ├── 01-connect-global-max-connections.py
│   │   ├── 01-connect-listener-allow-anonymous.py
│   │   ├── 01-connect-max-connections.py
│   │   ├── 01-connect-max-keepalive.py
│   │   ├── 01-connect-take-over.py
│   │   ├── 01-connect-uname-no-password-denied.pwfile
│   │   ├── 01-connect-uname-no-password-denied.py
│   │   ├── 01-connect-uname-or-anon.pwfile
│   │   ├── 01-connect-uname-or-anon.py
│   │   ├── 01-connect-uname-password-denied-no-will.py
│   │   ├── 01-connect-uname-password-denied.pwfile
│   │   ├── 01-connect-uname-password-denied.py
│   │   ├── 01-connect-uname-password-success-no-tls.pwfile
│   │   ├── 01-connect-uname-password-success-no-tls.py
│   │   ├── 01-connect-unix-socket.py
│   │   ├── 01-connect-windows-line-endings.py
│   │   ├── 01-connect-zero-length-id.py
│   │   ├── 01-plugin-connect-uname-password-denied.pwfile
│   │   ├── 01-plugin-connect-uname-password-denied.py
│   │   ├── 02-shared-nolocal.py
│   │   ├── 02-shared-qos0-v5.py
│   │   ├── 02-subhier-crash.py
│   │   ├── 02-subpub-b2c-topic-alias.py
│   │   ├── 02-subpub-qos0-long-topic.py
│   │   ├── 02-subpub-qos0-oversize-payload.py
│   │   ├── 02-subpub-qos0-queued-bytes.py
│   │   ├── 02-subpub-qos0-retain-as-publish.py
│   │   ├── 02-subpub-qos0-send-retain.py
│   │   ├── 02-subpub-qos0-subscription-id.py
│   │   ├── 02-subpub-qos0-topic-alias-unknown.py
│   │   ├── 02-subpub-qos0-topic-alias.py
│   │   ├── 02-subpub-qos1-message-expiry-retain.py
│   │   ├── 02-subpub-qos1-message-expiry-will.py
│   │   ├── 02-subpub-qos1-message-expiry.py
│   │   ├── 02-subpub-qos1-nolocal.py
│   │   ├── 02-subpub-qos1-oversize-payload.py
│   │   ├── 02-subpub-qos1.py
│   │   ├── 02-subpub-qos2-1322.py
│   │   ├── 02-subpub-qos2-max-inflight-bytes.py
│   │   ├── 02-subpub-qos2-pubrec-error.py
│   │   ├── 02-subpub-qos2-receive-maximum-1.py
│   │   ├── 02-subpub-qos2-receive-maximum-2.py
│   │   ├── 02-subpub-qos2.py
│   │   ├── 02-subpub-recover-subscriptions.py
│   │   ├── 02-subscribe-dollar-v5.py
│   │   ├── 02-subscribe-invalid-utf8.py
│   │   ├── 02-subscribe-long-topic.py
│   │   ├── 02-subscribe-persistence-flipflop.py
│   │   ├── 03-pattern-matching.py
│   │   ├── 03-publish-b2c-disconnect-qos1.py
│   │   ├── 03-publish-b2c-disconnect-qos2.py
│   │   ├── 03-publish-b2c-qos1-len.py
│   │   ├── 03-publish-b2c-qos2-len.py
│   │   ├── 03-publish-bad-flags.py
│   │   ├── 03-publish-c2b-disconnect-qos2.py
│   │   ├── 03-publish-c2b-qos2-len.py
│   │   ├── 03-publish-dollar-v5.py
│   │   ├── 03-publish-dollar.py
│   │   ├── 03-publish-invalid-utf8.py
│   │   ├── 03-publish-long-topic.py
│   │   ├── 03-publish-qos1-max-inflight-expire.py
│   │   ├── 03-publish-qos1-max-inflight.py
│   │   ├── 03-publish-qos1-no-subscribers-v5.py
│   │   ├── 03-publish-qos1-queued-bytes.conf
│   │   ├── 03-publish-qos1-queued-bytes.py
│   │   ├── 03-publish-qos1-retain-disabled.py
│   │   ├── 03-publish-qos1.py
│   │   ├── 03-publish-qos2-dup.py
│   │   ├── 03-publish-qos2-max-inflight-exceeded.py
│   │   ├── 03-publish-qos2-max-inflight.py
│   │   ├── 03-publish-qos2-reuse-mid.py
│   │   ├── 03-publish-qos2.py
│   │   ├── 04-retain-check-source-persist-diff-port.py
│   │   ├── 04-retain-check-source-persist.py
│   │   ├── 04-retain-check-source.py
│   │   ├── 04-retain-clear-multiple.py
│   │   ├── 04-retain-qos0-clear.py
│   │   ├── 04-retain-qos0-fresh.py
│   │   ├── 04-retain-qos0-repeated.py
│   │   ├── 04-retain-qos0.py
│   │   ├── 04-retain-qos1-qos0.py
│   │   ├── 04-retain-upgrade-outgoing-qos.py
│   │   ├── 05-clean-session-qos1.py
│   │   ├── 05-session-expiry-kick.py
│   │   ├── 05-session-expiry-v5.py
│   │   ├── 06-bridge-b2br-disconnect-qos1.py
│   │   ├── 06-bridge-b2br-disconnect-qos2.py
│   │   ├── 06-bridge-b2br-late-connection-retain.py
│   │   ├── 06-bridge-b2br-late-connection.py
│   │   ├── 06-bridge-b2br-remapping.py
│   │   ├── 06-bridge-br2b-disconnect-qos1.py
│   │   ├── 06-bridge-br2b-disconnect-qos2.py
│   │   ├── 06-bridge-br2b-remapping.py
│   │   ├── 06-bridge-clean-session-core.py
│   │   ├── 06-bridge-clean-session-csF-lcsF.py
│   │   ├── 06-bridge-clean-session-csF-lcsN.py
│   │   ├── 06-bridge-clean-session-csF-lcsT.py
│   │   ├── 06-bridge-clean-session-csT-lcsF.py
│   │   ├── 06-bridge-clean-session-csT-lcsN.py
│   │   ├── 06-bridge-clean-session-csT-lcsT.py
│   │   ├── 06-bridge-config-reload.py
│   │   ├── 06-bridge-fail-persist-resend-qos1.py
│   │   ├── 06-bridge-fail-persist-resend-qos2.py
│   │   ├── 06-bridge-no-local.py
│   │   ├── 06-bridge-outgoing-retain.py
│   │   ├── 06-bridge-per-listener-settings.py
│   │   ├── 06-bridge-reconnect-local-out.py
│   │   ├── 06-bridge-remap-receive-wildcard.py
│   │   ├── 06-bridge-remote-shutdown.py
│   │   ├── 07-will-control.py
│   │   ├── 07-will-delay-invalid-573191.py
│   │   ├── 07-will-delay-reconnect.py
│   │   ├── 07-will-delay-recover.py
│   │   ├── 07-will-delay-session-expiry-0.py
│   │   ├── 07-will-delay-session-expiry.py
│   │   ├── 07-will-delay-session-expiry2.py
│   │   ├── 07-will-delay.py
│   │   ├── 07-will-disconnect-with-will.py
│   │   ├── 07-will-invalid-utf8.py
│   │   ├── 07-will-no-flag.py
│   │   ├── 07-will-null-topic.py
│   │   ├── 07-will-null.py
│   │   ├── 07-will-oversize-payload.py
│   │   ├── 07-will-per-listener.py
│   │   ├── 07-will-properties.py
│   │   ├── 07-will-qos0.py
│   │   ├── 07-will-reconnect-1273.py
│   │   ├── 07-will-takeover.py
│   │   ├── 08-ssl-bridge-helper.py
│   │   ├── 08-ssl-bridge.py
│   │   ├── 08-ssl-connect-cert-auth-crl.py
│   │   ├── 08-ssl-connect-cert-auth-expired-allowed.py
│   │   ├── 08-ssl-connect-cert-auth-expired.py
│   │   ├── 08-ssl-connect-cert-auth-revoked.py
│   │   ├── 08-ssl-connect-cert-auth-without.py
│   │   ├── 08-ssl-connect-cert-auth.py
│   │   ├── 08-ssl-connect-dhparam.py
│   │   ├── 08-ssl-connect-identity.py
│   │   ├── 08-ssl-connect-no-auth-wrong-ca.py
│   │   ├── 08-ssl-connect-no-auth.py
│   │   ├── 08-ssl-connect-no-identity.py
│   │   ├── 08-ssl-hup-disconnect.py
│   │   ├── 08-tls-psk-bridge.psk
│   │   ├── 08-tls-psk-bridge.py
│   │   ├── 08-tls-psk-pub.psk
│   │   ├── 08-tls-psk-pub.py
│   │   ├── 09-acl-access-variants.py
│   │   ├── 09-acl-change.py
│   │   ├── 09-acl-empty-file.py
│   │   ├── 09-auth-bad-method.py
│   │   ├── 09-extended-auth-change-username.py
│   │   ├── 09-extended-auth-multistep-reauth.py
│   │   ├── 09-extended-auth-multistep.py
│   │   ├── 09-extended-auth-reauth.py
│   │   ├── 09-extended-auth-single.py
│   │   ├── 09-extended-auth-single2.py
│   │   ├── 09-plugin-acl-access-variants.py
│   │   ├── 09-plugin-acl-change.py
│   │   ├── 09-plugin-auth-acl-pub-prop.py
│   │   ├── 09-plugin-auth-acl-pub.py
│   │   ├── 09-plugin-auth-acl-sub-denied.py
│   │   ├── 09-plugin-auth-acl-sub.py
│   │   ├── 09-plugin-auth-context-params.py
│   │   ├── 09-plugin-auth-defer-unpwd-fail.py
│   │   ├── 09-plugin-auth-defer-unpwd-success.py
│   │   ├── 09-plugin-auth-msg-params.py
│   │   ├── 09-plugin-auth-unpwd-fail.py
│   │   ├── 09-plugin-auth-unpwd-success.py
│   │   ├── 09-plugin-auth-v2-unpwd-fail.py
│   │   ├── 09-plugin-auth-v2-unpwd-success.py
│   │   ├── 09-plugin-auth-v3-unpwd-fail.py
│   │   ├── 09-plugin-auth-v3-unpwd-success.py
│   │   ├── 09-plugin-auth-v4-unpwd-fail.py
│   │   ├── 09-plugin-auth-v4-unpwd-success.py
│   │   ├── 09-plugin-auth-v5-unpwd-fail.py
│   │   ├── 09-plugin-auth-v5-unpwd-success.py
│   │   ├── 09-plugin-bad.py
│   │   ├── 09-plugin-change-id.py
│   │   ├── 09-plugin-delayed-auth.py
│   │   ├── 09-plugin-evt-client-offline.py
│   │   ├── 09-plugin-evt-message-in.py
│   │   ├── 09-plugin-evt-message-out.py
│   │   ├── 09-plugin-evt-psk-key.py
│   │   ├── 09-plugin-evt-reload.py
│   │   ├── 09-plugin-evt-subscribe.py
│   │   ├── 09-plugin-evt-tick.py
│   │   ├── 09-plugin-evt-unsubscribe.py
│   │   ├── 09-plugin-load-acl.py
│   │   ├── 09-plugin-load-basic-auth.py
│   │   ├── 09-plugin-load-extended-auth.py
│   │   ├── 09-plugin-publish.py
│   │   ├── 09-plugin-unsupported.py
│   │   ├── 09-pwfile-parse-invalid.py
│   │   ├── 10-listener-mount-point.py
│   │   ├── 11-message-expiry.py
│   │   ├── 11-persistence-autosave-changes.py
│   │   ├── 11-persistent-subscription-no-local.py
│   │   ├── 11-persistent-subscription.py
│   │   ├── 11-pub-props.py
│   │   ├── 11-subscription-id.py
│   │   ├── 12-prop-assigned-client-identifier.py
│   │   ├── 12-prop-maximum-packet-size-broker.py
│   │   ├── 12-prop-maximum-packet-size-publish-qos1.py
│   │   ├── 12-prop-maximum-packet-size-publish-qos2.py
│   │   ├── 12-prop-response-topic-correlation-data.py
│   │   ├── 12-prop-response-topic.py
│   │   ├── 12-prop-server-keepalive.py
│   │   ├── 12-prop-subpub-content-type.py
│   │   ├── 12-prop-subpub-payload-format.py
│   │   ├── 13-websocket-bad-origin.py
│   │   ├── 14-dynsec-acl.py
│   │   ├── 14-dynsec-allow-wildcard.py
│   │   ├── 14-dynsec-anon-group.py
│   │   ├── 14-dynsec-auth.py
│   │   ├── 14-dynsec-client-invalid.py
│   │   ├── 14-dynsec-client.py
│   │   ├── 14-dynsec-config-init-env.py
│   │   ├── 14-dynsec-config-init-file.py
│   │   ├── 14-dynsec-config-init-random.py
│   │   ├── 14-dynsec-default-access.py
│   │   ├── 14-dynsec-disable-client.py
│   │   ├── 14-dynsec-group-invalid.py
│   │   ├── 14-dynsec-group.py
│   │   ├── 14-dynsec-modify-client.py
│   │   ├── 14-dynsec-modify-group.py
│   │   ├── 14-dynsec-modify-role.py
│   │   ├── 14-dynsec-plugin-invalid.py
│   │   ├── 14-dynsec-role-invalid.py
│   │   ├── 14-dynsec-role.py
│   │   ├── 15-persist-bridge-queue.py
│   │   ├── 15-persist-client-drop-expired-messages.py
│   │   ├── 15-persist-client-expired-session.py
│   │   ├── 15-persist-client-msg-in-v3-1-1.py
│   │   ├── 15-persist-client-msg-in-v5-0.py
│   │   ├── 15-persist-client-msg-modify-acl.py
│   │   ├── 15-persist-client-msg-out-clear-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-dup-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-queue-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-v3-1-1-db.py
│   │   ├── 15-persist-client-msg-out-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-v5-0.py
│   │   ├── 15-persist-client-v3-1-1.py
│   │   ├── 15-persist-client-v5-0.py
│   │   ├── 15-persist-client-will.py
│   │   ├── 15-persist-migrate-db.py
│   │   ├── 15-persist-publish-properties-v5-0.py
│   │   ├── 15-persist-retain-clear.py
│   │   ├── 15-persist-retain-v3-1-1.py
│   │   ├── 15-persist-retain-v5-0.py
│   │   ├── 15-persist-subscription-v3-1-1.py
│   │   ├── 15-persist-subscription-v5-0.py
│   │   ├── 16-cmd-args.py
│   │   ├── 16-config-huge.py
│   │   ├── 16-config-includedir.py
│   │   ├── 16-config-missing.py
│   │   ├── 16-config-parse-errors-tls-psk.py
│   │   ├── 16-config-parse-errors-tls.py
│   │   ├── 16-config-parse-errors-without-tls.py
│   │   ├── 17-control-list-listeners.py
│   │   ├── 17-control-list-plugins.py
│   │   ├── 17-control-missing-endpoint.py
│   │   ├── 20-sparkplug-aware.py
│   │   ├── 20-sparkplug-compliance.py
│   │   ├── 21-proxy-bad-version.py
│   │   ├── 21-proxy-v1-bad.py
│   │   ├── 21-proxy-v1-success.py
│   │   ├── 21-proxy-v2-bad-config.py
│   │   ├── 21-proxy-v2-bad-header.py
│   │   ├── 21-proxy-v2-ipv4.py
│   │   ├── 21-proxy-v2-ipv6.py
│   │   ├── 21-proxy-v2-local.py
│   │   ├── 21-proxy-v2-long-tlv.py
│   │   ├── 21-proxy-v2-lost-connection.py
│   │   ├── 21-proxy-v2-ssl-cipher.py
│   │   ├── 21-proxy-v2-ssl-common-name-failure.py
│   │   ├── 21-proxy-v2-ssl-common-name-success.py
│   │   ├── 21-proxy-v2-ssl-require-cert-failure.py
│   │   ├── 21-proxy-v2-ssl-require-cert-success.py
│   │   ├── 21-proxy-v2-ssl-require-tls-failure.py
│   │   ├── 21-proxy-v2-ssl-require-tls-success.py
│   │   ├── 21-proxy-v2-unix.py
│   │   ├── 21-proxy-v2-websockets.py
│   │   ├── 22-http-api-acl.py
│   │   ├── 22-http-api-api.py
│   │   ├── 22-http-api-auth.pwfile
│   │   ├── 22-http-api-auth.py
│   │   ├── 22-http-api-file.py
│   │   ├── 22-http-api-tls.py
│   │   ├── 23-security-acl-file-reload.py
│   │   ├── 23-security-password-file-reload.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── c/
│   │   │   ├── 08-tls-psk-bridge.c
│   │   │   ├── 08-tls-psk-pub.c
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── auth_plugin_acl.c
│   │   │   ├── auth_plugin_acl_change.c
│   │   │   ├── auth_plugin_acl_sub_denied.c
│   │   │   ├── auth_plugin_context_params.c
│   │   │   ├── auth_plugin_delayed.c
│   │   │   ├── auth_plugin_extended_multiple.c
│   │   │   ├── auth_plugin_extended_reauth.c
│   │   │   ├── auth_plugin_extended_single.c
│   │   │   ├── auth_plugin_extended_single2.c
│   │   │   ├── auth_plugin_id_change.c
│   │   │   ├── auth_plugin_msg_params.c
│   │   │   ├── auth_plugin_publish.c
│   │   │   ├── auth_plugin_pwd.c
│   │   │   ├── auth_plugin_v2.c
│   │   │   ├── auth_plugin_v3.c
│   │   │   ├── auth_plugin_v4.c
│   │   │   ├── auth_plugin_v5.c
│   │   │   ├── auth_plugin_v5_control.c
│   │   │   ├── bad_v1.c
│   │   │   ├── bad_v2_1.c
│   │   │   ├── bad_v2_2.c
│   │   │   ├── bad_v2_3.c
│   │   │   ├── bad_v2_4.c
│   │   │   ├── bad_v2_5.c
│   │   │   ├── bad_v2_6.c
│   │   │   ├── bad_v2_7.c
│   │   │   ├── bad_v3_1.c
│   │   │   ├── bad_v3_2.c
│   │   │   ├── bad_v3_3.c
│   │   │   ├── bad_v3_4.c
│   │   │   ├── bad_v3_5.c
│   │   │   ├── bad_v3_6.c
│   │   │   ├── bad_v3_7.c
│   │   │   ├── bad_v4_1.c
│   │   │   ├── bad_v4_2.c
│   │   │   ├── bad_v4_3.c
│   │   │   ├── bad_v4_4.c
│   │   │   ├── bad_v5_1.c
│   │   │   ├── bad_v6.c
│   │   │   ├── bad_vnone_1.c
│   │   │   ├── kick_last_client.c
│   │   │   ├── mosquitto_plugin_v2.h
│   │   │   ├── plugin_control.c
│   │   │   ├── plugin_evt_client_offline.c
│   │   │   ├── plugin_evt_message_in.c
│   │   │   ├── plugin_evt_message_out.c
│   │   │   ├── plugin_evt_persist_client_update.c
│   │   │   ├── plugin_evt_psk_key.c
│   │   │   ├── plugin_evt_reload.c
│   │   │   ├── plugin_evt_subscribe.c
│   │   │   ├── plugin_evt_tick.c
│   │   │   ├── plugin_evt_unsubscribe.c
│   │   │   ├── plugin_load_acl.c
│   │   │   └── plugin_load_extended_auth.c
│   │   ├── data/
│   │   │   ├── AUTH.json
│   │   │   ├── CONNACK.json
│   │   │   ├── CONNECT.json
│   │   │   ├── DISCONNECT.json
│   │   │   ├── FLOW.json
│   │   │   ├── FORBIDDEN.json
│   │   │   ├── PINGREQ.json
│   │   │   ├── PINGRESP.json
│   │   │   ├── PUBACK.json
│   │   │   ├── PUBCOMP.json
│   │   │   ├── PUBLISH.json
│   │   │   ├── PUBREC.json
│   │   │   ├── PUBREL.json
│   │   │   ├── REGRESSION.json
│   │   │   ├── SUBACK.json
│   │   │   ├── SUBSCRIBE.json
│   │   │   ├── UNSUBACK.json
│   │   │   ├── UNSUBSCRIBE.json
│   │   │   └── ZZ-broker-check.json
│   │   ├── dynamic-security-init.json
│   │   ├── dynsec_helper.py
│   │   ├── mosq_test_helper.py
│   │   ├── msg_sequence_test.py
│   │   ├── ntest.py
│   │   ├── persist_module_helper.py
│   │   ├── persist_sqlite.py
│   │   ├── prop_subpub_helper.py
│   │   ├── proxy_helper.py
│   │   ├── readme.txt
│   │   ├── test.py
│   │   └── test.supp
│   ├── client/
│   │   ├── 02-subscribe-argv-errors-tls-psk.py
│   │   ├── 02-subscribe-argv-errors-tls.py
│   │   ├── 02-subscribe-argv-errors-without-tls.py
│   │   ├── 02-subscribe-env.py
│   │   ├── 02-subscribe-filter-out.py
│   │   ├── 02-subscribe-format-json-properties.py
│   │   ├── 02-subscribe-format-json-qos0.py
│   │   ├── 02-subscribe-format-json-qos1.py
│   │   ├── 02-subscribe-format-json-retain.py
│   │   ├── 02-subscribe-format.py
│   │   ├── 02-subscribe-null.py
│   │   ├── 02-subscribe-qos1-ws.py
│   │   ├── 02-subscribe-qos1.py
│   │   ├── 02-subscribe-retain-handling.py
│   │   ├── 02-subscribe-verbose.py
│   │   ├── 03-publish-argv-errors-tls-psk.py
│   │   ├── 03-publish-argv-errors-tls.py
│   │   ├── 03-publish-argv-errors-without-tls.py
│   │   ├── 03-publish-env.py
│   │   ├── 03-publish-file-empty.py
│   │   ├── 03-publish-file.py
│   │   ├── 03-publish-options-file.py
│   │   ├── 03-publish-qos0-empty.py
│   │   ├── 03-publish-qos1-properties.py
│   │   ├── 03-publish-qos1-ws-large.py
│   │   ├── 03-publish-qos1-ws.py
│   │   ├── 03-publish-qos1.py
│   │   ├── 03-publish-repeat.py
│   │   ├── 03-publish-socks-auth-failed.py
│   │   ├── 03-publish-socks-no-auth.py
│   │   ├── 03-publish-socks.py
│   │   ├── 03-publish-stdin-file.py
│   │   ├── 03-publish-stdin-line.py
│   │   ├── 03-publish-tls.py
│   │   ├── 03-publish-url.py
│   │   ├── 04-rr-argv-errors-tls-psk.py
│   │   ├── 04-rr-argv-errors-tls.py
│   │   ├── 04-rr-argv-errors-without-tls.py
│   │   ├── 04-rr-env.py
│   │   ├── 04-rr-qos1-ws.py
│   │   ├── 04-rr-qos1.py
│   │   ├── 04-rr-retain-handling.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── data/
│   │   │   └── .config/
│   │   │       ├── mosquitto_pub
│   │   │       └── mosquitto_sub
│   │   ├── mosq_test_helper.py
│   │   ├── test-ws.sh
│   │   ├── test.py
│   │   ├── test.sh
│   │   └── ws.conf
│   ├── lib/
│   │   ├── 01-con-discon-success-v5.py
│   │   ├── 01-con-discon-success.py
│   │   ├── 01-con-discon-will-clear.py
│   │   ├── 01-con-discon-will-v5.py
│   │   ├── 01-con-discon-will.py
│   │   ├── 01-extended-auth-continue.py
│   │   ├── 01-extended-auth-failure.py
│   │   ├── 01-keepalive-pingreq.py
│   │   ├── 01-no-clean-session.py
│   │   ├── 01-pre-connect-callback.py
│   │   ├── 01-server-keepalive-pingreq.py
│   │   ├── 01-unpwd-set.py
│   │   ├── 01-will-set.py
│   │   ├── 01-will-unpwd-set.py
│   │   ├── 02-subscribe-helper-qos2.py
│   │   ├── 02-subscribe-qos0.py
│   │   ├── 02-subscribe-qos1.py
│   │   ├── 02-subscribe-qos2.py
│   │   ├── 02-unsubscribe-multiple-v5.py
│   │   ├── 02-unsubscribe-v5.py
│   │   ├── 02-unsubscribe.py
│   │   ├── 03-publish-b2c-qos1-unexpected-puback.py
│   │   ├── 03-publish-b2c-qos1.py
│   │   ├── 03-publish-b2c-qos2-len.py
│   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.py
│   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.py
│   │   ├── 03-publish-b2c-qos2.py
│   │   ├── 03-publish-c2b-qos1-disconnect.py
│   │   ├── 03-publish-c2b-qos1-len.py
│   │   ├── 03-publish-c2b-qos1-receive-maximum.py
│   │   ├── 03-publish-c2b-qos2-disconnect.py
│   │   ├── 03-publish-c2b-qos2-len.py
│   │   ├── 03-publish-c2b-qos2-maximum-qos-0.py
│   │   ├── 03-publish-c2b-qos2-maximum-qos-1.py
│   │   ├── 03-publish-c2b-qos2-pubrec-error.py
│   │   ├── 03-publish-c2b-qos2-receive-maximum-1.py
│   │   ├── 03-publish-c2b-qos2-receive-maximum-2.py
│   │   ├── 03-publish-c2b-qos2.py
│   │   ├── 03-publish-loop.py
│   │   ├── 03-publish-qos0-no-payload.py
│   │   ├── 03-publish-qos0.py
│   │   ├── 03-request-response-correlation.py
│   │   ├── 03-request-response.py
│   │   ├── 04-retain-qos0.py
│   │   ├── 08-ssl-bad-cacert.py
│   │   ├── 08-ssl-connect-cert-auth-enc.py
│   │   ├── 08-ssl-connect-cert-auth.py
│   │   ├── 08-ssl-connect-no-auth.py
│   │   ├── 08-ssl-connect-san.py
│   │   ├── 08-ssl-fake-cacert.py
│   │   ├── 09-util-topic-tokenise.py
│   │   ├── 11-prop-oversize-packet.py
│   │   ├── 11-prop-recv-qos0.py
│   │   ├── 11-prop-recv-qos1.py
│   │   ├── 11-prop-recv-qos2.py
│   │   ├── 11-prop-send-content-type.py
│   │   ├── 11-prop-send-payload-format.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── c/
│   │   │   ├── 01-con-discon-success-v5.c
│   │   │   ├── 01-con-discon-success.c
│   │   │   ├── 01-con-discon-will-clear.c
│   │   │   ├── 01-con-discon-will-v5.c
│   │   │   ├── 01-con-discon-will.c
│   │   │   ├── 01-extended-auth-continue.c
│   │   │   ├── 01-extended-auth-failure.c
│   │   │   ├── 01-keepalive-pingreq.c
│   │   │   ├── 01-no-clean-session.c
│   │   │   ├── 01-pre-connect-callback.c
│   │   │   ├── 01-server-keepalive-pingreq.c
│   │   │   ├── 01-unpwd-set.c
│   │   │   ├── 01-will-set.c
│   │   │   ├── 01-will-unpwd-set.c
│   │   │   ├── 02-subscribe-helper-callback-qos2.c
│   │   │   ├── 02-subscribe-helper-simple-qos2.c
│   │   │   ├── 02-subscribe-qos0.c
│   │   │   ├── 02-subscribe-qos1-async1.c
│   │   │   ├── 02-subscribe-qos1-async2.c
│   │   │   ├── 02-subscribe-qos1.c
│   │   │   ├── 02-subscribe-qos2.c
│   │   │   ├── 02-unsubscribe-multiple-v5.c
│   │   │   ├── 02-unsubscribe-v5.c
│   │   │   ├── 02-unsubscribe.c
│   │   │   ├── 02-unsubscribe2-v5.c
│   │   │   ├── 03-publish-b2c-qos1-unexpected-puback.c
│   │   │   ├── 03-publish-b2c-qos1.c
│   │   │   ├── 03-publish-b2c-qos2-len.c
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.c
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.c
│   │   │   ├── 03-publish-b2c-qos2.c
│   │   │   ├── 03-publish-c2b-qos1-disconnect.c
│   │   │   ├── 03-publish-c2b-qos1-len.c
│   │   │   ├── 03-publish-c2b-qos1-receive-maximum.c
│   │   │   ├── 03-publish-c2b-qos2-disconnect.c
│   │   │   ├── 03-publish-c2b-qos2-len.c
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-0.c
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-1.c
│   │   │   ├── 03-publish-c2b-qos2-pubrec-error.c
│   │   │   ├── 03-publish-c2b-qos2-receive-maximum.c
│   │   │   ├── 03-publish-c2b-qos2.c
│   │   │   ├── 03-publish-loop-forever.c
│   │   │   ├── 03-publish-loop-manual.c
│   │   │   ├── 03-publish-loop-start.c
│   │   │   ├── 03-publish-loop.c
│   │   │   ├── 03-publish-qos0-no-payload.c
│   │   │   ├── 03-publish-qos0.c
│   │   │   ├── 03-request-response-1.c
│   │   │   ├── 03-request-response-2.c
│   │   │   ├── 03-request-response-correlation-1.c
│   │   │   ├── 04-retain-qos0.c
│   │   │   ├── 08-ssl-bad-cacert.c
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx-default.c
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx.c
│   │   │   ├── 08-ssl-connect-cert-auth-enc.c
│   │   │   ├── 08-ssl-connect-cert-auth.c
│   │   │   ├── 08-ssl-connect-no-auth.c
│   │   │   ├── 08-ssl-connect-san.c
│   │   │   ├── 08-ssl-fake-cacert.c
│   │   │   ├── 09-util-topic-tokenise.c
│   │   │   ├── 11-prop-oversize-packet.c
│   │   │   ├── 11-prop-recv.c
│   │   │   ├── 11-prop-send-content-type.c
│   │   │   ├── 11-prop-send-payload-format.c
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   └── fuzzish.c
│   │   ├── cpp/
│   │   │   ├── 01-con-discon-success-v5.cpp
│   │   │   ├── 01-con-discon-success.cpp
│   │   │   ├── 01-con-discon-will-clear.cpp
│   │   │   ├── 01-con-discon-will-v5.cpp
│   │   │   ├── 01-con-discon-will.cpp
│   │   │   ├── 01-extended-auth-continue.cpp
│   │   │   ├── 01-extended-auth-failure.cpp
│   │   │   ├── 01-keepalive-pingreq.cpp
│   │   │   ├── 01-no-clean-session.cpp
│   │   │   ├── 01-pre-connect-callback.cpp
│   │   │   ├── 01-server-keepalive-pingreq.cpp
│   │   │   ├── 01-unpwd-set.cpp
│   │   │   ├── 01-will-set.cpp
│   │   │   ├── 01-will-unpwd-set.cpp
│   │   │   ├── 02-subscribe-helper-callback-qos2.cpp
│   │   │   ├── 02-subscribe-helper-simple-qos2.cpp
│   │   │   ├── 02-subscribe-qos0.cpp
│   │   │   ├── 02-subscribe-qos1-async1.cpp
│   │   │   ├── 02-subscribe-qos1-async2.cpp
│   │   │   ├── 02-subscribe-qos1.cpp
│   │   │   ├── 02-subscribe-qos2.cpp
│   │   │   ├── 02-unsubscribe-v5.cpp
│   │   │   ├── 02-unsubscribe.cpp
│   │   │   ├── 03-publish-b2c-qos1-unexpected-puback.cpp
│   │   │   ├── 03-publish-b2c-qos1.cpp
│   │   │   ├── 03-publish-b2c-qos2-len.cpp
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.cpp
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.cpp
│   │   │   ├── 03-publish-b2c-qos2.cpp
│   │   │   ├── 03-publish-c2b-qos1-disconnect.cpp
│   │   │   ├── 03-publish-c2b-qos1-len.cpp
│   │   │   ├── 03-publish-c2b-qos1-receive-maximum.cpp
│   │   │   ├── 03-publish-c2b-qos2-disconnect.cpp
│   │   │   ├── 03-publish-c2b-qos2-len.cpp
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-0.cpp
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-1.cpp
│   │   │   ├── 03-publish-c2b-qos2-pubrec-error.cpp
│   │   │   ├── 03-publish-c2b-qos2-receive-maximum.cpp
│   │   │   ├── 03-publish-c2b-qos2.cpp
│   │   │   ├── 03-publish-loop-forever.cpp
│   │   │   ├── 03-publish-loop-manual.cpp
│   │   │   ├── 03-publish-loop-start.cpp
│   │   │   ├── 03-publish-loop.cpp
│   │   │   ├── 03-publish-qos0-no-payload.cpp
│   │   │   ├── 03-publish-qos0.cpp
│   │   │   ├── 03-request-response-1.cpp
│   │   │   ├── 03-request-response-2.cpp
│   │   │   ├── 03-request-response-correlation-1.cpp
│   │   │   ├── 04-retain-qos0.cpp
│   │   │   ├── 08-ssl-bad-cacert.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx-default.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-enc.cpp
│   │   │   ├── 08-ssl-connect-cert-auth.cpp
│   │   │   ├── 08-ssl-connect-no-auth.cpp
│   │   │   ├── 08-ssl-connect-san.cpp
│   │   │   ├── 08-ssl-fake-cacert.cpp
│   │   │   ├── 09-util-topic-tokenise.cpp
│   │   │   ├── 11-prop-oversize-packet.cpp
│   │   │   ├── 11-prop-recv.cpp
│   │   │   ├── 11-prop-send-content-type.cpp
│   │   │   ├── 11-prop-send-payload-format.cpp
│   │   │   ├── CMakeLists.txt
│   │   │   └── Makefile
│   │   ├── data/
│   │   │   ├── AUTH.json
│   │   │   ├── CONNACK.json
│   │   │   ├── CONNECT.json
│   │   │   ├── DISCONNECT.json
│   │   │   ├── FORBIDDEN.json
│   │   │   ├── PINGREQ.json
│   │   │   ├── PINGRESP.json
│   │   │   ├── PUBACK.json
│   │   │   ├── PUBLISH.json
│   │   │   ├── PUBREC.json
│   │   │   ├── SUBSCRIBE.json
│   │   │   ├── UNSUBACK.json
│   │   │   └── UNSUBSCRIBE.json
│   │   ├── mosq_test_helper.py
│   │   ├── msg_sequence_test.py
│   │   └── test.py
│   ├── mock/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── apps/
│   │   │   ├── CMakeLists.txt
│   │   │   └── mosquitto_ctrl/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── Makefile
│   │   │       ├── ctrl_shell_mock.cpp
│   │   │       └── ctrl_shell_mock.hpp
│   │   ├── c_function_mock.hpp
│   │   ├── editline_mock.cpp
│   │   ├── editline_mock.hpp
│   │   ├── lib/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── actions_publish_mock.cpp
│   │   │   ├── actions_subscribe_mock.cpp
│   │   │   ├── actions_unsubscribe_mock.cpp
│   │   │   ├── callbacks_mock.cpp
│   │   │   ├── connect_mock.cpp
│   │   │   ├── extended_auth_mock.cpp
│   │   │   ├── helpers_mock.cpp
│   │   │   ├── libmosquitto_mock.cpp
│   │   │   ├── libmosquitto_mock.hpp
│   │   │   ├── loop_mock.cpp
│   │   │   ├── messages_mosq_mock.cpp
│   │   │   ├── net_mosq_mock.cpp
│   │   │   ├── options_mock.cpp
│   │   │   ├── socks_mosq_mock.cpp
│   │   │   ├── srv_mosq_mock.cpp
│   │   │   └── thread_mosq_mock.cpp
│   │   ├── libcommon/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── base64_common_mock.cpp
│   │   │   ├── cjson_common.cpp
│   │   │   ├── file_common_mock.cpp
│   │   │   ├── libmosquitto_common_mock.cpp
│   │   │   ├── libmosquitto_common_mock.hpp
│   │   │   ├── memory_common_mock.cpp
│   │   │   ├── mqtt_common_mock.cpp
│   │   │   ├── password_common_mock.cpp
│   │   │   ├── property_common_mock.cpp
│   │   │   ├── random_common_mock.cpp
│   │   │   ├── strings_common_mock.cpp
│   │   │   ├── time_common_mock.cpp
│   │   │   ├── topic_common_mock.cpp
│   │   │   └── utf8_common_mock.cpp
│   │   ├── pthread_mock.cpp
│   │   └── pthread_mock.hpp
│   ├── mosq_test.py
│   ├── mqtt5_opts.py
│   ├── mqtt5_props.py
│   ├── mqtt5_rc.py
│   ├── old/
│   │   ├── Makefile
│   │   ├── msgsps_common.h
│   │   ├── msgsps_pub.c
│   │   └── msgsps_sub.c
│   ├── path_helper.h
│   ├── ptest.py
│   ├── random/
│   │   ├── Makefile
│   │   ├── auth_plugin.c
│   │   ├── pwfile
│   │   ├── random.conf
│   │   ├── random_client.py
│   │   └── test.py
│   ├── ssl/
│   │   ├── all-ca.crt
│   │   ├── client-encrypted.crt
│   │   ├── client-encrypted.key
│   │   ├── client-expired.crt
│   │   ├── client-expired.key
│   │   ├── client-revoked.crt
│   │   ├── client-revoked.key
│   │   ├── client.crt
│   │   ├── client.key
│   │   ├── crl-empty.pem
│   │   ├── crl.pem
│   │   ├── dhparam
│   │   ├── gen.sh
│   │   ├── openssl.cnf
│   │   ├── readme.txt
│   │   ├── server-expired.crt
│   │   ├── server-expired.key
│   │   ├── server-san.crt
│   │   ├── server-san.key
│   │   ├── server.crt
│   │   ├── server.key
│   │   ├── test-alt-ca.crt
│   │   ├── test-alt-ca.key
│   │   ├── test-bad-root-ca.crt
│   │   ├── test-bad-root-ca.key
│   │   ├── test-fake-root-ca.crt
│   │   ├── test-fake-root-ca.key
│   │   ├── test-root-ca.crt
│   │   ├── test-root-ca.key
│   │   ├── test-signing-ca.crt
│   │   └── test-signing-ca.key
│   └── unit/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── broker/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── bridge_topic_test.c
│       │   ├── files/
│       │   │   ├── persist_read/
│       │   │   │   ├── corrupt-header-long.test-db
│       │   │   │   ├── corrupt-header-short.test-db
│       │   │   │   ├── empty.test-db
│       │   │   │   ├── unsupported-version.test-db
│       │   │   │   ├── v3-bad-chunk.test-db
│       │   │   │   ├── v3-cfg-bad-dbid.test-db
│       │   │   │   ├── v3-cfg-truncated.test-db
│       │   │   │   ├── v3-cfg.test-db
│       │   │   │   ├── v3-client-message.test-db
│       │   │   │   ├── v3-client.test-db
│       │   │   │   ├── v3-message-store.test-db
│       │   │   │   ├── v3-retain.test-db
│       │   │   │   ├── v3-sub.test-db
│       │   │   │   ├── v4-cfg.test-db
│       │   │   │   ├── v4-message-store.test-db
│       │   │   │   ├── v5-bad-chunk.test-db
│       │   │   │   ├── v5-cfg-truncated.test-db
│       │   │   │   ├── v5-client.test-db
│       │   │   │   ├── v6-base-msg-topic-0.test-db
│       │   │   │   ├── v6-cfg.test-db
│       │   │   │   ├── v6-client-message-props.test-db
│       │   │   │   ├── v6-client-message.test-db
│       │   │   │   ├── v6-client.test-db
│       │   │   │   ├── v6-message-store-props.test-db
│       │   │   │   ├── v6-message-store.test-db
│       │   │   │   ├── v6-retain.test-db
│       │   │   │   └── v6-sub.test-db
│       │   │   └── persist_write/
│       │   │       ├── empty.test-db
│       │   │       ├── v4-full.test-db
│       │   │       └── v6-message-store-no-ref.test-db
│       │   ├── keepalive_stubs.c
│       │   ├── keepalive_test.c
│       │   ├── persist_read_stubs.c
│       │   ├── persist_read_test.c
│       │   ├── persist_write_stubs.c
│       │   ├── persist_write_test.c
│       │   ├── stubs.c
│       │   ├── subs_stubs.c
│       │   └── subs_test.c
│       ├── lib/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── datatype_read.c
│       │   ├── datatype_write.c
│       │   ├── property_read.c
│       │   ├── property_user_read.c
│       │   ├── property_write.c
│       │   ├── publish_test.c
│       │   ├── stubs.c
│       │   └── test.c
│       ├── libcommon/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── base64_test.c
│       │   ├── file_test.c
│       │   ├── property_add.c
│       │   ├── property_value.c
│       │   ├── strings_test.c
│       │   ├── test.c
│       │   ├── topic_test.c
│       │   ├── trim_test.c
│       │   └── utf8.c
│       ├── tls_stubs.c
│       └── tls_test.c
├── vcpkg.json
└── www/
    ├── README.md
    ├── conf.py
    ├── files/
    │   ├── manifest.json
    │   └── stickers/
    │       └── index.html
    ├── pages/
    │   ├── documentation/
    │   │   ├── authentication-methods.md
    │   │   ├── dynamic-security.md
    │   │   ├── listeners/
    │   │   │   ├── haproxy.md
    │   │   │   └── per_listener_settings.md
    │   │   ├── migrating-to-2-0.md
    │   │   ├── persistence/
    │   │   │   └── sqlite.md
    │   │   ├── plugins/
    │   │   │   ├── acl-file.md
    │   │   │   ├── password-file.md
    │   │   │   └── sparkplug-aware.md
    │   │   └── using-the-snap.md
    │   ├── documentation.md
    │   ├── download.md
    │   ├── index.html
    │   ├── roadmap.md
    │   └── security.md
    ├── plugins/
    │   ├── __init__.py
    │   └── docbookmanpage/
    │       ├── docbookmanpage.plugin
    │       ├── docbookmanpage.py
    │       └── html.xsl
    ├── posts/
    │   ├── 2009/
    │   │   └── 12/
    │   │       ├── version-0-2-released.md
    │   │       └── version-0-3-released.md
    │   ├── 2010/
    │   │   ├── 01/
    │   │   │   ├── mailing-list-irc.md
    │   │   │   ├── version-0-4-1-released.md
    │   │   │   └── version-0-4-released.md
    │   │   ├── 02/
    │   │   │   └── version-0-4-2-released.md
    │   │   ├── 03/
    │   │   │   ├── google-powermeter.md
    │   │   │   ├── upgrading-to-0-5-1.md
    │   │   │   ├── version-0-5-1-released.md
    │   │   │   ├── version-0-5-2-released.md
    │   │   │   ├── version-0-5-3-released.md
    │   │   │   └── version-0-5-4-released.md
    │   │   ├── 04/
    │   │   │   ├── help-wanted-rpm-packaging.md
    │   │   │   ├── mind-control-mqtt.md
    │   │   │   └── oggcamp.md
    │   │   ├── 05/
    │   │   │   ├── fedora-packages-available.md
    │   │   │   ├── gentoo-ebuilds-available.md
    │   │   │   ├── mosquitto-org.md
    │   │   │   ├── mqtt-push-on-android.md
    │   │   │   ├── mqtt-wiki.md
    │   │   │   ├── version-0-6-1-released.md
    │   │   │   └── version-0-6-released.md
    │   │   ├── 06/
    │   │   │   ├── automation-has-the-oven-warmed-up-yet.md
    │   │   │   ├── google-powermeter-step-by-step.attachments.json
    │   │   │   ├── google-powermeter-step-by-step.md
    │   │   │   ├── mosquitto-0-7rc1.md
    │   │   │   └── version-0-7-released.md
    │   │   ├── 07/
    │   │   │   ├── mosquitto-on-opensuse-11-3.md
    │   │   │   └── mqtt-client-library.md
    │   │   ├── 08/
    │   │   │   ├── compiling-mosquitto-on-mac-os-x.md
    │   │   │   ├── mosquitto-running-on-mac-os-x.md
    │   │   │   ├── mqtt-v3-1.md
    │   │   │   ├── version-0-8-1-released.md
    │   │   │   ├── version-0-8-2.md
    │   │   │   └── version-0-8-released.md
    │   │   ├── 09/
    │   │   │   ├── debian-packages.md
    │   │   │   └── mqtt-with-php.md
    │   │   ├── 10/
    │   │   │   ├── man-page-translations.md
    │   │   │   ├── one-year-old.md
    │   │   │   └── version-0-8-3-released.md
    │   │   ├── 11/
    │   │   │   ├── distro-packaging.md
    │   │   │   ├── mosquitto-0-9test2.md
    │   │   │   └── version-0-9-released.md
    │   │   └── 12/
    │   │       └── version-0-9-1-released.md
    │   ├── 2011/
    │   │   ├── 01/
    │   │   │   ├── mosquitto-for-slackware.md
    │   │   │   └── mqtt-news.md
    │   │   ├── 02/
    │   │   │   ├── lightweight-messaging-and-linux.md
    │   │   │   ├── mosquitto-on-maemo.md
    │   │   │   ├── mqtt-on-android.md
    │   │   │   └── version-0-9-2-released.md
    │   │   ├── 03/
    │   │   │   ├── api-documentation.md
    │   │   │   ├── mosquitto-in-mac-homebrew.md
    │   │   │   └── version-0-9-3-released.md
    │   │   ├── 04/
    │   │   │   └── version-0-10-released.md
    │   │   ├── 05/
    │   │   │   ├── mqtt-ontology.md
    │   │   │   └── version-0-10-1-released.md
    │   │   ├── 06/
    │   │   │   ├── nanode-a-cheap-networked-arduino-clone.md
    │   │   │   ├── version-0-10-2-released.md
    │   │   │   ├── version-0-11-1-released.md
    │   │   │   ├── version-0-11-2-released.md
    │   │   │   └── version-0-11-released.md
    │   │   ├── 07/
    │   │   │   ├── debian-and-ubuntu-packaging.md
    │   │   │   ├── lua-mqtt-client.md
    │   │   │   ├── mosquitto-on-qnx.md
    │   │   │   ├── version-0-11-3-released.md
    │   │   │   ├── version-0-12-released.md
    │   │   │   └── wireshark-mqtt-decoder.md
    │   │   ├── 08/
    │   │   │   ├── arch-linux-package.md
    │   │   │   ├── facebook-using-mqtt.attachments.json
    │   │   │   ├── facebook-using-mqtt.md
    │   │   │   ├── mosquitto-on-openwrt.md
    │   │   │   └── mqtt-standardisation.md
    │   │   ├── 09/
    │   │   │   └── version-0-13-released.md
    │   │   ├── 10/
    │   │   │   ├── mqtt-power-usage-on-android.md
    │   │   │   └── two.md
    │   │   ├── 11/
    │   │   │   ├── android-mqtt-example-project.md
    │   │   │   ├── ibm-java-and-c-clients-to-be-open-source.md
    │   │   │   ├── new-linux-repositories.md
    │   │   │   ├── version-0-14-1-released.md
    │   │   │   ├── version-0-14-2-released.md
    │   │   │   └── version-0-14-released.md
    │   │   └── 12/
    │   │       ├── mqtt-on-nanode.md
    │   │       └── version-0-14-3-released.md
    │   ├── 2012/
    │   │   ├── 01/
    │   │   │   ├── challenge-web-based-mqtt-graphing.md
    │   │   │   ├── do-you-use-mqtt.md
    │   │   │   ├── mosquitto-test-server.md
    │   │   │   └── version-0-14-4-released.md
    │   │   ├── 02/
    │   │   │   ├── mqtt2pachube.md
    │   │   │   └── version-0-15-released.md
    │   │   ├── 03/
    │   │   │   ├── quick-start-guide-for-mqtt-with-pachube.md
    │   │   │   └── upcoming-incompatible-library-changes.md
    │   │   ├── 05/
    │   │   │   └── python-client-module-available-for-testing.md
    │   │   ├── 06/
    │   │   │   ├── ipv6-on-test-server.md
    │   │   │   └── ssl-support-on-test-server.md
    │   │   ├── 07/
    │   │   │   └── upcoming-release.md
    │   │   ├── 08/
    │   │   │   ├── baby.attachments.json
    │   │   │   ├── baby.md
    │   │   │   ├── bugfix-coming-soon.md
    │   │   │   ├── version-1-0-1-released.md
    │   │   │   ├── version-1-0-2-released.md
    │   │   │   └── version-1-0-released.md
    │   │   ├── 09/
    │   │   │   ├── updating-password-files.md
    │   │   │   └── version-1-0-3-released.md
    │   │   ├── 10/
    │   │   │   └── version-1-0-4-released.md
    │   │   ├── 11/
    │   │   │   ├── making-mosquitto-packages-for-debian-yourself.md
    │   │   │   └── version-1-0-5-released.md
    │   │   └── 12/
    │   │       ├── libmosquitto-go-bindings.md
    │   │       └── version-1-1-released.md
    │   ├── 2013/
    │   │   ├── 01/
    │   │   │   ├── mosquitto-debian-repository.md
    │   │   │   ├── version-1-1-1-released.md
    │   │   │   └── version-1-1-2-released.md
    │   │   ├── 02/
    │   │   │   ├── mqtt-standardisation-oasis-call-for-participation.md
    │   │   │   └── version-1-1-3-released.md
    │   │   ├── 04/
    │   │   │   └── some-interesting-mqtt-things.md
    │   │   ├── 05/
    │   │   │   └── mosquitto-javascript-client-deprecated.md
    │   │   ├── 07/
    │   │   │   ├── authentication-plugins.md
    │   │   │   └── version-1-2-near-complete.md
    │   │   ├── 08/
    │   │   │   ├── mosquitto-on-fedora.md
    │   │   │   ├── mqtt-watchdir.md
    │   │   │   └── version-1-2-released.md
    │   │   ├── 09/
    │   │   │   └── version-1-2-1-released.md
    │   │   ├── 10/
    │   │   │   └── version-1-2-2-released.md
    │   │   └── 12/
    │   │       ├── paho-mqtt-python-client.md
    │   │       └── version-1-2-3-released.md
    │   ├── 2014/
    │   │   ├── 03/
    │   │   │   ├── version-1-3-1-released.md
    │   │   │   └── version-1-3-released.md
    │   │   ├── 05/
    │   │   │   ├── new-arrival.attachments.json
    │   │   │   └── new-arrival.md
    │   │   ├── 07/
    │   │   │   └── version-1-3-2-released.md
    │   │   ├── 08/
    │   │   │   ├── version-1-3-3-released.md
    │   │   │   └── version-1-3-4-released.md
    │   │   └── 10/
    │   │       ├── mosquitto-and-poodle.md
    │   │       ├── unintended-change-of-behaviour-in-1-3-4.md
    │   │       └── version-1-3-5-released.md
    │   ├── 2015/
    │   │   ├── 01/
    │   │   │   └── seeking-sponsorship.md
    │   │   ├── 02/
    │   │   │   └── version-1-4-released.md
    │   │   ├── 04/
    │   │   │   └── version-1-4-1-released.md
    │   │   ├── 05/
    │   │   │   ├── mosquitto-and-current-unreleased-libwebsockets-branch.md
    │   │   │   └── version-1-4-2-released.md
    │   │   ├── 08/
    │   │   │   └── version-1-4-3-released.md
    │   │   ├── 09/
    │   │   │   └── version-1-4-4-released.md
    │   │   ├── 11/
    │   │   │   └── version-1-4-5-released.md
    │   │   └── 12/
    │   │       ├── using-lets-encrypt-certificates-with-mosquitto.md
    │   │       └── version-1-4-7-released.md
    │   ├── 2016/
    │   │   ├── 01/
    │   │   │   └── test6-mosquitto-org.md
    │   │   ├── 02/
    │   │   │   └── version-1-4-8-released.md
    │   │   ├── 03/
    │   │   │   ├── logo-contest-results-for-shortlisting.md
    │   │   │   ├── logo-contest.md
    │   │   │   └── repository-moved-to-github.md
    │   │   ├── 05/
    │   │   │   ├── stickers.attachments.json
    │   │   │   └── stickers.md
    │   │   ├── 06/
    │   │   │   └── version-1-4-9-released.md
    │   │   ├── 08/
    │   │   │   ├── mqtt-v5-draft-features.md
    │   │   │   └── version-1-4-10-released.md
    │   │   └── 12/
    │   │       └── pre-christmas-update.md
    │   ├── 2017/
    │   │   ├── 02/
    │   │   │   └── version-1-4-11-released.md
    │   │   ├── 03/
    │   │   │   ├── for-the-final-time.attachments.json
    │   │   │   └── for-the-final-time.md
    │   │   ├── 05/
    │   │   │   └── security-advisory-cve-2017-7650.md
    │   │   ├── 06/
    │   │   │   ├── citing-eclipse-mosquitto.md
    │   │   │   └── security-advisory-cve-2017-9868.md
    │   │   └── 07/
    │   │       ├── version-1-4-13-released.md
    │   │       └── version-1-4-14-released.md
    │   ├── 2018/
    │   │   ├── 01/
    │   │   │   └── mosquitto-debian-repo-key-updated.md
    │   │   ├── 02/
    │   │   │   └── security-advisory-cve-2017-7651-cve-2017-7652.md
    │   │   ├── 05/
    │   │   │   ├── press-release.md
    │   │   │   └── version-1-5-released.md
    │   │   ├── 08/
    │   │   │   ├── updated-debian-repository-backend.md
    │   │   │   └── version-151-released.md
    │   │   ├── 09/
    │   │   │   ├── security-advisory-cve-2018-12543.md
    │   │   │   └── version-152-released.md
    │   │   ├── 11/
    │   │   │   ├── mqtt5-progress.md
    │   │   │   └── version-154-released.md
    │   │   └── 12/
    │   │       └── version-155-released.md
    │   ├── 2019/
    │   │   ├── 02/
    │   │   │   ├── mqtt5-test-release.md
    │   │   │   ├── version-1-5-6-released.md
    │   │   │   ├── version-1-5-7-released.md
    │   │   │   └── version-1-5-8-released.md
    │   │   ├── 04/
    │   │   │   ├── version-1-6-1-released.md
    │   │   │   ├── version-1-6-2-released.md
    │   │   │   └── version-1-6-released.md
    │   │   ├── 06/
    │   │   │   └── version-1-6-3-released.md
    │   │   ├── 08/
    │   │   │   └── version-1-6-4-released.md
    │   │   ├── 09/
    │   │   │   ├── version-1-6-5-released.md
    │   │   │   ├── version-1-6-6-released.md
    │   │   │   └── version-1-6-7-released.md
    │   │   └── 11/
    │   │       └── version-1-6-8-released.md
    │   ├── 2020/
    │   │   ├── 02/
    │   │   │   └── version-1-6-9-released.md
    │   │   ├── 05/
    │   │   │   └── version-1-6-10-released.md
    │   │   ├── 06/
    │   │   │   ├── mosquitto-ubuntu-appliance.md
    │   │   │   └── test-mosquitto-org-cert-updated.md
    │   │   ├── 08/
    │   │   │   ├── version-1-6-11-released.md
    │   │   │   └── version-1-6-12-released.md
    │   │   └── 12/
    │   │       ├── version-2-0-0-released.md
    │   │       ├── version-2-0-2-released.md
    │   │       ├── version-2-0-3-released.md
    │   │       └── version-2-0-4-released.md
    │   ├── 2021/
    │   │   ├── 01/
    │   │   │   ├── version-2-0-5-released.md
    │   │   │   └── version-2-0-6-released.md
    │   │   ├── 02/
    │   │   │   ├── version-2-0-7-released.md
    │   │   │   └── version-2-0-8-released.md
    │   │   ├── 03/
    │   │   │   └── version-2-0-9-released.md
    │   │   ├── 04/
    │   │   │   └── version-2-0-10-released.md
    │   │   ├── 06/
    │   │   │   └── version-2-0-11-released.md
    │   │   ├── 08/
    │   │   │   └── version-2-0-12-released.md
    │   │   ├── 10/
    │   │   │   └── version-2-0-13-released.md
    │   │   └── 11/
    │   │       └── version-2-0-14-released.md
    │   ├── 2022/
    │   │   └── 08/
    │   │       └── version-2-0-15-released.md
    │   ├── 2023/
    │   │   ├── 08/
    │   │   │   ├── version-2-0-16-released.md
    │   │   │   └── version-2-0-17-released.md
    │   │   └── 09/
    │   │       └── version-2-0-18-released.md
    │   ├── 2024/
    │   │   └── 10/
    │   │       ├── version-2-0-19-released.md
    │   │       └── version-2-0-20-released.md
    │   ├── 2025/
    │   │   ├── 03/
    │   │   │   └── version-2-0-21-released.md
    │   │   └── 07/
    │   │       └── version-2-0-22-released.md
    │   └── 2026/
    │       ├── 01/
    │       │   ├── rc-2.1.0rc1-available.md
    │       │   └── version-2-1-0-released.md
    │       └── 02/
    │           ├── version-2-1-1-released.md
    │           └── version-2-1-2-released.md
    ├── templates/
    │   └── book.tmpl
    └── themes/
        └── mosquitto/
            ├── assets/
            │   └── css/
            │       ├── bulma.css
            │       ├── local.css
            │       └── man.css
            ├── engine
            ├── parent
            └── templates/
                ├── base.tmpl
                ├── base_footer.tmpl
                ├── base_header.tmpl
                ├── base_helper.tmpl
                ├── index.tmpl
                ├── post.tmpl
                ├── post_header.tmpl
                └── story.tmpl

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.{c,h,cpp,hpp}]
indent_style = tab
indent_size = 4

[*.py]
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab

[*.{yml,yaml}]
indent_style = space
indent_size = 2


================================================
FILE: .github/issue_template.md
================================================
<!--

STOP!  If you are reporting a security issue, which includes *anything* that
       may cause the broker/client to crash, please do NOT report it here but
       follow the steps at https://www.eclipse.org/security/

If your issue is not a bug or a feature request, please use the mailing list at
https://dev.eclipse.org/mailman/listinfo/mosquitto-dev to ask your question.
There are many more people available to help there than on this issue tracker.

If you are reporting a bug PLEASE include the version of Mosquitto you are
using and what platform (Windows, Ubuntu/Fedora/... Linux, FreeBSD, ...) you
are running on.

Please also note that some systems have old versions of Mosquitto available in
their package repositories. We would be very grateful if you would check to
see whether the bug is still present in a newer version before submitting your
issue.

-->



================================================
FILE: .github/labeler.yml
================================================
'Status: Available':
  - '/.*/'


================================================
FILE: .github/pull_request_template.md
================================================
Thank you for contributing your time to the Mosquitto project!

Before you go any further, please note that we cannot accept contributions if
you haven't signed the [Eclipse Contributor Agreement](https://www.eclipse.org/legal/ECA.php).
If you aren't able to do that, or just don't want to, please describe your bug
fix/feature change in an issue. For simple bug fixes it is can be just as easy
for us to be told about the problem and then go fix it directly.

Then please check the following list of things we ask for in your pull request:

- [ ] Have you signed the [Eclipse Contributor Agreement](https://www.eclipse.org/legal/ECA.php), using the same email address as you used in your commits?
- [ ] Do each of your commits have a "Signed-off-by" line, with the correct email address? Use "git commit -s" to generate this line for you.
- [ ] If you are contributing a new feature, is your work based off the develop branch?
- [ ] If you are contributing a bugfix, is your work based off the fixes branch?
- [ ] Have you added an explanation of what your changes do and why you'd like us to include them?
- [ ] Have you successfully run `make test` with your changes locally?

-----


================================================
FILE: .github/workflows/build-variants.yml
================================================
name: Mosquitto - Build variants

on:
  push:
    branches:
      - master
      - develop
      - fixes
      - release/*
  pull_request:
    branches:
      - master
      - develop
      - fixes
      - release/*

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Install third party dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          docbook-xsl \
          libargon2-dev \
          libc-ares-dev \
          libcjson-dev \
          libcunit1-dev \
          libedit-dev \
          libgmock-dev \
          libmicrohttpd-dev \
          libssl-dev \
          libsystemd-dev \
          libwrap0-dev \
          python3-all \
          uthash-dev \
          xsltproc
    - uses: actions/checkout@v6
      with:
        submodules: 'true'
    - name: build
      run: ./buildtest.py


================================================
FILE: .github/workflows/cifuzz.yml
================================================
name: CIFuzz
on:
  workflow_dispatch:
  pull_request:
    branches:
      - master
      - develop
    paths:
      - '**.c'
      - '**.cpp'
      - '**.h'
permissions: {}
jobs:
  Fuzzing:
    runs-on: ubuntu-latest
    permissions:
      security-events: write
    steps:
    - name: Build Fuzzers
      id: build
      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
      with:
        oss-fuzz-project-name: 'mosquitto'
    - name: Run Fuzzers
      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
      with:
        oss-fuzz-project-name: 'mosquitto'
        fuzz-seconds: 600
        output-sarif: true
    - name: Upload Crash
      uses: actions/upload-artifact@v6
      if: failure() && steps.build.outcome == 'success'
      with:
        name: artifacts
        path: ./out/artifacts
    - name: Upload Sarif
      if: always() && steps.build.outcome == 'success'
      uses: github/codeql-action/upload-sarif@v3
      with:
        # Path to SARIF file relative to the root of the repository
        sarif_file: cifuzz-sarif/results.sarif
        checkout_path: cifuzz-sarif


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  workflow_dispatch:
  push:
    branches: [ master, fixes, develop ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ master ]
  schedule:
    - cron: '44 18 * * 1'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: [ 'cpp', 'python' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

    steps:
    - name: Checkout repository
      uses: actions/checkout@v6

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 https://git.io/JvXDl

    - run: sudo apt-get update && sudo apt-get install -y gcc g++ git libssl-dev libargon2-dev libedit-dev libmicrohttpd-dev
    # Install cJSON
    - run: git clone https://github.com/DaveGamble/cJSON /tmp/cJSON
    - run: wget https://github.com/DaveGamble/cJSON/archive/v1.7.19.tar.gz -O /tmp/cjson.tar.gz
    - run: mkdir -p /tmp/build/cjson
    - run: tar --strip=1 -xf /tmp/cjson.tar.gz -C /tmp/build/cjson
    - run: rm /tmp/cjson.tar.gz
    - run: cd /tmp/build/cjson && cmake .  -DCMAKE_BUILD_TYPE=MinSizeRel -DCJSON_BUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr
    - run: sudo make -C /tmp/build/cjson install

    # Now build Mosquitto
    - run: make binary

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3


================================================
FILE: .github/workflows/coverage.yml
================================================
name: Coverage

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - develop
      - fixes
      - release/*
  pull_request:
    branches:
      - master
      - develop
      - fixes
      - release/*

jobs:
  coverage:
    runs-on: ubuntu-22.04

    steps:
    - run: |
        sudo apt-get update
        sudo apt-get install -y \
            docbook-xsl \
            lcov \
            libargon2-dev \
            libc-ares-dev \
            libcjson-dev \
            libcjson1 \
            libcunit1-dev \
            libedit-dev \
            libgmock-dev \
            libmicrohttpd-dev \
            libssl-dev \
            libwrap0-dev \
            microsocks \
            python3-all \
            python3-paho-mqtt \
            python3-psutil \
            uthash-dev \
            xsltproc

    - uses: actions/checkout@v6

    - run: |
        make \
          WITH_COVERAGE=yes \
          CFLAGS="-O0 -Wall -ggdb -fprofile-arcs" \
          -j $(nproc) \
          binary
        make \
          WITH_COVERAGE=yes \
          CFLAGS="-O0 -Wall -ggdb -fprofile-arcs" \
          -j $(nproc) \
          test-compile

    - run: |
        make -C test test

    - run: |
        lcov --capture --directory . --output-file coverage.info --no-external

    - uses: codecov/codecov-action@v4
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        fail_ci_if_error: true
        files: ./coverage.info
        verbose: true


================================================
FILE: .github/workflows/coverity-scan-develop.yml
================================================
name: Coverity Scan develop branch on a weekly basis

on:
  workflow_dispatch:
  schedule:
    - cron: "7 3 * * 0"

jobs:
  coverity:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
      with:
        ref: develop

    - name: Dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
            docbook-xsl \
            google-mock \
            googletest \
            lcov \
            libc-ares-dev \
            libcjson-dev \
            libcjson1 \
            libcunit1-dev \
            libedit-dev \
            libgmock-dev \
            libmicrohttpd-dev \
            libssl-dev \
            libwrap0-dev \
            microsocks \
            python3-all \
            python3-paho-mqtt \
            python3-psutil \
            uthash-dev \
            xsltproc

    - uses: vapier/coverity-scan-action@v1
      with:
        build_language: 'cxx'
        project: "eclipse/mosquitto"
        token: ${{ secrets.COVERITY_SCAN_TOKEN }}
        email: ${{ secrets.COVERITY_SCAN_EMAIL }}
        command: "make binary-all"


================================================
FILE: .github/workflows/coverity-scan-fixes.yml
================================================
name: Coverity Scan fixes branch on a weekly basis

on:
  workflow_dispatch:
  schedule:
    - cron: "7 3 * * 3"

jobs:
  coverity:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
      with:
        ref: fixes

    - name: Dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
            docbook-xsl \
            lcov \
            libc-ares-dev \
            libcjson-dev \
            libcjson1 \
            libcunit1-dev \
            libedit-dev \
            libmicrohttpd-dev \
            libssl-dev \
            libwrap0-dev \
            microsocks \
            python3-all \
            python3-paho-mqtt \
            python3-psutil \
            uthash-dev \
            xsltproc

    - uses: vapier/coverity-scan-action@v1
      with:
        build_language: 'cxx'
        project: "eclipse/mosquitto"
        token: ${{ secrets.COVERITY_SCAN_TOKEN }}
        email: ${{ secrets.COVERITY_SCAN_EMAIL }}
        command: "make binary-all"


================================================
FILE: .github/workflows/delete-old-workflow-runs.yml
================================================
name: Delete old workflow runs
on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 1 * *'
# Run monthly, at 00:00 on the 1st day of month.

jobs:
  del_runs:
    runs-on: ubuntu-latest
    steps:
      - name: Delete workflow runs
        uses: Mattraks/delete-workflow-runs@v2
        with:
          token: ${{ github.token }}
          repository: ${{ github.repository }}
          retain_days: 30
          keep_minimum_runs: 6


================================================
FILE: .github/workflows/issue-labler.yml
================================================
name: "Issue Labeler"
on:
  issues:
    types: [opened]

permissions:
  issues: write
  contents: read

jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
    - uses: github/issue-labeler@v3.4
      with:
        configuration-path: .github/labeler.yml
        not-before: 2024-11-03T00:00:00Z
        enable-versioned-regex: 0
        repo-token: ${{ github.token }}


================================================
FILE: .github/workflows/lock.yml
================================================
name: 'Lock Threads'

on:
  schedule:
    - cron: '0 0 * * 0'
  workflow_dispatch:

permissions:
  issues: write
  pull-requests: write

concurrency:
  group: lock-threads

jobs:
  action:
    runs-on: ubuntu-latest
    steps:
      - uses: dessant/lock-threads@v6
        with:
          issue-inactive-days: '90'


================================================
FILE: .github/workflows/macos.yml
================================================
name: Mac OS build

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - fixes
      - develop
      - release/*
    tags:
      - 'v[0-9]+.*'
  pull_request:
    branches:
      - master
      - fixes
      - develop
      - release/*

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  mosquitto:
    runs-on: macos-latest

    steps:
      - uses: actions/checkout@v6

      - name: pin cmake to 3.x series
        uses: jwlawson/actions-setup-cmake@09fd9b0fb3b239b4b68d9256cd65adf8d6b91da0
        with:
          cmake-version: '3.31.6'

      - name: Python test dependencies
        uses: actions/setup-python@v6
        with:
          cache: 'pip'

      - name: Install Homebrew dependencies
        run: |
          brew update
          brew list cmake || brew install cmake
          brew install \
            argon2 \
            cjson \
            cunit \
            docbook-xsl \
            gcc \
            googletest \
            libedit \
            libmicrohttpd \
            make \
            openssl \
            uthash

      - name: Configure CMake
        run: |
          EDITLINE_DIR=$(brew --prefix libedit)
          HOMEBREW_PREFIX=$(brew --prefix)
          cmake -B ${{github.workspace}}/build64 \
            -G Ninja \
            -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \
            -DCMAKE_PREFIX_PATH="$HOMEBREW_PREFIX" \
            -DWITH_DOCS=OFF \
            -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3)
      - name: Build
        run: |
          cmake --build ${{github.workspace}}/build64 \
            --config ${{env.BUILD_TYPE}}

      - name: Test
        working-directory: build64/
        run: |
          python3 -m venv venv
          source venv/bin/activate
          python3 -m pip install --upgrade pip
          python3 -m pip install psutil
          ctest --output-on-failure --repeat until-pass:5


================================================
FILE: .github/workflows/mosquitto-cmake.yml
================================================
name: Mosquitto - CMake

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - fixes
      - develop
      - release/*
    tags:
      - 'v[0-9]+.*'
  pull_request:
    branches:
      - master
      - fixes
      - develop
      - release/*

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Install third party dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          docbook-xsl \
          lcov \
          libargon2-dev \
          libc-ares-dev \
          libcjson-dev \
          libcjson1 \
          libcunit1-dev \
          libedit-dev \
          libgmock-dev \
          libmicrohttpd-dev \
          libssl-dev \
          libwrap0-dev \
          microsocks \
          python3-all \
          python3-paho-mqtt \
          python3-psutil \
          uthash-dev \
          xsltproc

    - uses: actions/checkout@v6

    - run: cmake -E make_directory build

    - run: |
        cmake \
          -DCMAKE_BUILD_TYPE=Debug \
          -S . \
          -B build

    - run: cmake --build build --parallel $(nproc)

    - working-directory: build/
      run: ctest --output-on-failure --repeat until-pass:5


================================================
FILE: .github/workflows/mosquitto-make-asan.yml
================================================
name: Mosquitto - Make ASAN

on:
  push:
    branches:
      - master
      - develop
      - fixes
      - release/*
  pull_request:
    branches:
      - master
      - develop
      - fixes
      - release/*

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Install third party dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          clang \
          docbook-xsl \
          lcov \
          libargon2-dev \
          libc-ares-dev \
          libcjson-dev \
          libcjson1 \
          libcunit1-dev \
          libedit-dev \
          libgmock-dev \
          libmicrohttpd-dev \
          libssl-dev \
          libwrap0-dev \
          microsocks \
          python3-all \
          python3-paho-mqtt \
          python3-psutil \
          uthash-dev \
          xsltproc
    -
      uses: actions/checkout@v6
      with:
        submodules: 'true'
    -
      name: make
      run: make WITH_ASAN=yes
    -
      name: make test
      run: |
        make WITH_ASAN=yes ptest


================================================
FILE: .github/workflows/mosquitto-make.yml
================================================
name: Mosquitto - Make

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - fixes
      - develop
      - release/*
    tags:
      - 'v[0-9]+.*'
  pull_request:
    branches:
      - master
      - fixes
      - develop
      - release/*

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Install third party dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          docbook-xsl \
          lcov \
          libargon2-dev \
          libc-ares-dev \
          libcjson-dev \
          libcjson1 \
          libcunit1-dev \
          libedit-dev \
          libgmock-dev \
          libmicrohttpd-dev \
          libssl-dev \
          libwrap0-dev \
          microsocks \
          python3-all \
          python3-paho-mqtt \
          python3-psutil \
          uthash-dev \
          xsltproc
    -
      uses: actions/checkout@v6
      with:
        submodules: 'true'
    -
      name: make
      run: make
    -
      name: make test
      run: |
        make ptest


================================================
FILE: .github/workflows/windows-x86.yml
================================================
name: Windows x86 build

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - fixes
      - develop
      - release/*
    tags:
      - 'v[0-9]+.*'
  pull_request:
    branches:
      - master
      - fixes
      - develop
      - release/*

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  mosquitto:
    runs-on: windows-2022

    steps:
      - uses: actions/checkout@v6


      - name: vcpkg build
        uses: johnwason/vcpkg-action@v7
        id: vcpkg
        with:
          manifest-dir: ${{ github.workspace }}
          triplet: x86-windows
          token: ${{ github.token }}

      - name: Configure CMake
        run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DWITH_WEBSOCKETS=ON -DWITH_TESTS=OFF -DCMAKE_GENERATOR_PLATFORM=WIN32 -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows -DVCPKG_MANIFEST_MODE=ON -DWITH_HTTP_API=ON -DHTTP_API_DIR="C:\\Program Files (x86)\\Mosquitto\\dashboard"
      - name: Build
        run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

      - uses: suisei-cn/actions-download-file@v1.6.1
        id: vcredist
        name: Download VC redistributable
        with:
          url: https://aka.ms/vs/17/release/vc_redist.x86.exe
          target: ${{github.workspace}}/installer/

      - name: Installer
        uses: joncloud/makensis-action@v5.0
        with:
          script-file: ${{github.workspace}}/installer/mosquitto.nsi

      - name: Upload installer to artifacts
        uses: actions/upload-artifact@v6
        with:
          name: installer
          path: ${{ github.workspace }}/installer/mosquitto*.exe


================================================
FILE: .github/workflows/windows.yml
================================================
name: Windows build

on:
  workflow_dispatch:
  push:
    branches:
      - master
      - fixes
      - develop
      - release/*
    tags:
      - 'v[0-9]+.*'
  pull_request:
    branches:
      - master
      - fixes
      - develop
      - release/*

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  mosquitto:
    runs-on: windows-2022

    steps:
      - uses: actions/checkout@v6

      - name: pin cmake to 3.x series
        uses: jwlawson/actions-setup-cmake@09fd9b0fb3b239b4b68d9256cd65adf8d6b91da0
        with:
          cmake-version: '3.31.6'

      - name: vcpkg build
        uses: johnwason/vcpkg-action@v7
        id: vcpkg
        with:
          manifest-dir: ${{ github.workspace }}
          triplet: x64-windows-release
          token: ${{ github.token }}

      - name: Configure CMake
        run: cmake -B ${{github.workspace}}/build64 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DWITH_WEBSOCKETS=ON -DWITH_TESTS=OFF -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-release -DVCPKG_MANIFEST_MODE=ON -DWITH_HTTP_API=ON -DHTTP_API_DIR="C:\\Program Files\\Mosquitto\\dashboard"
      - name: Build
        run: cmake --build ${{github.workspace}}/build64 --config ${{env.BUILD_TYPE}}

      - uses: suisei-cn/actions-download-file@v1.6.1
        id: vcredist
        name: Download VC redistributable
        with:
          url: https://aka.ms/vs/17/release/vc_redist.x64.exe
          target: ${{github.workspace}}/installer/

      - name: Installer
        uses: joncloud/makensis-action@v5.0
        with:
          script-file: ${{github.workspace}}/installer/mosquitto64.nsi

      - name: Upload installer to artifacts
        uses: actions/upload-artifact@v6
        with:
          name: installer
          path: ${{ github.workspace }}/installer/mosquitto*.exe


================================================
FILE: .gitignore
================================================
# .gitignore
*.a
*.db
*.gcda
*.gcno
*.exe
*.o
*.old
*.pyc
*.so
*.vglog
callgrind.out.*
coverage.info
dhat.out.*
massif.out.*
vglog*

c/*.test
cpp/*.test

apps/db_dump/mosquitto_db_dump
apps/db_dump/mosquitto_db_dump.a
apps/mosquitto_ctrl/mosquitto_ctrl
apps/mosquitto_passwd/mosquitto_passwd
apps/mosquitto_passwd/mosquitto_passwd.a
apps/mosquitto_signal/mosquitto_signal

build/
build64/

client/mosquitto_pub
client/mosquitto_pub.a
client/mosquitto_rr
client/mosquitto_rr.a
client/mosquitto_sub
client/mosquitto_sub.a
client/testing
client/testing.c

cov-int/

dist/

docker/local/mosq.tar.gz

examples/mysql_log/mosquitto_mysql_log
examples/temperature_conversion/mqtt_temperature_conversion
examples/publish/basic-1
examples/publish/basic-websockets-1

fuzzing/apps/db_dump/db_dump_fuzz_load
fuzzing/apps/db_dump/db_dump_fuzz_load_client_stats
fuzzing/apps/db_dump/db_dump_fuzz_load_stats
fuzzing/apps/mosquitto_passwd/mosquitto_passwd_fuzz_load
fuzzing/broker/broker_fuzz_acl_file
fuzzing/broker/broker_fuzz_handle_auth
fuzzing/broker/broker_fuzz_handle_connect
fuzzing/broker/broker_fuzz_handle_publish
fuzzing/broker/broker_fuzz_handle_subscribe
fuzzing/broker/broker_fuzz_handle_unsubscribe
fuzzing/broker/broker_fuzz_initial_packet
fuzzing/broker/broker_fuzz_initial_packet_with_init
fuzzing/broker/broker_fuzz_password_file
fuzzing/broker/broker_fuzz_proxy_v1
fuzzing/broker/broker_fuzz_proxy_v2
fuzzing/broker/broker_fuzz_psk_file
fuzzing/broker/broker_fuzz_queue_msg
fuzzing/broker/broker_fuzz_read_handle
fuzzing/broker/broker_fuzz_second_packet
fuzzing/broker/broker_fuzz_second_packet_with_init
fuzzing/broker/broker_fuzz_test_config
fuzzing/corpora/broker/*
fuzzing/corpora/broker_packet_seed_corpus.zip
fuzzing/corpora/client/*
fuzzing/corpora/client_packet_seed_corpus.zip
fuzzing/corpora/db_dump_seed_corpus.zip
fuzzing/lib/lib_fuzz_pub_topic_check2
fuzzing/lib/lib_fuzz_sub_topic_check2
fuzzing/lib/lib_fuzz_utf8
fuzzing/libcommon/libcommon_fuzz_property
fuzzing/libcommon/libcommon_fuzz_property.pb.cc
fuzzing/libcommon/libcommon_fuzz_property.pb.h
fuzzing/libcommon/libcommon_fuzz_pub_topic_check2
fuzzing/libcommon/libcommon_fuzz_sub_topic_check2
fuzzing/libcommon/libcommon_fuzz_topic_matching
fuzzing/libcommon/libcommon_fuzz_topic_matching.pb.cc
fuzzing/libcommon/libcommon_fuzz_topic_matching.pb.h
fuzzing/libcommon/libcommon_fuzz_topic_tokenise
fuzzing/libcommon/libcommon_fuzz_utf8
fuzzing/plugins/dynamic-security/dynsec_fuzz_load

lib/cpp/libmosquittopp.so*
lib/cpp/libmosquittopp.a
lib/libmosquitto.so*
lib/libmosquitto.a

man/libmosquitto.3
man/mosquitto-tls.7
man/mosquitto.7
man/mosquitto.8
man/mosquitto.conf.5
man/mosquitto_ctrl.1
man/mosquitto_ctrl_dynsec.1
man/mosquitto_ctrl_shell.1
man/mosquitto_passwd.1
man/mosquitto_pub.1
man/mosquitto_rr.1
man/mosquitto_signal.1
man/mosquitto_sub.1
man/mqtt.7

out/

src/mosquitto
src/mosquitto_broker.a

test/apps/ctrl/ctrl_shell_broker_test
test/apps/ctrl/ctrl_shell_completion_test
test/apps/ctrl/ctrl_shell_dynsec_test
test/apps/ctrl/ctrl_shell_help_test
test/apps/ctrl/ctrl_shell_options_test
test/apps/ctrl/ctrl_shell_pre_connect_test
test/apps/ctrl/ctrl_shell_test
test/broker/broker.pid
test/test_client
test/fake_user
test/msgsps_pub
test/msgsps_sub
test/msgsps_pub.dat
test/msgsps_sub.dat
test/broker/c/auth_plugin.so
test/broker/c/*.test

test/ssl/*.csr
test/ssl/rootCA/
test/ssl/signingCA/

test/lib/c/*.test
test/lib/cpp/*.test

test/unit/broker/bridge_topic_test
test/unit/broker/keepalive_test
test/unit/broker/persist_read_test
test/unit/broker/persist_write_test
test/unit/broker/subs_test
test/unit/coverage.info
test/unit/lib/lib_test
test/unit/libcommon/libcommon_test
test/unit/tls_test

www/cache/
__pycache__
*.sync-conflict-*
# Debian generated files
debian/.debhelper/
debian/debhelper-build-stamp
debian/files
debian/*.log
debian/*.substvars
debian/*mosquitto*/
debian/*.debhelper
debian/tmp/
obj-*/

# Emacs generated files
*~

# clangd
.cache/

# VSCode generated files
.vscode/

# Others
tmp/
failed-tests.json


================================================
FILE: .uncrustify.cfg
================================================
# Uncrustify_d-0.80.1-109-229eb1c05

#
# General options
#

set FOR HASH_ITER
set FOR DL_FOREACH
set FOR DL_FOREACH_SAFE
set FOR DL_FOREACH_SAFE2
set FOR LL_FOREACH
set FOR LL_FOREACH_SAFE
set FOR cJSON_ArrayForEach

# The type of line endings.
#
# Default: auto
newlines                        = auto     # lf/crlf/cr/auto

# The original size of tabs in the input.
#
# Default: 8
input_tab_size                  = 4        # unsigned number

# The size of tabs in the output (only used if align_with_tabs=true).
#
# Default: 8
output_tab_size                 = 4        # unsigned number

# The ASCII value of the string escape char, usually 92 (\) or (Pawn) 94 (^).
#
# Default: 92
string_escape_char              = 92       # unsigned number

# Alternate string escape char (usually only used for Pawn).
# Only works right before the quote char.
string_escape_char2             = 0        # unsigned number

# Replace tab characters found in string literals with the escape sequence \t
# instead.
string_replace_tab_chars        = false    # true/false

# Allow interpreting '>=' and '>>=' as part of a template in code like
# 'void f(list<list<B>>=val);'. If true, 'assert(x<0 && y>=3)' will be broken.
# Improvements to template detection may make this option obsolete.
tok_split_gte                   = false    # true/false

# Disable formatting of NL_CONT ('\\n') ended lines (e.g. multi-line macros).
disable_processing_nl_cont      = false    # true/false

# Specify the marker used in comments to disable processing of part of the
# file.
#
# Default:  *INDENT-OFF*
disable_processing_cmt          = " *INDENT-OFF*"      # string

# Specify the marker used in comments to (re)enable processing in a file.
#
# Default:  *INDENT-ON*
enable_processing_cmt           = " *INDENT-ON*"     # string

# Enable parsing of digraphs.
enable_digraphs                 = false    # true/false

# Option to allow both disable_processing_cmt and enable_processing_cmt
# strings, if specified, to be interpreted as ECMAScript regular expressions.
# If true, a regex search will be performed within comments according to the
# specified patterns in order to disable/enable processing.
processing_cmt_as_regex         = false    # true/false

# Add or remove the UTF-8 BOM (recommend 'remove').
utf8_bom                        = remove   # ignore/add/remove/force

# If the file contains bytes with values between 128 and 255, but is not
# UTF-8, then output as UTF-8.
utf8_byte                       = false    # true/false

# Force the output encoding to UTF-8.
utf8_force                      = true    # true/false

#
# Spacing options
#

# Add or remove space around non-assignment symbolic operators ('+', '/', '%',
# '<<', and so forth).
sp_arith                        = ignore   # ignore/add/remove/force

# Add or remove space around arithmetic operators '+' and '-'.
#
# Overrides sp_arith.
sp_arith_additive               = ignore   # ignore/add/remove/force

# Add or remove space around assignment operator '=', '+=', etc.
sp_assign                       = ignore   # ignore/add/remove/force

# Add or remove space around '=' in C++11 lambda capture specifications.
#
# Overrides sp_assign.
sp_cpp_lambda_assign            = ignore   # ignore/add/remove/force

# Add or remove space after the capture specification of a C++11 lambda when
# an argument list is present, as in '[] <here> (int x){ ... }'.
sp_cpp_lambda_square_paren      = ignore   # ignore/add/remove/force

# Add or remove space after the capture specification of a C++11 lambda with
# no argument list is present, as in '[] <here> { ... }'.
sp_cpp_lambda_square_brace      = ignore   # ignore/add/remove/force

# Add or remove space after the opening parenthesis and before the closing
# parenthesis of a argument list of a C++11 lambda, as in
# '[]( <here> ){ ... }'
# with an empty list.
sp_cpp_lambda_argument_list_empty = ignore   # ignore/add/remove/force

# Add or remove space after the opening parenthesis and before the closing
# parenthesis of a argument list of a C++11 lambda, as in
# '[]( <here> int x <here> ){ ... }'.
sp_cpp_lambda_argument_list     = ignore   # ignore/add/remove/force

# Add or remove space after the argument list of a C++11 lambda, as in
# '[](int x) <here> { ... }'.
sp_cpp_lambda_paren_brace       = ignore   # ignore/add/remove/force

# Add or remove space between a lambda body and its call operator of an
# immediately invoked lambda, as in '[]( ... ){ ... } <here> ( ... )'.
sp_cpp_lambda_fparen            = ignore   # ignore/add/remove/force

# Add or remove space around assignment operator '=' in a prototype.
#
# If set to ignore, use sp_assign.
sp_assign_default               = ignore   # ignore/add/remove/force

# Add or remove space before assignment operator '=', '+=', etc.
#
# Overrides sp_assign.
sp_before_assign                = ignore   # ignore/add/remove/force

# Add or remove space after assignment operator '=', '+=', etc.
#
# Overrides sp_assign.
sp_after_assign                 = ignore   # ignore/add/remove/force

# Add or remove space in 'enum {'.
#
# Default: add
sp_enum_brace                   = remove      # ignore/add/remove/force

# Add or remove space in 'NS_ENUM ('.
sp_enum_paren                   = ignore   # ignore/add/remove/force

# Add or remove space around assignment '=' in enum.
sp_enum_assign                  = ignore   # ignore/add/remove/force

# Add or remove space before assignment '=' in enum.
#
# Overrides sp_enum_assign.
sp_enum_before_assign           = ignore   # ignore/add/remove/force

# Add or remove space after assignment '=' in enum.
#
# Overrides sp_enum_assign.
sp_enum_after_assign            = ignore   # ignore/add/remove/force

# Add or remove space around assignment ':' in enum.
sp_enum_colon                   = ignore   # ignore/add/remove/force

# Add or remove space around preprocessor '##' concatenation operator.
#
# Default: add
sp_pp_concat                    = add      # ignore/add/remove/force

# Add or remove space after preprocessor '#' stringify operator.
# Also affects the '#@' charizing operator.
sp_pp_stringify                 = ignore   # ignore/add/remove/force

# Add or remove space before preprocessor '#' stringify operator
# as in '#define x(y) L#y'.
sp_before_pp_stringify          = ignore   # ignore/add/remove/force

# Add or remove space around boolean operators '&&' and '||'.
sp_bool                         = ignore   # ignore/add/remove/force

# Add or remove space around compare operator '<', '>', '==', etc.
sp_compare                      = ignore   # ignore/add/remove/force

# Add or remove space inside '(' and ')'.
sp_inside_paren                 = remove   # ignore/add/remove/force

# Add or remove space between nested parentheses, i.e. '((' vs. ') )'.
sp_paren_paren                  = remove   # ignore/add/remove/force

# Add or remove space between back-to-back parentheses, i.e. ')(' vs. ') ('.
sp_cparen_oparen                = ignore   # ignore/add/remove/force

# Add or remove space between ')' and '{'.
sp_paren_brace                  = remove   # ignore/add/remove/force

# Add or remove space between nested braces, i.e. '{{' vs. '{ {'.
sp_brace_brace                  = remove   # ignore/add/remove/force

# Add or remove space before pointer star '*'.
sp_before_ptr_star              = add   # ignore/add/remove/force

# Add or remove space before pointer star '*' that isn't followed by a
# variable name. If set to ignore, sp_before_ptr_star is used instead.
sp_before_unnamed_ptr_star      = add   # ignore/add/remove/force

# Add or remove space before pointer star '*' that is followed by a qualifier.
# If set to ignore, sp_before_unnamed_ptr_star is used instead.
sp_before_qualifier_ptr_star    = add   # ignore/add/remove/force

# Add or remove space before pointer star '*' that is followed by 'operator' keyword.
# If set to ignore, sp_before_unnamed_ptr_star is used instead.
sp_before_operator_ptr_star     = ignore   # ignore/add/remove/force

# Add or remove space before pointer star '*' that is followed by
# a class scope (as in 'int *MyClass::method()') or namespace scope
# (as in 'int *my_ns::func()').
# If set to ignore, sp_before_unnamed_ptr_star is used instead.
sp_before_scope_ptr_star        = ignore   # ignore/add/remove/force

# Add or remove space before pointer star '*' that is followed by '::',
# as in 'int *::func()'.
# If set to ignore, sp_before_unnamed_ptr_star is used instead.
sp_before_global_scope_ptr_star = ignore   # ignore/add/remove/force

# Add or remove space between a qualifier and a pointer star '*' that isn't
# followed by a variable name, as in '(char const *)'. If set to ignore,
# sp_before_ptr_star is used instead.
sp_qualifier_unnamed_ptr_star   = ignore   # ignore/add/remove/force

# Add or remove space between pointer stars '*', as in 'int ***a;'.
sp_between_ptr_star             = remove   # ignore/add/remove/force

# Add or remove space between pointer star '*' and reference '&', as in 'int *& a;'.
sp_between_ptr_ref              = ignore   # ignore/add/remove/force

# Add or remove space after pointer star '*', if followed by a word.
#
# Overrides sp_type_func.
sp_after_ptr_star               = remove   # ignore/add/remove/force

# Add or remove space after pointer caret '^', if followed by a word.
sp_after_ptr_block_caret        = ignore   # ignore/add/remove/force

# Add or remove space after pointer star '*', if followed by a qualifier.
sp_after_ptr_star_qualifier     = ignore   # ignore/add/remove/force

# Add or remove space after a pointer star '*', if followed by a function
# prototype or function definition.
#
# Overrides sp_after_ptr_star and sp_type_func.
sp_after_ptr_star_func          = remove   # ignore/add/remove/force

# Add or remove space after a pointer star '*' in the trailing return of a
# function prototype or function definition.
sp_after_ptr_star_trailing      = ignore   # ignore/add/remove/force

# Add or remove space between the pointer star '*' and the name of the variable
# in a function pointer definition.
sp_ptr_star_func_var            = remove   # ignore/add/remove/force

# Add or remove space between the pointer star '*' and the name of the type
# in a function pointer type definition.
sp_ptr_star_func_type           = ignore   # ignore/add/remove/force

# Add or remove space after a pointer star '*', if followed by an open
# parenthesis, as in 'void* (*)()'.
sp_ptr_star_paren               = ignore   # ignore/add/remove/force

# Add or remove space before a pointer star '*', if followed by a function
# prototype or function definition. If set to ignore, sp_before_ptr_star is
# used instead.
sp_before_ptr_star_func         = ignore   # ignore/add/remove/force

# Add or remove space between a qualifier and a pointer star '*' followed by
# the name of the function in a function prototype or definition, as in
# 'char const *foo()`. If set to ignore, sp_before_ptr_star is used instead.
sp_qualifier_ptr_star_func      = ignore   # ignore/add/remove/force

# Add or remove space before a pointer star '*' in the trailing return of a
# function prototype or function definition.
sp_before_ptr_star_trailing     = ignore   # ignore/add/remove/force

# Add or remove space between a qualifier and a pointer star '*' in the
# trailing return of a function prototype or function definition, as in
# 'auto foo() -> char const *'.
sp_qualifier_ptr_star_trailing  = ignore   # ignore/add/remove/force

# Add or remove space before a reference sign '&'.
sp_before_byref                 = ignore   # ignore/add/remove/force

# Add or remove space before a reference sign '&' that isn't followed by a
# variable name. If set to ignore, sp_before_byref is used instead.
sp_before_unnamed_byref         = ignore   # ignore/add/remove/force

# Add or remove space after reference sign '&', if followed by a word.
#
# Overrides sp_type_func.
sp_after_byref                  = ignore   # ignore/add/remove/force

# Add or remove space after a reference sign '&', if followed by a function
# prototype or function definition.
#
# Overrides sp_after_byref and sp_type_func.
sp_after_byref_func             = ignore   # ignore/add/remove/force

# Add or remove space before a reference sign '&', if followed by a function
# prototype or function definition.
sp_before_byref_func            = ignore   # ignore/add/remove/force

# Add or remove space after a reference sign '&', if followed by an open
# parenthesis, as in 'char& (*)()'.
sp_byref_paren                  = ignore   # ignore/add/remove/force

# Add or remove space between type and word. In cases where total removal of
# whitespace would be a syntax error, a value of 'remove' is treated the same
# as 'force'.
#
# This also affects some other instances of space following a type that are
# not covered by other options; for example, between the return type and
# parenthesis of a function type template argument, between the type and
# parenthesis of an array parameter, or between 'decltype(...)' and the
# following word.
#
# Default: force
sp_after_type                   = force    # ignore/add/remove/force

# Add or remove space between 'decltype(...)' and word,
# brace or function call.
sp_after_decltype               = ignore   # ignore/add/remove/force

# (D) Add or remove space before the parenthesis in the D constructs
# 'template Foo(' and 'class Foo('.
sp_before_template_paren        = ignore   # ignore/add/remove/force

# Add or remove space between 'template' and '<'.
# If set to ignore, sp_before_angle is used.
sp_template_angle               = ignore   # ignore/add/remove/force

# Add or remove space before '<'.
sp_before_angle                 = ignore   # ignore/add/remove/force

# Add or remove space inside '<' and '>'.
sp_inside_angle                 = ignore   # ignore/add/remove/force

# Add or remove space inside '<>'.
# if empty.
sp_inside_angle_empty           = ignore   # ignore/add/remove/force

# Add or remove space between '>' and ':'.
sp_angle_colon                  = ignore   # ignore/add/remove/force

# Add or remove space after '>'.
sp_after_angle                  = ignore   # ignore/add/remove/force

# Add or remove space between '>' and '(' as found in 'new List<byte>(foo);'.
sp_angle_paren                  = ignore   # ignore/add/remove/force

# Add or remove space between '>' and '()' as found in 'new List<byte>();'.
sp_angle_paren_empty            = ignore   # ignore/add/remove/force

# Add or remove space between '>' and a word as in 'List<byte> m;' or
# 'template <typename T> static ...'.
sp_angle_word                   = ignore   # ignore/add/remove/force

# Add or remove space between '>' and '>' in '>>' (template stuff).
#
# Default: add
sp_angle_shift                  = add      # ignore/add/remove/force

# (C++11) Permit removal of the space between '>>' in 'foo<bar<int> >'. Note
# that sp_angle_shift cannot remove the space without this option.
sp_permit_cpp11_shift           = false    # true/false

# Add or remove space before '(' of control statements ('if', 'for', 'switch',
# 'while', etc.).
sp_before_sparen                = remove   # ignore/add/remove/force

# Add or remove space inside '(' and ')' of control statements other than
# 'for'.
sp_inside_sparen                = remove   # ignore/add/remove/force

# Add or remove space after '(' of control statements other than 'for'.
#
# Overrides sp_inside_sparen.
sp_inside_sparen_open           = ignore   # ignore/add/remove/force

# Add or remove space before ')' of control statements other than 'for'.
#
# Overrides sp_inside_sparen.
sp_inside_sparen_close          = ignore   # ignore/add/remove/force

# Add or remove space inside '(' and ')' of 'for' statements.
sp_inside_for                   = ignore   # ignore/add/remove/force

# Add or remove space after '(' of 'for' statements.
#
# Overrides sp_inside_for.
sp_inside_for_open              = ignore   # ignore/add/remove/force

# Add or remove space before ')' of 'for' statements.
#
# Overrides sp_inside_for.
sp_inside_for_close             = ignore   # ignore/add/remove/force

# Add or remove space between '((' or '))' of control statements.
sp_sparen_paren                 = remove   # ignore/add/remove/force

# Add or remove space after ')' of control statements.
sp_after_sparen                 = ignore   # ignore/add/remove/force

# Add or remove space between ')' and '{' of control statements.
sp_sparen_brace                 = remove   # ignore/add/remove/force

# Add or remove space between 'do' and '{'.
sp_do_brace_open                = remove   # ignore/add/remove/force

# Add or remove space between '}' and 'while'.
sp_brace_close_while            = remove   # ignore/add/remove/force

# Add or remove space between 'while' and '('. Overrides sp_before_sparen.
sp_while_paren_open             = remove   # ignore/add/remove/force

# (D) Add or remove space between 'invariant' and '('.
sp_invariant_paren              = ignore   # ignore/add/remove/force

# (D) Add or remove space after the ')' in 'invariant (C) c'.
sp_after_invariant_paren        = ignore   # ignore/add/remove/force

# Add or remove space before empty statement ';' on 'if', 'for' and 'while'.
# examples:
#   if (b) <here> ;
#   for (a=1; a<10; a++) <here> ;
#   while (*p++ = ' ') <here> ;
sp_special_semi                 = ignore   # ignore/add/remove/force

# Add or remove space before ';'.
#
# Default: remove
sp_before_semi                  = remove   # ignore/add/remove/force

# Add or remove space before ';' in non-empty 'for' statements.
sp_before_semi_for              = ignore   # ignore/add/remove/force

# Add or remove space before a semicolon of an empty left part of a for
# statement, as in 'for ( <here> ; ; )'.
sp_before_semi_for_empty        = ignore   # ignore/add/remove/force

# Add or remove space between the semicolons of an empty middle part of a for
# statement, as in 'for ( ; <here> ; )'.
sp_between_semi_for_empty       = ignore   # ignore/add/remove/force

# Add or remove space after ';', except when followed by a comment.
#
# Default: add
sp_after_semi                   = add      # ignore/add/remove/force

# Add or remove space after ';' in non-empty 'for' statements.
#
# Default: force
sp_after_semi_for               = force    # ignore/add/remove/force

# Add or remove space after the final semicolon of an empty part of a for
# statement, as in 'for ( ; ; <here> )'.
sp_after_semi_for_empty         = ignore   # ignore/add/remove/force

# Add or remove space before '[' (except '[]').
sp_before_square                = ignore   # ignore/add/remove/force

# Add or remove space before '[' for a variable definition.
#
# Default: remove
sp_before_vardef_square         = remove   # ignore/add/remove/force

# Add or remove space before '[' for asm block.
sp_before_square_asm_block      = ignore   # ignore/add/remove/force

# Add or remove space before '[]'.
sp_before_squares               = ignore   # ignore/add/remove/force

# Add or remove space before C++17 structured bindings
# after byref.
sp_cpp_before_struct_binding_after_byref = ignore   # ignore/add/remove/force

# Add or remove space before C++17 structured bindings.
sp_cpp_before_struct_binding    = ignore   # ignore/add/remove/force

# Add or remove space inside a non-empty '[' and ']'.
sp_inside_square                = ignore   # ignore/add/remove/force

# Add or remove space inside '[]'.
# if empty.
sp_inside_square_empty          = ignore   # ignore/add/remove/force

# (OC) Add or remove space inside a non-empty Objective-C boxed array '@[' and
# ']'. If set to ignore, sp_inside_square is used.
sp_inside_square_oc_array       = ignore   # ignore/add/remove/force

# Add or remove space after ',', i.e. 'a,b' vs. 'a, b'.
sp_after_comma                  = add   # ignore/add/remove/force

# Add or remove space before ',', i.e. 'a,b' vs. 'a ,b'.
#
# Default: remove
sp_before_comma                 = remove   # ignore/add/remove/force

# (C#, Vala) Add or remove space between ',' and ']' in multidimensional array type
# like 'int[,,]'.
sp_after_mdatype_commas         = ignore   # ignore/add/remove/force

# (C#, Vala) Add or remove space between '[' and ',' in multidimensional array type
# like 'int[,,]'.
sp_before_mdatype_commas        = ignore   # ignore/add/remove/force

# (C#, Vala) Add or remove space between ',' in multidimensional array type
# like 'int[,,]'.
sp_between_mdatype_commas       = ignore   # ignore/add/remove/force

# Add or remove space between an open parenthesis and comma,
# i.e. '(,' vs. '( ,'.
#
# Default: force
sp_paren_comma                  = force    # ignore/add/remove/force

# Add or remove space between a type and ':'.
sp_type_colon                   = ignore   # ignore/add/remove/force

# Add or remove space after the variadic '...' when preceded by a
# non-punctuator.
# The value REMOVE will be overridden with FORCE
sp_after_ellipsis               = ignore   # ignore/add/remove/force

# Add or remove space before the variadic '...' when preceded by a
# non-punctuator.
# The value REMOVE will be overridden with FORCE
sp_before_ellipsis              = ignore   # ignore/add/remove/force

# Add or remove space between a type and '...'.
sp_type_ellipsis                = ignore   # ignore/add/remove/force

# Add or remove space between a '*' and '...'.
sp_ptr_type_ellipsis            = ignore   # ignore/add/remove/force

# Add or remove space between ')' and '...'.
sp_paren_ellipsis               = ignore   # ignore/add/remove/force

# Add or remove space between '&&' and '...'.
sp_byref_ellipsis               = ignore   # ignore/add/remove/force

# Add or remove space between ')' and a qualifier such as 'const'.
sp_paren_qualifier              = ignore   # ignore/add/remove/force

# Add or remove space between ')' and 'noexcept'.
sp_paren_noexcept               = ignore   # ignore/add/remove/force

# Add or remove space after class ':'.
sp_after_class_colon            = ignore   # ignore/add/remove/force

# Add or remove space before class ':'.
sp_before_class_colon           = ignore   # ignore/add/remove/force

# Add or remove space after class constructor ':'.
#
# Default: add
sp_after_constr_colon           = add      # ignore/add/remove/force

# Add or remove space before class constructor ':'.
#
# Default: add
sp_before_constr_colon          = add      # ignore/add/remove/force

# Add or remove space before case ':'.
#
# Default: remove
sp_before_case_colon            = remove   # ignore/add/remove/force

# Add or remove space between 'operator' and operator sign.
sp_after_operator               = ignore   # ignore/add/remove/force

# Add or remove space between the operator symbol and the open parenthesis, as
# in 'operator ++('.
sp_after_operator_sym           = ignore   # ignore/add/remove/force

# Overrides sp_after_operator_sym when the operator has no arguments, as in
# 'operator *()'.
sp_after_operator_sym_empty     = ignore   # ignore/add/remove/force

# Add or remove space after C/D cast, i.e. 'cast(int)a' vs. 'cast(int) a' or
# '(int)a' vs. '(int) a'.
sp_after_cast                   = remove   # ignore/add/remove/force

# Add or remove spaces inside cast parentheses.
sp_inside_paren_cast            = ignore   # ignore/add/remove/force

# Add or remove space between the type and open parenthesis in a C++ cast,
# i.e. 'int(exp)' vs. 'int (exp)'.
sp_cpp_cast_paren               = ignore   # ignore/add/remove/force

# Add or remove space between 'sizeof' and '('.
sp_sizeof_paren                 = ignore   # ignore/add/remove/force

# Add or remove space between 'sizeof' and '...'.
sp_sizeof_ellipsis              = ignore   # ignore/add/remove/force

# Add or remove space between 'sizeof...' and '('.
sp_sizeof_ellipsis_paren        = ignore   # ignore/add/remove/force

# Add or remove space between '...' and a parameter pack.
sp_ellipsis_parameter_pack      = ignore   # ignore/add/remove/force

# Add or remove space between a parameter pack and '...'.
sp_parameter_pack_ellipsis      = ignore   # ignore/add/remove/force

# Add or remove space between 'decltype' and '('.
sp_decltype_paren               = ignore   # ignore/add/remove/force

# (Pawn) Add or remove space after the tag keyword.
sp_after_tag                    = ignore   # ignore/add/remove/force

# Add or remove space inside enum '{' and '}'.
sp_inside_braces_enum           = ignore   # ignore/add/remove/force

# Add or remove space inside struct/union '{' and '}'.
sp_inside_braces_struct         = ignore   # ignore/add/remove/force

# (OC) Add or remove space inside Objective-C boxed dictionary '{' and '}'
sp_inside_braces_oc_dict        = ignore   # ignore/add/remove/force

# Add or remove space after open brace in an unnamed temporary
# direct-list-initialization
# if statement is a brace_init_lst
# works only if sp_brace_brace is set to ignore.
sp_after_type_brace_init_lst_open = ignore   # ignore/add/remove/force

# Add or remove space before close brace in an unnamed temporary
# direct-list-initialization
# if statement is a brace_init_lst
# works only if sp_brace_brace is set to ignore.
sp_before_type_brace_init_lst_close = ignore   # ignore/add/remove/force

# Add or remove space inside an unnamed temporary direct-list-initialization
# if statement is a brace_init_lst
# works only if sp_brace_brace is set to ignore
# works only if sp_before_type_brace_init_lst_close is set to ignore.
sp_inside_type_brace_init_lst   = ignore   # ignore/add/remove/force

# Add or remove space inside '{' and '}'.
sp_inside_braces                = ignore   # ignore/add/remove/force

# Add or remove space inside '{}'.
# if empty.
sp_inside_braces_empty          = remove   # ignore/add/remove/force

# Add or remove space around trailing return operator '->'.
sp_trailing_return              = ignore   # ignore/add/remove/force

# Add or remove space between return type and function name. A minimum of 1
# is forced except for pointer return types.
sp_type_func                    = ignore   # ignore/add/remove/force

# Add or remove space between type and open brace of an unnamed temporary
# direct-list-initialization.
sp_type_brace_init_lst          = ignore   # ignore/add/remove/force

# Add or remove space between function name and '(' on function declaration.
sp_func_proto_paren             = remove   # ignore/add/remove/force

# Add or remove space between function name and '()' on function declaration
# if empty.
sp_func_proto_paren_empty       = remove   # ignore/add/remove/force

# Add or remove space between function name and '(' with a typedef specifier.
sp_func_type_paren              = ignore   # ignore/add/remove/force

# Add or remove space between alias name and '(' of a non-pointer function type typedef.
sp_func_def_paren               = ignore   # ignore/add/remove/force

# Add or remove space between function name and '()' on function definition
# if empty.
sp_func_def_paren_empty         = ignore   # ignore/add/remove/force

# Add or remove space inside empty function '()'.
# Overrides sp_after_angle unless use_sp_after_angle_always is set to true.
sp_inside_fparens               = remove   # ignore/add/remove/force

# Add or remove space inside function '(' and ')'.
sp_inside_fparen                = remove   # ignore/add/remove/force

# Add or remove space inside user functor '(' and ')'.
sp_func_call_user_inside_rparen = ignore   # ignore/add/remove/force

# Add or remove space inside empty functor '()'.
# Overrides sp_after_angle unless use_sp_after_angle_always is set to true.
sp_inside_rparens               = ignore   # ignore/add/remove/force

# Add or remove space inside functor '(' and ')'.
sp_inside_rparen                = ignore   # ignore/add/remove/force

# Add or remove space inside the first parentheses in a function type, as in
# 'void (*x)(...)'.
sp_inside_tparen                = ignore   # ignore/add/remove/force

# Add or remove space between the ')' and '(' in a function type, as in
# 'void (*x)(...)'.
sp_after_tparen_close           = ignore   # ignore/add/remove/force

# Add or remove space between ']' and '(' when part of a function call.
sp_square_fparen                = ignore   # ignore/add/remove/force

# Add or remove space between ')' and '{' of function.
sp_fparen_brace                 = remove   # ignore/add/remove/force

# Add or remove space between ')' and '{' of a function call in object
# initialization.
#
# Overrides sp_fparen_brace.
sp_fparen_brace_initializer     = remove   # ignore/add/remove/force

# (Java) Add or remove space between ')' and '{{' of double brace initializer.
sp_fparen_dbrace                = ignore   # ignore/add/remove/force

# Add or remove space between function name and '(' on function calls.
sp_func_call_paren              = remove   # ignore/add/remove/force

# Add or remove space between function name and '()' on function calls without
# parameters. If set to ignore (the default), sp_func_call_paren is used.
sp_func_call_paren_empty        = ignore   # ignore/add/remove/force

# Add or remove space between the user function name and '(' on function
# calls. You need to set a keyword to be a user function in the config file,
# like:
#   set func_call_user tr _ i18n
sp_func_call_user_paren         = ignore   # ignore/add/remove/force

# Add or remove space inside user function '(' and ')'.
sp_func_call_user_inside_fparen = ignore   # ignore/add/remove/force

# Add or remove space between nested parentheses with user functions,
# i.e. '((' vs. '( ('.
sp_func_call_user_paren_paren   = ignore   # ignore/add/remove/force

# Add or remove space between a constructor/destructor and the open
# parenthesis.
sp_func_class_paren             = ignore   # ignore/add/remove/force

# Add or remove space between a constructor without parameters or destructor
# and '()'.
sp_func_class_paren_empty       = ignore   # ignore/add/remove/force

# Add or remove space after 'return'.
#
# Default: force
sp_return                       = force    # ignore/add/remove/force

# Add or remove space between 'return' and '('.
sp_return_paren                 = ignore   # ignore/add/remove/force

# Add or remove space between 'return' and '{'.
sp_return_brace                 = ignore   # ignore/add/remove/force

# Add or remove space between '__attribute__' and '('.
sp_attribute_paren              = ignore   # ignore/add/remove/force

# Add or remove space between 'defined' and '(' in '#if defined (FOO)'.
sp_defined_paren                = ignore   # ignore/add/remove/force

# Add or remove space between 'throw' and '(' in 'throw (something)'.
sp_throw_paren                  = ignore   # ignore/add/remove/force

# Add or remove space between 'throw' and anything other than '(' as in
# '@throw [...];'.
sp_after_throw                  = ignore   # ignore/add/remove/force

# Add or remove space between 'catch' and '(' in 'catch (something) { }'.
# If set to ignore, sp_before_sparen is used.
sp_catch_paren                  = ignore   # ignore/add/remove/force

# (OC) Add or remove space between '@catch' and '('
# in '@catch (something) { }'. If set to ignore, sp_catch_paren is used.
sp_oc_catch_paren               = ignore   # ignore/add/remove/force

# (OC) Add or remove space before Objective-C protocol list
# as in '@protocol Protocol<here><Protocol_A>' or '@interface MyClass : NSObject<here><MyProtocol>'.
sp_before_oc_proto_list         = ignore   # ignore/add/remove/force

# (OC) Add or remove space between class name and '('
# in '@interface className(categoryName)<ProtocolName>:BaseClass'
sp_oc_classname_paren           = ignore   # ignore/add/remove/force

# (D) Add or remove space between 'version' and '('
# in 'version (something) { }'. If set to ignore, sp_before_sparen is used.
sp_version_paren                = ignore   # ignore/add/remove/force

# (D) Add or remove space between 'scope' and '('
# in 'scope (something) { }'. If set to ignore, sp_before_sparen is used.
sp_scope_paren                  = ignore   # ignore/add/remove/force

# Add or remove space between 'super' and '(' in 'super (something)'.
#
# Default: remove
sp_super_paren                  = remove   # ignore/add/remove/force

# Add or remove space between 'this' and '(' in 'this (something)'.
#
# Default: remove
sp_this_paren                   = remove   # ignore/add/remove/force

# Add or remove space between a macro name and its definition.
sp_macro                        = ignore   # ignore/add/remove/force

# Add or remove space between a macro function ')' and its definition.
sp_macro_func                   = ignore   # ignore/add/remove/force

# Add or remove space between 'else' and '{' if on the same line.
sp_else_brace                   = remove   # ignore/add/remove/force

# Add or remove space between '}' and 'else' if on the same line.
sp_brace_else                   = remove   # ignore/add/remove/force

# Add or remove space between '}' and the name of a typedef on the same line.
sp_brace_typedef                = ignore   # ignore/add/remove/force

# Add or remove space before the '{' of a 'catch' statement, if the '{' and
# 'catch' are on the same line, as in 'catch (decl) <here> {'.
sp_catch_brace                  = ignore   # ignore/add/remove/force

# (OC) Add or remove space before the '{' of a '@catch' statement, if the '{'
# and '@catch' are on the same line, as in '@catch (decl) <here> {'.
# If set to ignore, sp_catch_brace is used.
sp_oc_catch_brace               = ignore   # ignore/add/remove/force

# Add or remove space between '}' and 'catch' if on the same line.
sp_brace_catch                  = ignore   # ignore/add/remove/force

# (OC) Add or remove space between '}' and '@catch' if on the same line.
# If set to ignore, sp_brace_catch is used.
sp_oc_brace_catch               = ignore   # ignore/add/remove/force

# Add or remove space between 'finally' and '{' if on the same line.
sp_finally_brace                = ignore   # ignore/add/remove/force

# Add or remove space between '}' and 'finally' if on the same line.
sp_brace_finally                = ignore   # ignore/add/remove/force

# Add or remove space between 'try' and '{' if on the same line.
sp_try_brace                    = ignore   # ignore/add/remove/force

# Add or remove space between get/set and '{' if on the same line.
sp_getset_brace                 = ignore   # ignore/add/remove/force

# Add or remove space between a variable and '{' for C++ uniform
# initialization.
sp_word_brace_init_lst          = ignore   # ignore/add/remove/force

# Add or remove space between a variable and '{' for a namespace.
#
# Default: add
sp_word_brace_ns                = remove      # ignore/add/remove/force

# Add or remove space before the '::' operator.
sp_before_dc                    = ignore   # ignore/add/remove/force

# Add or remove space after the '::' operator.
sp_after_dc                     = ignore   # ignore/add/remove/force

# (D) Add or remove around the D named array initializer ':' operator.
sp_d_array_colon                = ignore   # ignore/add/remove/force

# Add or remove space after the '!' (not) unary operator.
#
# Default: remove
sp_not                          = remove   # ignore/add/remove/force

# Add or remove space between two '!' (not) unary operators.
# If set to ignore, sp_not will be used.
sp_not_not                      = ignore   # ignore/add/remove/force

# Add or remove space after the '~' (invert) unary operator.
#
# Default: remove
sp_inv                          = remove   # ignore/add/remove/force

# Add or remove space after the '&' (address-of) unary operator. This does not
# affect the spacing after a '&' that is part of a type.
#
# Default: remove
sp_addr                         = remove   # ignore/add/remove/force

# Add or remove space around the '.' or '->' operators.
# also the c-sharp null-conditional operator '?.'
#
# Default: remove
sp_member                       = remove   # ignore/add/remove/force

# Add or remove space after the '*' (dereference) unary operator. This does
# not affect the spacing after a '*' that is part of a type.
#
# Default: remove
sp_deref                        = remove   # ignore/add/remove/force

# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'.
#
# Default: remove
sp_sign                         = remove   # ignore/add/remove/force

# Add or remove space between '++' and '--' the word to which it is being
# applied, as in '(--x)' or 'y++;'.
#
# Default: remove
sp_incdec                       = remove   # ignore/add/remove/force

# Add or remove space before a backslash-newline at the end of a line.
#
# Default: add
sp_before_nl_cont               = add      # ignore/add/remove/force

# (OC) Add or remove space after the scope '+' or '-', as in '-(void) foo;'
# or '+(int) bar;'.
sp_after_oc_scope               = ignore   # ignore/add/remove/force

# (OC) Add or remove space after the colon in message specs,
# i.e. '-(int) f:(int) x;' vs. '-(int) f: (int) x;'.
sp_after_oc_colon               = ignore   # ignore/add/remove/force

# (OC) Add or remove space before the colon in message specs,
# i.e. '-(int) f: (int) x;' vs. '-(int) f : (int) x;'.
sp_before_oc_colon              = ignore   # ignore/add/remove/force

# (OC) Add or remove space after the colon in immutable dictionary expression
# 'NSDictionary *test = @{@"foo" :@"bar"};'.
sp_after_oc_dict_colon          = ignore   # ignore/add/remove/force

# (OC) Add or remove space before the colon in immutable dictionary expression
# 'NSDictionary *test = @{@"foo" :@"bar"};'.
sp_before_oc_dict_colon         = ignore   # ignore/add/remove/force

# (OC) Add or remove space after the colon in message specs,
# i.e. '[object setValue:1];' vs. '[object setValue: 1];'.
sp_after_send_oc_colon          = ignore   # ignore/add/remove/force

# (OC) Add or remove space before the colon in message specs,
# i.e. '[object setValue:1];' vs. '[object setValue :1];'.
sp_before_send_oc_colon         = ignore   # ignore/add/remove/force

# (OC) Add or remove space after the (type) in message specs,
# i.e. '-(int)f: (int) x;' vs. '-(int)f: (int)x;'.
sp_after_oc_type                = ignore   # ignore/add/remove/force

# (OC) Add or remove space after the first (type) in message specs,
# i.e. '-(int) f:(int)x;' vs. '-(int)f:(int)x;'.
sp_after_oc_return_type         = ignore   # ignore/add/remove/force

# (OC) Add or remove space between '@selector' and '(',
# i.e. '@selector(msgName)' vs. '@selector (msgName)'.
# Also applies to '@protocol()' constructs.
sp_after_oc_at_sel              = ignore   # ignore/add/remove/force

# (OC) Add or remove space between '@selector(x)' and the following word,
# i.e. '@selector(foo) a:' vs. '@selector(foo)a:'.
sp_after_oc_at_sel_parens       = ignore   # ignore/add/remove/force

# (OC) Add or remove space inside '@selector' parentheses,
# i.e. '@selector(foo)' vs. '@selector( foo )'.
# Also applies to '@protocol()' constructs.
sp_inside_oc_at_sel_parens      = ignore   # ignore/add/remove/force

# (OC) Add or remove space before a block pointer caret,
# i.e. '^int (int arg){...}' vs. ' ^int (int arg){...}'.
sp_before_oc_block_caret        = ignore   # ignore/add/remove/force

# (OC) Add or remove space after a block pointer caret,
# i.e. '^int (int arg){...}' vs. '^ int (int arg){...}'.
sp_after_oc_block_caret         = ignore   # ignore/add/remove/force

# (OC) Add or remove space between the receiver and selector in a message,
# as in '[receiver selector ...]'.
sp_after_oc_msg_receiver        = ignore   # ignore/add/remove/force

# (OC) Add or remove space after '@property'.
sp_after_oc_property            = ignore   # ignore/add/remove/force

# (OC) Add or remove space between '@synchronized' and the open parenthesis,
# i.e. '@synchronized(foo)' vs. '@synchronized (foo)'.
sp_after_oc_synchronized        = ignore   # ignore/add/remove/force

# Add or remove space around the ':' in 'b ? t : f'.
sp_cond_colon                   = ignore   # ignore/add/remove/force

# Add or remove space before the ':' in 'b ? t : f'.
#
# Overrides sp_cond_colon.
sp_cond_colon_before            = ignore   # ignore/add/remove/force

# Add or remove space after the ':' in 'b ? t : f'.
#
# Overrides sp_cond_colon.
sp_cond_colon_after             = ignore   # ignore/add/remove/force

# Add or remove space around the '?' in 'b ? t : f'.
sp_cond_question                = ignore   # ignore/add/remove/force

# Add or remove space before the '?' in 'b ? t : f'.
#
# Overrides sp_cond_question.
sp_cond_question_before         = ignore   # ignore/add/remove/force

# Add or remove space after the '?' in 'b ? t : f'.
#
# Overrides sp_cond_question.
sp_cond_question_after          = ignore   # ignore/add/remove/force

# In the abbreviated ternary form '(a ?: b)', add or remove space between '?'
# and ':'.
#
# Overrides all other sp_cond_* options.
sp_cond_ternary_short           = ignore   # ignore/add/remove/force

# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make
# sense here.
sp_case_label                   = ignore   # ignore/add/remove/force

# (D) Add or remove space around the D '..' operator.
sp_range                        = ignore   # ignore/add/remove/force

# Add or remove space after ':' in a Java/C++11 range-based 'for',
# as in 'for (Type var : <here> expr)'.
sp_after_for_colon              = ignore   # ignore/add/remove/force

# Add or remove space before ':' in a Java/C++11 range-based 'for',
# as in 'for (Type var <here> : expr)'.
sp_before_for_colon             = ignore   # ignore/add/remove/force

# (D) Add or remove space between 'extern' and '(' as in 'extern <here> (C)'.
sp_extern_paren                 = ignore   # ignore/add/remove/force

# Add or remove space after the opening of a C++ comment, as in '// <here> A'.
sp_cmt_cpp_start                = ignore   # ignore/add/remove/force

# remove space after the '//' and the pvs command '-V1234',
# only works with sp_cmt_cpp_start set to add or force.
sp_cmt_cpp_pvs                  = false    # true/false

# remove space after the '//' and the command 'lint',
# only works with sp_cmt_cpp_start set to add or force.
sp_cmt_cpp_lint                 = false    # true/false

# Add or remove space in a C++ region marker comment, as in '// <here> BEGIN'.
# A region marker is defined as a comment which is not preceded by other text
# (i.e. the comment is the first non-whitespace on the line), and which starts
# with either 'BEGIN' or 'END'.
#
# Overrides sp_cmt_cpp_start.
sp_cmt_cpp_region               = ignore   # ignore/add/remove/force

# If true, space added with sp_cmt_cpp_start will be added after Doxygen
# sequences like '///', '///<', '//!' and '//!<'.
sp_cmt_cpp_doxygen              = false    # true/false

# If true, space added with sp_cmt_cpp_start will be added after Qt translator
# or meta-data comments like '//:', '//=', and '//~'.
sp_cmt_cpp_qttr                 = false    # true/false

# Add or remove space between #else or #endif and a trailing comment.
sp_endif_cmt                    = ignore   # ignore/add/remove/force

# Add or remove space after 'new', 'delete' and 'delete[]'.
sp_after_new                    = ignore   # ignore/add/remove/force

# Add or remove space between 'new' and '(' in 'new()'.
sp_between_new_paren            = ignore   # ignore/add/remove/force

# Add or remove space between ')' and type in 'new(foo) BAR'.
sp_after_newop_paren            = ignore   # ignore/add/remove/force

# Add or remove space inside parentheses of the new operator
# as in 'new(foo) BAR'.
sp_inside_newop_paren           = ignore   # ignore/add/remove/force

# Add or remove space after the open parenthesis of the new operator,
# as in 'new(foo) BAR'.
#
# Overrides sp_inside_newop_paren.
sp_inside_newop_paren_open      = ignore   # ignore/add/remove/force

# Add or remove space before the close parenthesis of the new operator,
# as in 'new(foo) BAR'.
#
# Overrides sp_inside_newop_paren.
sp_inside_newop_paren_close     = ignore   # ignore/add/remove/force

# Add or remove space before a trailing comment.
sp_before_tr_cmt                = ignore   # ignore/add/remove/force

# Number of spaces before a trailing comment.
sp_num_before_tr_cmt            = 0        # unsigned number

# Add or remove space before an embedded comment.
#
# Default: force
sp_before_emb_cmt               = force    # ignore/add/remove/force

# Number of spaces before an embedded comment.
#
# Default: 1
sp_num_before_emb_cmt           = 1        # unsigned number

# Add or remove space after an embedded comment.
#
# Default: force
sp_after_emb_cmt                = force    # ignore/add/remove/force

# Number of spaces after an embedded comment.
#
# Default: 1
sp_num_after_emb_cmt            = 1        # unsigned number

# Embedded comment spacing options have higher priority (== override)
# than other spacing options (comma, parenthesis, braces, ...)
sp_emb_cmt_priority             = false    # true/false

# (Java) Add or remove space between an annotation and the open parenthesis.
sp_annotation_paren             = ignore   # ignore/add/remove/force

# If true, vbrace tokens are dropped to the previous token and skipped.
sp_skip_vbrace_tokens           = false    # true/false

# Add or remove space after 'noexcept'.
sp_after_noexcept               = ignore   # ignore/add/remove/force

# Add or remove space after '_'.
sp_vala_after_translation       = ignore   # ignore/add/remove/force

# Add or remove space before a bit colon ':'.
sp_before_bit_colon             = ignore   # ignore/add/remove/force

# Add or remove space after a bit colon ':'.
sp_after_bit_colon              = ignore   # ignore/add/remove/force

# If true, a <TAB> is inserted after #define.
force_tab_after_define          = false    # true/false

# Add or remove space between two strings.
sp_string_string                = ignore   # ignore/add/remove/force

# Add or remove space 'struct' and a type.
sp_struct_type                  = ignore   # ignore/add/remove/force

#
# Indenting options
#

# The number of columns to indent per level. Usually 2, 3, 4, or 8.
#
# Default: 8
indent_columns                  = 4        # unsigned number

# Whether to ignore indent for the first continuation line. Subsequent
# continuation lines will still be indented to match the first.
indent_ignore_first_continue    = false    # true/false

# The continuation indent. If non-zero, this overrides the indent of '(', '['
# and '=' continuation indents. Negative values are OK; negative value is
# absolute and not increased for each '(' or '[' level.
#
# For FreeBSD, this is set to 4.
# Requires indent_ignore_first_continue=false.
indent_continue                 = 8        # number

# The continuation indent, only for class header line(s). If non-zero, this
# overrides the indent of 'class' continuation indents.
# Requires indent_ignore_first_continue=false.
indent_continue_class_head      = 0        # unsigned number

# Whether to indent empty lines (i.e. lines which contain only spaces before
# the newline character).
indent_single_newlines          = false    # true/false

# The continuation indent for func_*_param if they are true. If non-zero, this
# overrides the indent.
indent_param                    = 0        # unsigned number

# How to use tabs when indenting code.
#
# 0: Spaces only
# 1: Indent with tabs to brace level, align with spaces (default)
# 2: Indent and align with tabs, using spaces when not on a tabstop
#
# Default: 1
indent_with_tabs                = 2        # unsigned number

# Whether to indent comments that are not at a brace level with tabs on a
# tabstop. Requires indent_with_tabs=2. If false, will use spaces.
indent_cmt_with_tabs            = false    # true/false

# Whether to indent strings broken by '\' so that they line up.
indent_align_string             = false    # true/false

# The number of spaces to indent multi-line XML strings.
# Requires indent_align_string=true.
indent_xml_string               = 0        # unsigned number

# Spaces to indent '{' from level.
indent_brace                    = 0        # unsigned number

# Whether braces are indented to the body level.
indent_braces                   = false    # true/false

# Whether to disable indenting function braces if indent_braces=true.
indent_braces_no_func           = false    # true/false

# Whether to disable indenting class braces if indent_braces=true.
indent_braces_no_class          = false    # true/false

# Whether to disable indenting struct braces if indent_braces=true.
indent_braces_no_struct         = false    # true/false

# Whether to indent based on the size of the brace parent,
# i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc.
indent_brace_parent             = false    # true/false

# Whether to indent based on the open parenthesis instead of the open brace
# in '({\n'.
indent_paren_open_brace         = false    # true/false

# (C#) Whether to indent the brace of a C# delegate by another level.
indent_cs_delegate_brace        = false    # true/false

# (C#) Whether to indent a C# delegate (to handle delegates with no brace) by
# another level.
indent_cs_delegate_body         = false    # true/false

# Whether to indent the body of a 'namespace'.
indent_namespace                = false    # true/false

# Whether to indent only the first namespace, and not any nested namespaces.
# Requires indent_namespace=true.
indent_namespace_single_indent  = false    # true/false

# The number of spaces to indent a namespace block.
# If set to zero, use the value indent_columns
indent_namespace_level          = 0        # unsigned number

# If the body of the namespace is longer than this number, it won't be
# indented. Requires indent_namespace=true. 0 means no limit.
indent_namespace_limit          = 0        # unsigned number

# Whether to indent only in inner namespaces (nested in other namespaces).
# Requires indent_namespace=true.
indent_namespace_inner_only     = false    # true/false

# Whether the 'extern "C"' body is indented.
indent_extern                   = false    # true/false

# Whether the 'class' body is indented.
indent_class                    = true    # true/false

# Whether to ignore indent for the leading base class colon.
indent_ignore_before_class_colon = false    # true/false

# Additional indent before the leading base class colon.
# Negative values decrease indent down to the first column.
# Requires indent_ignore_before_class_colon=false and a newline break before
# the colon (see pos_class_colon and nl_class_colon)
indent_before_class_colon       = 0        # number

# Whether to indent the stuff after a leading base class colon.
indent_class_colon              = false    # true/false

# Whether to indent based on a class colon instead of the stuff after the
# colon. Requires indent_class_colon=true.
indent_class_on_colon           = false    # true/false

# Whether to ignore indent for a leading class initializer colon.
indent_ignore_before_constr_colon = false    # true/false

# Whether to indent the stuff after a leading class initializer colon.
indent_constr_colon             = false    # true/false

# Virtual indent from the ':' for leading member initializers.
#
# Default: 2
indent_ctor_init_leading        = 2        # unsigned number

# Virtual indent from the ':' for following member initializers.
#
# Default: 2
indent_ctor_init_following      = 2        # unsigned number

# Additional indent for constructor initializer list.
# Negative values decrease indent down to the first column.
indent_ctor_init                = 0        # number

# Whether to indent 'if' following 'else' as a new block under the 'else'.
# If false, 'else\nif' is treated as 'else if' for indenting purposes.
indent_else_if                  = false    # true/false

# Amount to indent variable declarations after a open brace.
#
#  <0: Relative
# >=0: Absolute
indent_var_def_blk              = 0        # number

# Whether to indent continued variable declarations instead of aligning.
indent_var_def_cont             = true    # true/false

# How to indent continued shift expressions ('<<' and '>>').
# Set align_left_shift=false when using this.
#  0: Align shift operators instead of indenting them (default)
#  1: Indent by one level
# -1: Preserve original indentation
indent_shift                    = 0        # number

# Whether to force indentation of function definitions to start in column 1.
indent_func_def_force_col1      = false    # true/false

# Whether to indent continued function call parameters one indent level,
# rather than aligning parameters under the open parenthesis.
indent_func_call_param          = true    # true/false

# Whether to indent continued function definition parameters one indent level,
# rather than aligning parameters under the open parenthesis.
indent_func_def_param           = true    # true/false

# for function definitions, only if indent_func_def_param is false
# Allows to align params when appropriate and indent them when not
# behave as if it was true if paren position is more than this value
# if paren position is more than the option value
indent_func_def_param_paren_pos_threshold = 0        # unsigned number

# Whether to indent continued function call prototype one indent level,
# rather than aligning parameters under the open parenthesis.
indent_func_proto_param         = true    # true/false

# Whether to indent continued function call declaration one indent level,
# rather than aligning parameters under the open parenthesis.
indent_func_class_param         = true    # true/false

# Whether to indent continued class variable constructors one indent level,
# rather than aligning parameters under the open parenthesis.
indent_func_ctor_var_param      = true    # true/false

# Whether to indent continued template parameter list one indent level,
# rather than aligning parameters under the open parenthesis.
indent_template_param           = true    # true/false

# Double the indent for indent_func_xxx_param options.
# Use both values of the options indent_columns and indent_param.
indent_func_param_double        = true    # true/false

# Indentation column for standalone 'const' qualifier on a function
# prototype.
indent_func_const               = 0        # unsigned number

# Indentation column for standalone 'throw' qualifier on a function
# prototype.
indent_func_throw               = 0        # unsigned number

# How to indent within a macro followed by a brace on the same line
# This allows reducing the indent in macros that have (for example)
# `do { ... } while (0)` blocks bracketing them.
#
# true:  add an indent for the brace on the same line as the macro
# false: do not add an indent for the brace on the same line as the macro
#
# Default: true
indent_macro_brace              = true     # true/false

# The number of spaces to indent a continued '->' or '.'.
# Usually set to 0, 1, or indent_columns.
indent_member                   = indent_columns        # unsigned number

# Whether lines broken at '.' or '->' should be indented by a single indent.
# The indent_member option will not be effective if this is set to true.
indent_member_single            = false    # true/false

# Spaces to indent single line ('//') comments on lines before code.
indent_single_line_comments_before = 0        # unsigned number

# Spaces to indent single line ('//') comments on lines after code.
indent_single_line_comments_after = 0        # unsigned number

# When opening a paren for a control statement (if, for, while, etc), increase
# the indent level by this value. Negative values decrease the indent level.
indent_sparen_extra             = 0        # number

# Whether to indent trailing single line ('//') comments relative to the code
# instead of trying to keep the same absolute column.
indent_relative_single_line_comments = false    # true/false

# Spaces to indent 'case' from 'switch'. Usually 0 or indent_columns.
# It might be wise to choose the same value for the option indent_case_brace.
indent_switch_case              = indent_columns        # unsigned number

# Spaces to indent the body of a 'switch' before any 'case'.
# Usually the same as indent_columns or indent_switch_case.
indent_switch_body              = 0        # unsigned number

# Whether to ignore indent for '{' following 'case'.
indent_ignore_case_brace        = false    # true/false

# Spaces to indent '{' from 'case'. By default, the brace will appear under
# the 'c' in case. Usually set to 0 or indent_columns. Negative values are OK.
# It might be wise to choose the same value for the option indent_switch_case.
indent_case_brace               = indent_columns        # number

# indent 'break' with 'case' from 'switch'.
indent_switch_break_with_case   = false    # true/false

# Whether to indent preprocessor statements inside of switch statements.
#
# Default: true
indent_switch_pp                = true     # true/false

# Spaces to shift the 'case' line, without affecting any other lines.
# Usually 0.
indent_case_shift               = 0        # unsigned number

# Whether to align comments before 'case' with the 'case'.
#
# Default: true
indent_case_comment             = true     # true/false

# Whether to indent comments not found in first column.
#
# Default: true
indent_comment                  = true     # true/false

# Whether to indent comments found in first column.
indent_col1_comment             = false    # true/false

# Whether to indent multi string literal in first column.
indent_col1_multi_string_literal = false    # true/false

# Align comments on adjacent lines that are this many columns apart or less.
#
# Default: 3
indent_comment_align_thresh     = 3        # unsigned number

# Whether to ignore indent for goto labels.
indent_ignore_label             = false    # true/false

# How to indent goto labels. Requires indent_ignore_label=false.
#
#  >0: Absolute column where 1 is the leftmost column
# <=0: Subtract from brace indent
#
# Default: 1
indent_label                    = 1        # number

# How to indent access specifiers that are followed by a
# colon.
#
#  >0: Absolute column where 1 is the leftmost column
# <=0: Subtract from brace indent
#
# Default: 1
indent_access_spec              = 1        # number

# Whether to indent the code after an access specifier by one level.
# If true, this option forces 'indent_access_spec=0'.
indent_access_spec_body         = false    # true/false

# If an open parenthesis is followed by a newline, whether to indent the next
# line so that it lines up after the open parenthesis (not recommended).
indent_paren_nl                 = false    # true/false

# How to indent a close parenthesis after a newline.
#
#  0: Indent to body level (default)
#  1: Align under the open parenthesis
#  2: Indent to the brace level
# -1: Preserve original indentation
indent_paren_close              = 0        # number

# Whether to indent the open parenthesis of a function definition,
# if the parenthesis is on its own line.
indent_paren_after_func_def     = false    # true/false

# Whether to indent the open parenthesis of a function declaration,
# if the parenthesis is on its own line.
indent_paren_after_func_decl    = false    # true/false

# Whether to indent the open parenthesis of a function call,
# if the parenthesis is on its own line.
indent_paren_after_func_call    = false    # true/false

# How to indent a comma when inside braces.
#  0: Indent by one level (default)
#  1: Align under the open brace
# -1: Preserve original indentation
indent_comma_brace              = 0        # number

# How to indent a comma when inside parentheses.
#  0: Indent by one level (default)
#  1: Align under the open parenthesis
# -1: Preserve original indentation
indent_comma_paren              = 0        # number

# How to indent a Boolean operator when inside parentheses.
#  0: Indent by one level (default)
#  1: Align under the open parenthesis
# -1: Preserve original indentation
indent_bool_paren               = 0        # number

# Whether to ignore the indentation of a Boolean operator when outside
# parentheses.
indent_ignore_bool              = false    # true/false

# Whether to indent lines that are nested in boolean expression one more level for each nesting
indent_bool_nested_all          = false    # true/false

# Whether to ignore the indentation of an arithmetic operator.
indent_ignore_arith             = false    # true/false

# Whether to indent a semicolon when inside a for parenthesis.
# If true, aligns under the open for parenthesis.
indent_semicolon_for_paren      = false    # true/false

# Whether to ignore the indentation of a semicolon outside of a 'for'
# statement.
indent_ignore_semicolon         = false    # true/false

# Whether to align the first expression to following ones
# if indent_bool_paren=1.
indent_first_bool_expr          = false    # true/false

# Whether to align the first expression to following ones
# if indent_semicolon_for_paren=true.
indent_first_for_expr           = false    # true/false

# If an open square is followed by a newline, whether to indent the next line
# so that it lines up after the open square (not recommended).
indent_square_nl                = false    # true/false

# (ESQL/C) Whether to preserve the relative indent of 'EXEC SQL' bodies.
indent_preserve_sql             = false    # true/false

# Whether to ignore the indentation of an assignment operator.
indent_ignore_assign            = false    # true/false

# Whether to align continued statements at the '='. If false or if the '=' is
# followed by a newline, the next line is indent one tab.
#
# Default: true
indent_align_assign             = true     # true/false

# If true, the indentation of the chunks after a '=' sequence will be set at
# LHS token indentation column before '='.
indent_off_after_assign         = false    # true/false

# Whether to align continued statements at the '('. If false or the '(' is
# followed by a newline, the next line indent is one tab.
#
# Default: true
indent_align_paren              = true     # true/false

# (OC) Whether to indent Objective-C code inside message selectors.
indent_oc_inside_msg_sel        = false    # true/false

# (OC) Whether to indent Objective-C blocks at brace level instead of usual
# rules.
indent_oc_block                 = false    # true/false

# (OC) Indent for Objective-C blocks in a message relative to the parameter
# name.
#
# =0: Use indent_oc_block rules
# >0: Use specified number of spaces to indent
indent_oc_block_msg             = 0        # unsigned number

# (OC) Minimum indent for subsequent parameters
indent_oc_msg_colon             = 0        # unsigned number

# (OC) Whether to prioritize aligning with initial colon (and stripping spaces
# from lines, if necessary).
#
# Default: true
indent_oc_msg_prioritize_first_colon = true     # true/false

# (OC) Whether to indent blocks the way that Xcode does by default
# (from the keyword if the parameter is on its own line; otherwise, from the
# previous indentation level). Requires indent_oc_block_msg=true.
indent_oc_block_msg_xcode_style = false    # true/false

# (OC) Whether to indent blocks from where the brace is, relative to a
# message keyword. Requires indent_oc_block_msg=true.
indent_oc_block_msg_from_keyword = false    # true/false

# (OC) Whether to indent blocks from where the brace is, relative to a message
# colon. Requires indent_oc_block_msg=true.
indent_oc_block_msg_from_colon  = false    # true/false

# (OC) Whether to indent blocks from where the block caret is.
# Requires indent_oc_block_msg=true.
indent_oc_block_msg_from_caret  = false    # true/false

# (OC) Whether to indent blocks from where the brace caret is.
# Requires indent_oc_block_msg=true.
indent_oc_block_msg_from_brace  = false    # true/false

# When indenting after virtual brace open and newline add further spaces to
# reach this minimum indent.
indent_min_vbrace_open          = 0        # unsigned number

# Whether to add further spaces after regular indent to reach next tabstop
# when indenting after virtual brace open and newline.
indent_vbrace_open_on_tabstop   = false    # true/false

# How to indent after a brace followed by another token (not a newline).
# true:  indent all contained lines to match the token
# false: indent all contained lines to match the brace
#
# Default: true
indent_token_after_brace        = true     # true/false

# Whether to indent the body of a C++11 lambda.
indent_cpp_lambda_body          = false    # true/false

# How to indent compound literals that are being returned.
# true: add both the indent from return & the compound literal open brace
#       (i.e. 2 indent levels)
# false: only indent 1 level, don't add the indent for the open brace, only
#        add the indent for the return.
#
# Default: true
indent_compound_literal_return  = true     # true/false

# (C#) Whether to indent a 'using' block if no braces are used.
#
# Default: true
indent_using_block              = true     # true/false

# How to indent the continuation of ternary operator.
#
# 0: Off (default)
# 1: When the `if_false` is a continuation, indent it under the `if_true` branch
# 2: When the `:` is a continuation, indent it under `?`
indent_ternary_operator         = 0        # unsigned number

# Whether to indent the statements inside ternary operator.
indent_inside_ternary_operator  = false    # true/false

# If true, the indentation of the chunks after a `return` sequence will be set at return indentation column.
indent_off_after_return         = false    # true/false

# If true, the indentation of the chunks after a `return new` sequence will be set at return indentation column.
indent_off_after_return_new     = false    # true/false

# If true, the tokens after return are indented with regular single indentation. By default (false) the indentation is after the return token.
indent_single_after_return      = false    # true/false

# Whether to ignore indent and alignment for 'asm' blocks (i.e. assume they
# have their own indentation).
indent_ignore_asm_block         = false    # true/false

# Don't indent the close parenthesis of a function definition,
# if the parenthesis is on its own line.
donot_indent_func_def_close_paren = false    # true/false

#
# Newline adding and removing options
#

# Whether to collapse empty blocks between '{' and '}' except for functions.
# Use nl_collapse_empty_body_functions to specify how empty function braces
# should be formatted.
nl_collapse_empty_body          = false    # true/false

# Whether to collapse empty blocks between '{' and '}' for functions only.
# If true, overrides nl_inside_empty_func.
nl_collapse_empty_body_functions = false    # true/false

# Don't split one-line braced assignments, as in 'foo_t f = { 1, 2 };'.
nl_assign_leave_one_liners      = true    # true/false

# Don't split one-line braced statements inside a 'class xx { }' body.
nl_class_leave_one_liners       = true    # true/false

# Don't split one-line enums, as in 'enum foo { BAR = 15 };'
nl_enum_leave_one_liners        = true    # true/false

# Don't split one-line get or set functions.
nl_getset_leave_one_liners      = true    # true/false

# (C#) Don't split one-line property get or set functions.
nl_cs_property_leave_one_liners = false    # true/false

# Don't split one-line function definitions, as in 'int foo() { return 0; }'.
# might modify nl_func_type_name
nl_func_leave_one_liners        = false    # true/false

# Don't split one-line C++11 lambdas, as in '[]() { return 0; }'.
nl_cpp_lambda_leave_one_liners  = false    # true/false

# Don't split one-line if/else statements, as in 'if(...) b++;'.
nl_if_leave_one_liners          = false    # true/false

# Don't split one-line while statements, as in 'while(...) b++;'.
nl_while_leave_one_liners       = false    # true/false

# Don't split one-line do statements, as in 'do { b++; } while(...);'.
nl_do_leave_one_liners          = false    # true/false

# Don't split one-line for statements, as in 'for(...) b++;'.
nl_for_leave_one_liners         = false    # true/false

# (OC) Don't split one-line Objective-C messages.
nl_oc_msg_leave_one_liner       = false    # true/false

# (OC) Add or remove newline between method declaration and '{'.
nl_oc_mdef_brace                = ignore   # ignore/add/remove/force

# (OC) Add or remove newline between Objective-C block signature and '{'.
nl_oc_block_brace               = ignore   # ignore/add/remove/force

# (OC) Add or remove blank line before '@interface' statement.
nl_oc_before_interface          = ignore   # ignore/add/remove/force

# (OC) Add or remove blank line before '@implementation' statement.
nl_oc_before_implementation     = ignore   # ignore/add/remove/force

# (OC) Add or remove blank line before '@end' statement.
nl_oc_before_end                = ignore   # ignore/add/remove/force

# (OC) Add or remove newline between '@interface' and '{'.
nl_oc_interface_brace           = ignore   # ignore/add/remove/force

# (OC) Add or remove newline between '@implementation' and '{'.
nl_oc_implementation_brace      = ignore   # ignore/add/remove/force

# Add or remove newlines at the start of the file.
nl_start_of_file                = ignore   # ignore/add/remove/force

# The minimum number of newlines at the start of the file (only used if
# nl_start_of_file is 'add' or 'force').
nl_start_of_file_min            = 0        # unsigned number

# Add or remove newline at the end of the file.
nl_end_of_file                  = ignore   # ignore/add/remove/force

# The minimum number of newlines at the end of the file (only used if
# nl_end_of_file is 'add' or 'force').
nl_end_of_file_min              = 0        # unsigned number

# Add or remove newline between '=' and '{'.
nl_assign_brace                 = remove   # ignore/add/remove/force

# (D) Add or remove newline between '=' and '['.
nl_assign_square                = ignore   # ignore/add/remove/force

# Add or remove newline between '[]' and '{'.
nl_tsquare_brace                = ignore   # ignore/add/remove/force

# (D) Add or remove newline after '= ['. Will also affect the newline before
# the ']'.
nl_after_square_assign          = ignore   # ignore/add/remove/force

# Add or remove newline between a function call's ')' and '{', as in
# 'list_for_each(item, &list) { }'.
nl_fcall_brace                  = add   # ignore/add/remove/force

# Add or remove newline between 'enum' and '{'.
nl_enum_brace                   = remove   # ignore/add/remove/force

# Add or remove newline between 'enum' and 'class'.
nl_enum_class                   = ignore   # ignore/add/remove/force

# Add or remove newline between 'enum class' and the identifier.
nl_enum_class_identifier        = ignore   # ignore/add/remove/force

# Add or remove newline between 'enum class' type and ':'.
nl_enum_identifier_colon        = ignore   # ignore/add/remove/force

# Add or remove newline between 'enum class identifier :' and type.
nl_enum_colon_type              = ignore   # ignore/add/remove/force

# Add or remove newline between 'struct and '{'.
nl_struct_brace                 = remove   # ignore/add/remove/force

# Add or remove newline between 'union' and '{'.
nl_union_brace                  = remove   # ignore/add/remove/force

# Add or remove newline between 'if' and '{'.
nl_if_brace                     = remove   # ignore/add/remove/force

# Add or remove newline between '}' and 'else'.
nl_brace_else                   = remove   # ignore/add/remove/force

# Add or remove newline between 'else if' and '{'. If set to ignore,
# nl_if_brace is used instead.
nl_elseif_brace                 = remove   # ignore/add/remove/force

# Add or remove newline between 'else' and '{'.
nl_else_brace                   = remove   # ignore/add/remove/force

# Add or remove newline between 'else' and 'if'.
nl_else_if                      = remove   # ignore/add/remove/force

# Add or remove newline before '{' opening brace
nl_before_opening_brace_func_class_def = ignore   # ignore/add/remove/force

# Add or remove newline before 'if'/'else if' closing parenthesis.
nl_before_if_closing_paren      = ignore   # ignore/add/remove/force

# Add or remove newline between '}' and 'finally'.
nl_brace_finally                = ignore   # ignore/add/remove/force

# Add or remove newline between 'finally' and '{'.
nl_finally_brace                = ignore   # ignore/add/remove/force

# Add or remove newline between 'try' and '{'.
nl_try_brace                    = ignore   # ignore/add/remove/force

# Add or remove newline between get/set and '{'.
nl_getset_brace                 = ignore   # ignore/add/remove/force

# Add or remove newline between 'for' and '{'.
nl_for_brace                    = remove   # ignore/add/remove/force

# Add or remove newline before the '{' of a 'catch' statement, as in
# 'catch (decl) <here> {'.
nl_catch_brace                  = ignore   # ignore/add/remove/force

# (OC) Add or remove newline before the '{' of a '@catch' statement, as in
# '@catch (decl) <here> {'. If set to ignore, nl_catch_brace is used.
nl_oc_catch_brace               = ignore   # ignore/add/remove/force

# Add or remove newline between '}' and 'catch'.
nl_brace_catch                  = ignore   # ignore/add/remove/force

# (OC) Add or remove newline between '}' and '@catch'. If set to ignore,
# nl_brace_catch is used.
nl_oc_brace_catch               = ignore   # ignore/add/remove/force

# Add or remove newline between '}' and ']'.
nl_brace_square                 = ignore   # ignore/add/remove/force

# Add or remove newline between '}' and ')' in a function invocation.
nl_brace_fparen                 = ignore   # ignore/add/remove/force

# Add or remove newline between 'while' and '{'.
nl_while_brace                  = remove   # ignore/add/remove/force

# (D) Add or remove newline between 'scope (x)' and '{'.
nl_scope_brace                  = ignore   # ignore/add/remove/force

# (D) Add or remove newline between 'unittest' and '{'.
nl_unittest_brace               = ignore   # ignore/add/remove/force

# (D) Add or remove newline between 'version (x)' and '{'.
nl_version_brace                = ignore   # ignore/add/remove/force

# (C#) Add or remove newline between 'using' and '{'.
nl_using_brace                  = ignore   # ignore/add/remove/force

# Add or remove newline between two open or close braces. Due to general
# newline/brace handling, REMOVE may not work.
nl_brace_brace                  = ignore   # ignore/add/remove/force

# Add or remove newline between 'do' and '{'.
nl_do_brace                     = remove   # ignore/add/remove/force

# Add or remove newline between '}' and 'while' of 'do' statement.
nl_brace_while                  = remove   # ignore/add/remove/force

# Add or remove newline between 'switch' and '{'.
nl_switch_brace                 = remove   # ignore/add/remove/force

# Add or remove newline between 'synchronized' and '{'.
nl_synchronized_brace           = remove   # ignore/add/remove/force

# Add a newline between ')' and '{' if the ')' is on a different line than the
# if/for/etc.
#
# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch and
# nl_catch_brace.
nl_multi_line_cond              = false    # true/false

# Add a newline after '(' if an if/for/while/switch condition spans multiple
# lines
nl_multi_line_sparen_open       = ignore   # ignore/add/remove/force

# Add a newline before ')' if an if/for/while/switch condition spans multiple
# lines. Overrides nl_before_if_closing_paren if both are specified.
nl_multi_line_sparen_close      = ignore   # ignore/add/remove/force

# Force a newline in a define after the macro name for multi-line defines.
nl_multi_line_define            = false    # true/false

# Whether to add a newline before 'case', and a blank line before a 'case'
# statement that follows a ';' or '}'.
nl_before_case                  = false    # true/false

# Whether to add a newline after a 'case' statement.
nl_after_case                   = false    # true/false

# Add or remove newline between a case ':' and '{'.
#
# Overrides nl_after_case.
nl_case_colon_brace             = ignore   # ignore/add/remove/force

# Add or remove newline between ')' and 'throw'.
nl_before_throw                 = ignore   # ignore/add/remove/force

# Add or remove newline between 'namespace' and '{'.
nl_namespace_brace              = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template class.
nl_template_class               = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template class declaration.
#
# Overrides nl_template_class.
nl_template_class_decl          = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<>' of a specialized class declaration.
#
# Overrides nl_template_class_decl.
nl_template_class_decl_special  = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template class definition.
#
# Overrides nl_template_class.
nl_template_class_def           = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<>' of a specialized class definition.
#
# Overrides nl_template_class_def.
nl_template_class_def_special   = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template function.
nl_template_func                = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template function
# declaration.
#
# Overrides nl_template_func.
nl_template_func_decl           = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<>' of a specialized function
# declaration.
#
# Overrides nl_template_func_decl.
nl_template_func_decl_special   = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template function
# definition.
#
# Overrides nl_template_func.
nl_template_func_def            = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<>' of a specialized function
# definition.
#
# Overrides nl_template_func_def.
nl_template_func_def_special    = ignore   # ignore/add/remove/force

# Add or remove newline after 'template<...>' of a template variable.
nl_template_var                 = ignore   # ignore/add/remove/force

# Add or remove newline between 'template<...>' and 'using' of a templated
# type alias.
nl_template_using               = ignore   # ignore/add/remove/force

# Add or remove newline between 'class' and '{'.
nl_class_brace                  = ignore   # ignore/add/remove/force

# Add or remove newline before or after (depending on pos_class_comma,
# may not be IGNORE) each',' in the base class list.
nl_class_init_args              = ignore   # ignore/add/remove/force

# Add or remove newline after each ',' in the constructor member
# initialization. Related to nl_constr_colon, pos_constr_colon and
# pos_constr_comma.
nl_constr_init_args             = ignore   # ignore/add/remove/force

# Add or remove newline before first element, after comma, and after last
# element, in 'enum'.
nl_enum_own_lines               = ignore   # ignore/add/remove/force

# Add or remove newline between return type and function name in a function
# definition.
# might be modified by nl_func_leave_one_liners
nl_func_type_name               = ignore   # ignore/add/remove/force

# Add or remove newline between return type and function name inside a class
# definition. If set to ignore, nl_func_type_name or nl_func_proto_type_name
# is used instead.
nl_func_type_name_class         = ignore   # ignore/add/remove/force

# Add or remove newline between class specification and '::'
# in 'void A::f() { }'. Only appears in separate member implementation (does
# not appear with in-line implementation).
nl_func_class_scope             = ignore   # ignore/add/remove/force

# Add or remove newline between function scope and name, as in
# 'void A :: <here> f() { }'.
nl_func_scope_name              = ignore   # ignore/add/remove/force

# Add or remove newline between return type and function name in a prototype.
nl_func_proto_type_name         = ignore   # ignore/add/remove/force

# Add or remove newline between a function name and the opening '(' in the
# declaration.
nl_func_paren                   = remove   # ignore/add/remove/force

# Overrides nl_func_paren for functions with no parameters.
nl_func_paren_empty             = remove   # ignore/add/remove/force

# Add or remove newline between a function name and the opening '(' in the
# definition.
nl_func_def_paren               = remove   # ignore/add/remove/force

# Overrides nl_func_def_paren for functions with no parameters.
nl_func_def_paren_empty         = remove   # ignore/add/remove/force

# Add or remove newline between a function name and the opening '(' in the
# call.
nl_func_call_paren              = remove   # ignore/add/remove/force

# Overrides nl_func_call_paren for functions with no parameters.
nl_func_call_paren_empty        = remove   # ignore/add/remove/force

# Add or remove newline after '(' in a function declaration.
nl_func_decl_start              = ignore   # ignore/add/remove/force

# Add or remove newline after '(' in a function definition.
nl_func_def_start               = ignore   # ignore/add/remove/force

# Overrides nl_func_decl_start when there is only one parameter.
nl_func_decl_start_single       = ignore   # ignore/add/remove/force

# Overrides nl_func_def_start when there is only one parameter.
nl_func_def_start_single        = ignore   # ignore/add/remove/force

# Whether to add a newline after '(' in a function declaration if '(' and ')'
# are in different lines. If false, nl_func_decl_start is used instead.
nl_func_decl_start_multi_line   = false    # true/false

# Whether to add a newline after '(' in a function definition if '(' and ')'
# are in different lines. If false, nl_func_def_start is used instead.
nl_func_def_start_multi_line    = false    # true/false

# Add or remove newline after each ',' in a function declaration.
nl_func_decl_args               = ignore   # ignore/add/remove/force

# Add or remove newline after each ',' in a function definition.
nl_func_def_args                = ignore   # ignore/add/remove/force

# Add or remove newline after each ',' in a function call.
nl_func_call_args               = ignore   # ignore/add/remove/force

# Whether to add a newline after each ',' in a function declaration if '('
# and ')' are in different lines. If false, nl_func_decl_args is used instead.
nl_func_decl_args_multi_line    = false    # true/false

# Whether to add a newline after each ',' in a function definition if '('
# and ')' are in different lines. If false, nl_func_def_args is used instead.
nl_func_def_args_multi_line     = false    # true/false

# Add or remove newline before the ')' in a function declaration.
nl_func_decl_end                = ignore   # ignore/add/remove/force

# Add or remove newline before the ')' in a function definition.
nl_func_def_end                 = ignore   # ignore/add/remove/force

# Overrides nl_func_decl_end when there is only one parameter.
nl_func_decl_end_single         = ignore   # ignore/add/remove/force

# Overrides nl_func_def_end when there is only one parameter.
nl_func_def_end_single          = ignore   # ignore/add/remove/force

# Whether to add a newline before ')' in a function declaration if '(' and ')'
# are in different lines. If false, nl_func_decl_end is used instead.
nl_func_decl_end_multi_line     = false    # true/false

# Whether to add a newline before ')' in a function definition if '(' and ')'
# are in different lines. If false, nl_func_def_end is used instead.
nl_func_def_end_multi_line      = false    # true/false

# Add or remove newline between '()' in a function declaration.
nl_func_decl_empty              = ignore   # ignore/add/remove/force

# Add or remove newline between '()' in a function definition.
nl_func_def_empty               = ignore   # ignore/add/remove/force

# Add or remove newline between '()' in a function call.
nl_func_call_empty              = ignore   # ignore/add/remove/force

# Whether to add a newline after '(' in a function call,
# has preference over nl_func_call_start_multi_line.
nl_func_call_start              = ignore   # ignore/add/remove/force

# Whether to add a newline before ')' in a function call.
nl_func_call_end                = ignore   # ignore/add/remove/force

# Whether to add a newline after '(' in a function call if '(' and ')' are in
# different lines.
nl_func_call_start_multi_line   = false    # true/false

# Whether to add a newline after each ',' in a function call if '(' and ')'
# are in different lines.
nl_func_call_args_multi_line    = false    # true/false

# Whether to add a newline before ')' in a function call if '(' and ')' are in
# different lines.
nl_func_call_end_multi_line     = false    # true/false

# Whether to respect nl_func_call_XXX option in case of closure args.
nl_func_call_args_multi_line_ignore_closures = false    # true/false

# Whether to add a newline after '<' of a template parameter list.
nl_template_start               = false    # true/false

# Whether to add a newline after each ',' in a template parameter list.
nl_template_args                = false    # true/false

# Whether to add a newline before '>' of a template parameter list.
nl_template_end                 = false    # true/false

# (OC) Whether to put each Objective-C message parameter on a separate line.
# See nl_oc_msg_leave_one_liner.
nl_oc_msg_args                  = false    # true/false

# (OC) Minimum number of Objective-C message parameters before applying nl_oc_msg_args.
nl_oc_msg_args_min_params       = 0        # unsigned number

# (OC) Max code width of Objective-C message before applying nl_oc_msg_args.
nl_oc_msg_args_max_code_width   = 0        # unsigned number

# (OC) Whether to apply nl_oc_msg_args if some of the parameters are already
# on new lines. Overrides nl_oc_msg_args_min_params and nl_oc_msg_args_max_code_width.
nl_oc_msg_args_finish_multi_line = false    # true/false

# Add or remove newline between function signature and '{'.
nl_fdef_brace                   = add   # ignore/add/remove/force

# Add or remove newline between function signature and '{',
# if signature ends with ')'. Overrides nl_fdef_brace.
nl_fdef_brace_cond              = ignore   # ignore/add/remove/force

# Add or remove newline between C++11 lambda signature and '{'.
nl_cpp_ldef_brace               = ignore   # ignore/add/remove/force

# Add or remove newline between 'return' and the return expression.
nl_return_expr                  = ignore   # ignore/add/remove/force

# Add or remove newline between 'throw' and the throw expression.
nl_throw_expr                   = ignore   # ignore/add/remove/force

# Whether to add a newline after semicolons, except in 'for' statements.
nl_after_semicolon              = false    # true/false

# (Java) Add or remove newline between the ')' and '{{' of the double brace
# initializer.
nl_paren_dbrace_open            = ignore   # ignore/add/remove/force

# Whether to add a newline after the type in an unnamed temporary
# direct-list-initialization, better:
# before a direct-list-initialization.
nl_type_brace_init_lst          = ignore   # ignore/add/remove/force

# Whether to add a newline after the open brace in an unnamed temporary
# direct-list-initialization.
nl_type_brace_init_lst_open     = ignore   # ignore/add/remove/force

# Whether to add a newline before the close brace in an unnamed temporary
# direct-list-initialization.
nl_type_brace_init_lst_close    = ignore   # ignore/add/remove/force

# Whether to add a newline before '{'.
nl_before_brace_open            = false    # true/false

# Whether to add a newline after '{'.
nl_after_brace_open             = false    # true/false

# Whether to add a newline between the open brace and a trailing single-line
# comment. Requires nl_after_brace_open=true.
nl_after_brace_open_cmt         = false    # true/false

# Whether to add a newline after a virtual brace open with a non-empty body.
# These occur in un-braced if/while/do/for statement bodies.
nl_after_vbrace_open            = false    # true/false

# Whether to add a newline after a virtual brace open with an empty body.
# These occur in un-braced if/while/do/for statement bodies.
nl_after_vbrace_open_empty      = false    # true/false

# Whether to add a newline after '}'. Does not apply if followed by a
# necessary ';'.
nl_after_brace_close            = false    # true/false

# Whether to add a newline after a virtual brace close,
# as in 'if (foo) a++; <here> return;'.
nl_after_vbrace_close           = false    # true/false

# Add or remove newline between the close brace and identifier,
# as in 'struct { int a; } <here> b;'. Affects enumerations, unions and
# structures. If set to ignore, uses nl_after_brace_close.
nl_brace_struct_var             = ignore   # ignore/add/remove/force

# Whether to add a newline before/after each '&&' or `||` on the same
# nesting level in a boolean expression if boolean expression will not
# fit on a line. code_width needs to be positive and pos_bool needs
# to be 'lead' or 'trail' for this option to have any effect.
nl_bool_expr_hierarchical       = false    # true/false

# Whether to alter newlines in '#define' macros.
nl_define_macro                 = false    # true/false

# Whether to alter newlines between consecutive parenthesis closes. The number
# of closing parentheses in a line will depend on respective open parenthesis
# lines.
nl_squeeze_paren_close          = false    # true/false

# Whether to remove blanks after '#ifxx' and '#elxx', or before '#elxx' and
# '#endif'. Does not affect top-level #ifdefs.
nl_squeeze_ifdef                = false    # true/false

# Makes the nl_squeeze_ifdef option affect the top-level #ifdefs as well.
nl_squeeze_ifdef_top_level      = false    # true/false

# Add or remove blank line before 'if'.
nl_before_if                    = ignore   # ignore/add/remove/force

# Add or remove blank line after 'if' statement. Add/Force work only if the
# next token is not a closing brace.
nl_after_if                     = ignore   # ignore/add/remove/force

# Add or remove blank line before 'for'.
nl_before_for                   = ignore   # ignore/add/remove/force

# Add or remove blank line after 'for' statement.
nl_after_for                    = ignore   # ignore/add/remove/force

# Add or remove blank line before 'while'.
nl_before_while                 = ignore   # ignore/add/remove/force

# Add or remove blank line after 'while' statement.
nl_after_while                  = ignore   # ignore/add/remove/force

# Add or remove blank line before 'switch'.
nl_before_switch                = ignore   # ignore/add/remove/force

# Add or remove blank line after 'switch' statement.
nl_after_switch                 = ignore   # ignore/add/remove/force

# Add or remove blank line before 'synchronized'.
nl_before_synchronized          = ignore   # ignore/add/remove/force

# Add or remove blank line after 'synchronized' statement.
nl_after_synchronized           = ignore   # ignore/add/remove/force

# Add or remove blank line before 'do'.
nl_before_do                    = ignore   # ignore/add/remove/force

# Add or remove blank line after 'do/while' statement.
nl_after_do                     = ignore   # ignore/add/remove/force

# Ignore nl_before_{if,for,switch,do,synchronized} if the control
# statement is immediately after a case statement.
# if nl_before_{if,for,switch,do} is set to remove, this option
# does nothing.
nl_before_ignore_after_case     = false    # true/false

# Whether to put a blank line before 'return' statements, unless after an open
# brace.
nl_before_return                = false    # true/false

# Whether to put a blank line after 'return' statements, unless followed by a
# close brace.
nl_after_return                 = false    # true/false

# Whether to put a blank line before a member '.' or '->' operators.
nl_before_member                = ignore   # ignore/add/remove/force

# (Java) Whether to put a blank line after a member '.' or '->' operators.
nl_after_member                 = ignore   # ignore/add/remove/force

# Whether to double-space commented-entries in 'struct'/'union'/'enum'.
nl_ds_struct_enum_cmt           = false    # true/false

# Whether to force a newline before '}' of a 'struct'/'union'/'enum'.
# (Lower priority than eat_blanks_before_close_brace.)
nl_ds_struct_enum_close_brace   = false    # true/false

# Add or remove newline before or after (depending on pos_class_colon) a class
# colon, as in 'class Foo <here> : <or here> public Bar'.
nl_class_colon                  = ignore   # ignore/add/remove/force

# Add or remove newline around a class constructor colon. The exact position
# depends on nl_constr_init_args, pos_constr_colon and pos_constr_comma.
nl_constr_colon                 = ignore   # ignore/add/remove/force

# Whether to collapse a two-line namespace, like 'namespace foo\n{ decl; }'
# into a single line. If true, prevents other brace newline rules from turning
# such code into four lines. If true, it also preserves one-liner namespaces.
nl_namespace_two_to_one_liner   = false    # true/false

# Whether to remove a newline in simple unbraced if statements, turning them
# into one-liners, as in 'if(b)\n i++;' => 'if(b) i++;'.
nl_create_if_one_liner          = false    # true/false

# Whether to remove a newline in simple unbraced for statements, turning them
# into one-liners, as in 'for (...)\n stmt;' => 'for (...) stmt;'.
nl_create_for_one_liner         = false    # true/false

# Whether to remove a newline in simple unbraced while statements, turning
# them into one-liners, as in 'while (expr)\n stmt;' => 'while (expr) stmt;'.
nl_create_while_one_liner       = false    # true/false

# Whether to collapse a function definition whose body (not counting braces)
# is only one line so that the entire definition (prototype, braces, body) is
# a single line.
nl_create_func_def_one_liner    = false    # true/false

# Whether to split one-line simple list definitions into three lines by
# adding newlines, as in 'int a[12] = { <here> 0 <here> };'.
nl_create_list_one_liner        = false    # true/false

# Whether to split one-line simple unbraced if statements into two lines by
# adding a newline, as in 'if(b) <here> i++;'.
nl_split_if_one_liner           = true    # true/false

# Whether to split one-line simple unbraced for statements into two lines by
# adding a newline, as in 'for (...) <here> stmt;'.
nl_split_for_one_liner          = true    # true/false

# Whether to split one-line simple unbraced while statements into two lines by
# adding a newline, as in 'while (expr) <here> stmt;'.
nl_split_while_one_liner        = true    # true/false

# Don't add a newline before a cpp-comment in a parameter list of a function
# call.
donot_add_nl_before_cpp_comment = false    # true/false

#
# Blank line options
#

# The maximum number of consecutive newlines (3 = 2 blank lines).
nl_max                          = 0        # unsigned number

# The maximum number of consecutive newlines in a function.
nl_max_blank_in_func            = 0        # unsigned number

# The number of newlines inside an empty function body.
# This option overrides eat_blanks_after_open_brace and
# eat_blanks_before_close_brace, but is ignored when
# nl_collapse_empty_body_functions=true
nl_inside_empty_func            = 0        # unsigned number

# The number of newlines before a function prototype.
nl_before_func_body_proto       = 0        # unsigned number

# The number of newlines before a multi-line function definition. Where
# applicable, this option is overridden with eat_blanks_after_open_brace=true
nl_before_func_body_def         = 3        # unsigned number

# The number of newlines before a class constructor/destructor prototype.
nl_before_func_class_proto      = 0        # unsigned number

# The number of newlines before a class constructor/destructor definition.
nl_before_func_class_def        = 0        # unsigned number

# The number of newlines after a function prototype.
nl_after_func_proto             = 0        # unsigned number

# The number of newlines after a function prototype, if not followed by
# another function prototype.
nl_after_func_proto_group       = 0        # unsigned number

# The number of newlines after a class constructor/destructor prototype.
nl_after_func_class_proto       = 0        # unsigned number

# The number of newlines after a class constructor/destructor prototype,
# if not followed by another constructor/destructor prototype.
nl_after_func_class_proto_group = 0        # unsigned number

# Whether one-line method definitions inside a class body should be treated
# as if they were prototypes for the purposes of adding newlines.
#
# Requires nl_class_leave_one_liners=true. Overrides nl_before_func_body_def
# and nl_before_func_class_def for one-liners.
nl_class_leave_one_liner_groups = false    # true/false

# The number of newlines after '}' of a multi-line function body.
#
# Overrides nl_min_after_func_body and nl_max_after_func_body.
nl_after_func_body              = 0        # unsigned number

# The minimum number of newlines after '}' of a multi-line function body.
#
# Only works when nl_after_func_body is 0.
nl_min_after_func_body          = 0        # unsigned number

# The maximum number of newlines after '}' of a multi-line function body.
#
# Only works when nl_after_func_body is 0.
# Takes precedence over nl_min_after_func_body.
nl_max_after_func_body          = 0        # unsigned number

# The number of newlines after '}' of a multi-line function body in a class
# declaration. Also affects class constructors/destructors.
#
# Overrides nl_after_func_body.
nl_after_func_body_class        = 0        # unsigned number

# The number of newlines after '}' of a single line function body. Also
# affects class constructors/destructors.
#
# Overrides nl_after_func_body and nl_after_func_body_class.
nl_after_func_body_one_liner    = 0        # unsigned number

# The number of newlines before a block of typedefs. If nl_after_access_spec
# is non-zero, that option takes precedence.
#
# 0: No change (default).
nl_typedef_blk_start            = 0        # unsigned number

# The number of newlines after a block of typedefs.
#
# 0: No change (default).
nl_typedef_blk_end              = 0        # unsigned number

# The maximum number of consecutive newlines within a block of typedefs.
#
# 0: No change (default).
nl_typedef_blk_in               = 0        # unsigned number

# The minimum number of blank lines after a block of variable definitions
# at the top of a function body. If any preprocessor directives appear
# between the opening brace of the function and the variable block, then
# it is considered as not at the top of the function.Newlines are added
# before trailing preprocessor directives, if any exist.
#
# 0: No change (default).
nl_var_def_blk_end_func_top     = 0        # unsigned number

# The minimum number of empty newlines before a block of variable definitions
# not at the top of a function body. If nl_after_access_spec is non-zero,
# that option takes precedence. Newlines are not added at the top of the
# file or just after an opening brace. Newlines are added above any
# preprocessor directives before the block.
#
# 0: No change (default).
nl_var_def_blk_start            = 0        # unsigned number

# The minimum number of empty newlines after a block of variable definitions
# not at the top of a function body. Newlines are not added if the block
# is at the bottom of the file or just before a preprocessor directive.
#
# 0: No change (default).
nl_var_def_blk_end              = 0        # unsigned number

# The maximum number of consecutive newlines within a block of variable
# definitions.
#
# 0: No change (default).
nl_var_def_blk_in               = 0        # unsigned number

# The minimum number of newlines before a multi-line comment.
# Doesn't apply if after a brace open or another multi-line comment.
nl_before_block_comment         = 0        # unsigned number

# The minimum number of newlines before a single-line C comment.
# Doesn't apply if after a brace open or other single-line C comments.
nl_before_c_comment             = 0        # unsigned number

# The minimum number of newlines before a CPP comment.
# Doesn't apply if after a brace open or other CPP comments.
nl_before_cpp_comment           = 0        # unsigned number

# Whether to force a newline after a multi-line comment.
nl_after_multiline_comment      = false    # true/false

# Whether to force a newline after a label's colon.
nl_after_label_colon            = false    # true/false

# The number of newlines before a struct definition.
nl_before_struct                = 0        # unsigned number

# The number of newlines after '}' or ';' of a struct/enum/union definition.
nl_after_struct                 = 0        # unsigned number

# The number of newlines before a class definition.
nl_before_class                 = 0        # unsigned number

# The number of newlines after '}' or ';' of a class definition.
nl_after_class                  = 0        # unsigned number

# The number of newlines before a namespace.
nl_before_namespace             = 0        # unsigned number

# The number of newlines after '{' of a namespace. This also adds newlines
# before the matching '}'.
#
# 0: Apply eat_blanks_after_open_brace or eat_blanks_before_close_brace if
#     applicable, otherwise no change.
#
# Overrides eat_blanks_after_open_brace and eat_blanks_before_close_brace.
nl_inside_namespace             = 0        # unsigned number

# The number of newlines after '}' of a namespace.
nl_after_namespace              = 0        # unsigned number

# The number of newlines before an access specifier label. This also includes
# the Qt-specific 'signals:' and 'slots:'. Will not change the newline count
# if after a brace open.
#
# 0: No change (default).
nl_before_access_spec           = 0        # unsigned number

# The number of newlines after an access specifier label. This also includes
# the Qt-specific 'signals:' and 'slots:'. Will not change the newline count
# if after a brace open.
#
# 0: No change (default).
#
# Overrides nl_typedef_blk_start and nl_var_def_blk_start.
nl_after_access_spec            = 0        # unsigned number

# The number of newlines between a function definition and the function
# comment, as in '// comment\n <here> void foo() {...}'.
#
# 0: No change (default).
nl_comment_func_def             = 0        # unsigned number

# The number of newlines after a try-catch-finally block that isn't followed
# by a brace close.
#
# 0: No change (default).
nl_after_try_catch_finally      = 0        # unsigned number

# (C#) The number of newlines before and after a property, indexer or event
# declaration.
#
# 0: No change (default).
nl_around_cs_property           = 0        # unsigned number

# (C#) The number of newlines between the get/set/add/remove handlers.
#
# 0: No change (default).
nl_between_get_set              = 0        # unsigned number

# (C#) Add or remove newline between property and the '{'.
nl_property_brace               = ignore   # ignore/add/remove/force

# Whether to remove blank lines after '{'.
eat_blanks_after_open_brace     = false    # true/false

# Whether to remove blank lines before '}'.
eat_blanks_before_close_brace   = false    # true/false

# How aggressively to remove extra newlines not in preprocessor.
#
# 0: No change (default)
# 1: Remove most newlines not handled by other config
# 2: Remove all newlines and reformat completely by config
nl_remove_extra_newlines        = 0        # unsigned number

# (Java) Add or remove newline after an annotation statement. Only affects
# annotations that are after a newline.
nl_after_annotation             = ignore   # ignore/add/remove/force

# (Java) Add or remove newline between two annotations.
nl_between_annotation           = ignore   # ignore/add/remove/force

# The number of newlines before a whole-file #ifdef.
#
# 0: No change (default).
nl_before_whole_file_ifdef      = 0        # unsigned number

# The number of newlines after a whole-file #ifdef.
#
# 0: No change (default).
nl_after_whole_file_ifdef       = 0        # unsigned number

# The number of newlines before a whole-file #endif.
#
# 0: No change (default).
nl_before_whole_file_endif      = 0        # unsigned number

# The number of newlines after a whole-file #endif.
#
# 0: No change (default).
nl_after_whole_file_endif       = 0        # unsigned number

#
# Positioning options
#

# The position of arithmetic operators in wrapped expressions.
pos_arith                       = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of assignment in wrapped expressions. Do not affect '='
# followed by '{'.
pos_assign                      = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of Boolean operators in wrapped expressions.
pos_bool                        = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of comparison operators in wrapped expressions.
pos_compare                     = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of conditional operators, as in the '?' and ':' of
# 'expr ? stmt : stmt', in wrapped expressions.
pos_conditional                 = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of the comma in wrapped expressions.
pos_comma                       = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of the comma in enum entries.
pos_enum_comma                  = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of the comma in the base class list if there is more than one
# line. Affects nl_class_init_args.
pos_class_comma                 = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of the comma in the constructor initialization list.
# Related to nl_constr_colon, nl_constr_init_args and pos_constr_colon.
pos_constr_comma                = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of trailing/leading class colon, between class and base class
# list. Affects nl_class_colon.
pos_class_colon                 = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of colons between constructor and member initialization.
# Related to nl_constr_colon, nl_constr_init_args and pos_constr_comma.
pos_constr_colon                = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

# The position of shift operators in wrapped expressions.
pos_shift                       = ignore   # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force

#
# Line splitting options
#

# Try to limit code width to N columns.
code_width                      = 0        # unsigned number

# Whether to fully split long 'for' statements at semi-colons.
ls_for_split_full               = false    # true/false

# Whether to fully split long function prototypes/calls at commas.
# The option ls_code_width has priority over the option ls_func_split_full.
ls_func_split_full              = false    # true/false

# Whether to split lines as close to code_width as possible and ignore some
# groupings.
# The option ls_code_width has priority over the option ls_func_split_full.
ls_code_width                   = false    # true/false

#
# Code alignment options (not left column spaces/tabs)
#

# Whether to keep non-indenting tabs.
align_keep_tabs                 = false    # true/false

# Whether to use tabs for aligning.
align_with_tabs                 = false    # true/false

# Whether to bump out to the next tab when aligning.
align_on_tabstop                = false    # true/false

# Whether to right-align numbers.
align_number_right              = false    # true/false

# Whether to keep whitespace not required for alignment.
align_keep_extra_space          = false    # true/false

# Whether to align variable definitions in prototypes and functions.
align_func_params               = false    # true/false

# The span for aligning parameter definitions in function on parameter name.
#
# 0: Don't align (default).
align_func_params_span          = 0        # unsigned number

# The threshold for aligning function parameter definitions.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_func_params_thresh        = 0        # number

# The gap for aligning function parameter definitions.
align_func_params_gap           = 0        # unsigned number

# The span for aligning constructor value.
#
# 0: Don't align (default).
align_constr_value_span         = 0        # unsigned number

# The threshold for aligning constructor value.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_constr_value_thresh       = 0        # number

# The gap for aligning constructor value.
align_constr_value_gap          = 0        # unsigned number

# Whether to align parameters in single-line functions that have the same
# name. The function names must already be aligned with each other.
align_same_func_call_params     = false    # true/false

# The span for aligning function-call parameters for single line functions.
#
# 0: Don't align (default).
align_same_func_call_params_span = 0        # unsigned number

# The threshold for aligning function-call parameters for single line
# functions.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_same_func_call_params_thresh = 0        # number

# The span for aligning variable definitions.
#
# 0: Don't align (default).
align_var_def_span              = 0        # unsigned number

# How to consider (or treat) the '*' in the alignment of variable definitions.
#
# 0: Part of the type     'void *   foo;' (default)
# 1: Part of the variable 'void     *foo;'
# 2: Dangling             'void    *foo;'
# Dangling: the '*' will not be taken into account when aligning.
align_var_def_star_style        = 0        # unsigned number

# How to consider (or treat) the '&' in the alignment of variable definitions.
#
# 0: Part of the type     'long &   foo;' (default)
# 1: Part of the variable 'long     &foo;'
# 2: Dangling             'long    &foo;'
# Dangling: the '&' will not be taken into account when aligning.
align_var_def_amp_style         = 0        # unsigned number

# The threshold for aligning variable definitions.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_var_def_thresh            = 0        # number

# The gap for aligning variable definitions.
align_var_def_gap               = 0        # unsigned number

# Whether to align the colon in struct bit fields.
align_var_def_colon             = false    # true/false

# The gap for aligning the colon in struct bit fields.
align_var_def_colon_gap         = 0        # unsigned number

# Whether to align any attribute after the variable name.
align_var_def_attribute         = false    # true/false

# Whether to align inline struct/enum/union variable definitions.
align_var_def_inline            = false    # true/false

# The span for aligning on '=' in assignments.
#
# 0: Don't align (default).
align_assign_span               = 0        # unsigned number

# The span for aligning on '=' in function prototype modifier.
#
# 0: Don't align (default).
align_assign_func_proto_span    = 0        # unsigned number

# The threshold for aligning on '=' in assignments.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_assign_thresh             = 0        # number

# Whether to align on the left most assignment when multiple
# definitions are found on the same line.
# Depends on 'align_assign_span' and 'align_assign_thresh' settings.
align_assign_on_multi_var_defs  = false    # true/false

# The span for aligning on '{' in braced init list.
#
# 0: Don't align (default).
align_braced_init_list_span     = 0        # unsigned number

# The threshold for aligning on '{' in braced init list.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_braced_init_list_thresh   = 0        # number

# How to apply align_assign_span to function declaration "assignments", i.e.
# 'virtual void foo() = 0' or '~foo() = {default|delete}'.
#
# 0: Align with other assignments (default)
# 1: Align with each other, ignoring regular assignments
# 2: Don't align
align_assign_decl_func          = 0        # unsigned number

# The span for aligning on '=' in enums.
#
# 0: Don't align (default).
align_enum_equ_span             = 0        # unsigned number

# The threshold for aligning on '=' in enums.
# Use a negative number for absolute thresholds.
#
# 0: no limit (default).
align_enum_equ_thresh           = 0        # number

# The span for aligning class member definitions.
#
# 0: Don't align (default).
align_var_class_span            = 0        # unsigned number

# The threshold for aligning class member definitions.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_var_class_thresh          = 0        # number

# The gap for aligning class member definitions.
align_var_class_gap             = 0        # unsigned number

# The span for aligning struct/union member definitions.
#
# 0: Don't align (default).
align_var_struct_span           = 0        # unsigned number

# The threshold for aligning struct/union member definitions.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_var_struct_thresh         = 0        # number

# The gap for aligning struct/union member definitions.
align_var_struct_gap            = 0        # unsigned number

# The span for aligning struct initializer values.
#
# 0: Don't align (default).
align_struct_init_span          = 0        # unsigned number

# The span for aligning single-line typedefs.
#
# 0: Don't align (default).
align_typedef_span              = 0        # unsigned number

# The minimum space between the type and the synonym of a typedef.
align_typedef_gap               = 0        # unsigned number

# How to align typedef'd functions with other typedefs.
#
# 0: Don't mix them at all (default)
# 1: Align the open parenthesis with the types
# 2: Align the function type name with the other type names
align_typedef_func              = 0        # unsigned number

# How to consider (or treat) the '*' in the alignment of typedefs.
#
# 0: Part of the typedef type, 'typedef int * pint;' (default)
# 1: Part of type name:        'typedef int   *pint;'
# 2: Dangling:                 'typedef int  *pint;'
# Dangling: the '*' will not be taken into account when aligning.
align_typedef_star_style        = 0        # unsigned number

# How to consider (or treat) the '&' in the alignment of typedefs.
#
# 0: Part of the typedef type, 'typedef int & intref;' (default)
# 1: Part of type name:        'typedef int   &intref;'
# 2: Dangling:                 'typedef int  &intref;'
# Dangling: the '&' will not be taken into account when aligning.
align_typedef_amp_style         = 0        # unsigned number

# The span for aligning comments that end lines.
#
# 0: Don't align (default).
align_right_cmt_span            = 0        # unsigned number

# Minimum number of columns between preceding text and a trailing comment in
# order for the comment to qualify for being aligned. Must be non-zero to have
# an effect.
align_right_cmt_gap             = 0        # unsigned number

# If aligning comments, whether to mix with comments after '}' and #endif with
# less than three spaces before the comment.
align_right_cmt_mix             = false    # true/false

# Whether to only align trailing comments that are at the same brace level.
align_right_cmt_same_level      = false    # true/false

# Minimum column at which to align trailing comments. Comments which are
# aligned beyond this column, but which can be aligned in a lesser column,
# may be "pulled in".
#
# 0: Ignore (default).
align_right_cmt_at_col          = 0        # unsigned number

# The span for aligning function prototypes.
#
# 0: Don't align (default).
align_func_proto_span           = 0        # unsigned number

# Whether to ignore continuation lines when evaluating the number of
# new lines for the function prototype alignment's span.
#
# false: continuation lines are part of the newlines count
# true:  continuation lines are not counted
align_func_proto_span_ignore_cont_lines = false    # true/false

# How to consider (or treat) the '*' in the alignment of function prototypes.
#
# 0: Part of the type     'void *   foo();' (default)
# 1: Part of the function 'void     *foo();'
# 2: Dangling             'void    *foo();'
# Dangling: the '*' will not be taken into account when aligning.
align_func_proto_star_style     = 0        # unsigned number

# How to consider (or treat) the '&' in the alignment of function prototypes.
#
# 0: Part of the type     'long &   foo();' (default)
# 1: Part of the function 'long     &foo();'
# 2: Dangling             'long    &foo();'
# Dangling: the '&' will not be taken into account when aligning.
align_func_proto_amp_style      = 0        # unsigned number

# The threshold for aligning function prototypes.
# Use a negative number for absolute thresholds.
#
# 0: No limit (default).
align_func_proto_thresh         = 0        # number

# Minimum gap between the return type and the function name.
align_func_proto_gap            = 0        # unsigned number

# Whether to align function prototypes on the 'operator' keyword instead of
# what follows.
align_on_operator               = false    # true/false

# Whether to mix aligning prototype and variable declarations. If true,
# align_var_def_XXX options are used instead of align_func_proto_XXX options.
align_mix_var_proto             = false    # true/false

# Whether to align single-line functions with function prototypes.
# Uses align_func_proto_span.
align_single_line_func          = false    # true/false

# Whether to align the open brace of single-line functions.
# Requires align_single_line_func=true. Uses align_func_proto_span.
align_single_line_brace         = false    # true/false

# Gap for align_single_line_brace.
align_single_line_brace_gap     = 0        # unsigned number

# (OC) The span for aligning Objective-C message specifications.
#
# 0: Don't align (default).
align_oc_msg_spec_span          = 0        # unsigned number

# Whether and how to align backslashes that split a macro onto multiple lines.
# This will not work right if the macro contains a multi-line comment.
#
# 0: Do nothing (default)
# 1: Align the backslashes in the column at the end of the longest line
# 2: Align with the backslash that is farthest to the left, or, if that
#    backslash is farther left than the end of the longest line, at the end of
#    the longest line
# 3: Align with the backslash that is farthest to the right
align_nl_cont                   = 0        # unsigned number

# The minimum number of spaces between the end of a line and its continuation
# backslash. Requires align_nl_cont.
#
# Default: 1
align_nl_cont_spaces            = 1        # unsigned number

# Whether to align macro functions and variables together.
align_pp_define_together        = false    # true/false

# The span for aligning on '#define' bodies.
#
# =0: Don't align (default)
# >0: Number of lines (including comments) between blocks
align_pp_define_span            = 0        # unsigned number

# The minimum space between label and value of a preprocessor define.
align_pp_define_gap             = 0        # unsigned number

# Whether to align lines that start with '<<' with previous '<<'.
#
# Default: true
align_left_shift                = true     # true/false

# Whether to align comma-separated statements following '<<' (as used to
# initialize Eigen matrices).
align_eigen_comma_init          = false    # true/false

# Whether to align text after 'asm volatile ()' colons.
align_asm_colon                 = false    # true/false

# (OC) Span for aligning parameters in an Objective-C message call
# on the ':'.
#
# 0: Don't align.
align_oc_msg_colon_span         = 0        # unsigned number

# (OC) Whether to always align with the first parameter, even if it is too
# short.
align_oc_msg_colon_first        = false    # true/false

# (OC) Whether to align parameters in an Objective-C '+' or '-' declaration
# on the ':'.
align_oc_decl_colon             = false    # true/false

# (OC) Whether to not align parameters in an Objectve-C message call if first
# colon is not on next line of the message call (the same way Xcode does
# alignment)
align_oc_msg_colon_xcode_like   = false    # true/false

#
# Comment modification options
#

# Try to wrap comments at N columns.
cmt_width                       = 0        # unsigned number

# How to reflow comments.
#
# 0: No reflowing (apart from the line wrapping due to cmt_width) (default)
# 1: No touching at all
# 2: Full reflow (enable cmt_indent_multi for indent with line wrapping due to cmt_width)
cmt_reflow_mode                 = 0        # unsigned number

# Path to a file that contains regular expressions describing patterns for
# which the end of one line and the beginning of the next will be folded into
# the same sentence or paragraph during full comment reflow. The regular
# expressions are described using ECMAScript syntax. The syntax for this
# specification is as follows, where "..." indicates the custom regular
# expression and "n" indicates the nth end_of_prev_line_regex and
# beg_of_next_line_regex regular expression pair:
#
# end_of_prev_line_regex[1] = "...$"
# beg_of_next_line_regex[1] = "^..."
# end_of_prev_line_regex[2] = "...$"
# beg_of_next_line_regex[2] = "^..."
#             .
#             .
#             .
# end_of_prev_line_regex[n] = "...$"
# beg_of_next_line_regex[n] = "^..."
#
# Note that use of this option overrides the default reflow fold regular
# expressions, which are internally defined as follows:
#
# end_of_prev_line_regex[1] = "[\w,\]\)]$"
# beg_of_next_line_regex[1] = "^[\w,\[\(]"
# end_of_prev_line_regex[2] = "\.$"
# beg_of_next_line_regex[2] = "^[A-Z]"
cmt_reflow_fold_regex_file      = ""         # string

# Whether to indent wrapped lines to the start of the encompassing paragraph
# during full comment reflow (cmt_reflow_mode = 2). Overrides the value
# specified by cmt_sp_after_star_cont.
#
# Note that cmt_align_doxygen_javadoc_tags overrides this option for
# paragraphs associated with javadoc tags
cmt_reflow_indent_to_paragraph_start = false    # true/false

# Whether to convert all tabs to spaces in comments. If false, tabs in
# comments are left alone, unless used for indenting.
cmt_convert_tab_to_spaces       = false    # true/false

# Whether to apply changes to multi-line comments, including cmt_width,
# keyword substitution and leading chars.
#
# Default: true
cmt_indent_multi                = false     # true/false

# Whether to align doxygen javadoc-style tags ('@param', '@return', etc.)
# and corresponding fields such that groups of consecutive block tags,
# parameter names, and descriptions align with one another. Overrides that
# which is specified by the cmt_sp_after_star_cont. If cmt_width > 0, it may
# be necessary to enable cmt_indent_multi and set cmt_reflow_mode = 2
# in order to achieve the desired alignment for line-wrapping.
cmt_align_doxygen_javadoc_tags  = false    # true/false

# The number of spaces to insert after the star and before doxygen
# javadoc-style tags (@param, @return, etc). Requires enabling
# cmt_align_doxygen_javadoc_tags. Overrides that which is specified by the
# cmt_sp_after_star_cont.
#
# Default: 1
cmt_sp_before_doxygen_javadoc_tags = 1        # unsigned number

# Whether to change trailing, single-line c-comments into cpp-comments.
cmt_trailing_single_line_c_to_cpp = false    # true/false

# Whether to group c-comments that look like they are in a block.
cmt_c_group                     = false    # true/false

# Whether to put an empty '/*' on the first line of the combined c-comment.
cmt_c_nl_start                  = false    # true/false

# Whether to add a newline before the closing '*/' of the combined c-comment.
cmt_c_nl_end                    = false    # true/false

# Whether to change cpp-comments into c-comments.
cmt_cpp_to_c                    = false    # true/false

# Whether to group cpp-comments that look like they are in a block. Only
# meaningful if cmt_cpp_to_c=true.
cmt_cpp_group                   = false    # true/false

# Whether to put an empty '/*' on the first line of the combined cpp-comment
# when converting to a c-comment.
#
# Requires cmt_cpp_to_c=true and cmt_cpp_group=true.
cmt_cpp_nl_start                = false    # true/false

# Whether to add a newline before the closing '*/' of the combined cpp-comment
# when converting to a c-comment.
#
# Requires cmt_cpp_to_c=true and cmt_cpp_group=true.
cmt_cpp_nl_end                  = false    # true/false

# Whether to put a star on subsequent comment lines.
cmt_star_cont                   = false    # true/false

# The number of spaces to insert at the start of subsequent comment lines.
cmt_sp_before_star_cont         = 0        # unsigned number

# The number of spaces to insert after the star on subsequent comment lines.
cmt_sp_after_star_cont          = 0        # unsigned number

# For multi-line comments with a '*' lead, remove leading spaces if the first
# and last lines of the comment are the same length.
#
# Default: true
cmt_multi_check_last            = true     # true/false

# For multi-line comments with a '*' lead, remove leading spaces if the first
# and last lines of the comment are the same length AND if the length is
# bigger as the first_len minimum.
#
# Default: 4
cmt_multi_first_len_minimum     = 4        # unsigned number

# Path to a file that contains text to insert at the beginning of a file if
# the file doesn't start with a C/C++ comment. If the inserted text contains
# '$(filename)', that will be replaced with the current file's name.
cmt_insert_file_header          = ""         # string

# Path to a file that contains text to insert at the end of a file if the
# file doesn't end with a C/C++ comment. If the inserted text contains
# '$(filename)', that will be replaced with the current file's name.
cmt_insert_file_footer          = ""         # string

# Path to a file that contains text to insert before a function definition if
# the function isn't preceded by a C/C++ comment. If the inserted text
# contains '$(function)', '$(javaparam)' or '$(fclass)', these will be
# replaced with, respectively, the name of the function, the javadoc '@param'
# and '@return' stuff, or the name of the class to which the member function
# belongs.
cmt_insert_func_header          = ""         # string

# Path to a file that contains text to insert before a class if the class
# isn't preceded by a C/C++ comment. If the inserted text contains '$(class)',
# that will be replaced with the class name.
cmt_insert_class_header         = ""         # string

# Path to a file that contains text to insert before an Objective-C message
# specification, if the method isn't preceded by a C/C++ comment. If the
# inserted text contains '$(message)' or '$(javaparam)', these will be
# replaced with, respectively, the name of the function, or the javadoc
# '@param' and '@return' stuff.
cmt_insert_oc_msg_header        = ""         # string

# Whether a comment should be inserted if a preprocessor is encountered when
# stepping backwards from a function name.
#
# Applies to cmt_insert_oc_msg_header, cmt_insert_func_header and
# cmt_insert_class_header.
cmt_insert_before_preproc       = false    # true/false

# Whether a comment should be inserted if a function is declared inline to a
# class definition.
#
# Applies to cmt_insert_func_header.
#
# Default: true
cmt_insert_before_inlines       = true     # true/false

# Whether a comment should be inserted if the function is a class constructor
# or destructor.
#
# Applies to cmt_insert_func_header.
cmt_insert_before_ctor_dtor     = false    # true/false

#
# Code modifying options (non-whitespace)
#

# Add or remove braces on a single-line 'do' statement.
mod_full_brace_do               = add   # ignore/add/remove/force

# Add or remove braces on a single-line 'for' statement.
mod_full_brace_for              = add   # ignore/add/remove/force

# (Pawn) Add or remove braces on a single-line function definition.
mod_full_brace_function         = ignore   # ignore/add/remove/force

# Add or remove braces on a single-line 'if' statement. Braces will not be
# removed if the braced statement contains an 'else'.
mod_full_brace_if               = add   # ignore/add/remove/force

# Whether to enforce that all blocks of an 'if'/'else if'/'else' chain either
# have, or do not have, braces. Overrides mod_full_brace_if.
#
# 0: Don't override mod_full_brace_if
# 1: Add braces to all blocks if any block needs braces and remove braces if
#    they can be removed from all blocks
# 2: Add braces to all blocks if any block already has braces, regardless of
#    whether it needs them
# 3: Add braces to all blocks if any block needs braces and remove braces if
#    they can be removed from all blocks, except if all blocks have braces
#    despite none needing them
mod_full_brace_if_chain         = 0        # unsigned number

# Whether to add braces to all blocks of an 'if'/'else if'/'else' chain.
# If true, mod_full_brace_if_chain will only remove braces from an 'if' that
# does not have an 'else if' or 'else'.
mod_full_brace_if_chain_only    = false    # true/false

# Add or remove braces on single-line 'while' statement.
mod_full_brace_while            = add   # ignore/add/remove/force

# Add or remove braces on single-line 'using ()' statement.
mod_full_brace_using            = ignore   # ignore/add/remove/force

# Don't remove braces around statements that span N newlines
mod_full_brace_nl               = 0        # unsigned number

# Whether to prevent removal of braces from 'if'/'for'/'while'/etc. blocks
# which span multiple lines.
#
# Affects:
#   mod_full_brace_for
#   mod_full_brace_if
#   mod_full_brace_if_chain
#   mod_full_brace_if_chain_only
#   mod_full_brace_while
#   mod_full_brace_using
#
# Does not affect:
#   mod_full_brace_do
#   mod_full_brace_function
mod_full_brace_nl_block_rem_mlcond = false    # true/false

# Add or remove unnecessary parentheses on 'return' statement.
mod_paren_on_return             = ignore   # ignore/add/remove/force

# Add or remove unnecessary parentheses on 'throw' statement.
mod_paren_on_throw              = ignore   # ignore/add/remove/force

# (Pawn) Whether to change optional semicolons to real semicolons.
mod_pawn_semicolon              = false    # true/false

# Whether to fully parenthesize Boolean expressions in 'while' and 'if'
# statement, as in 'if (a && b > c)' => 'if (a && (b > c))'.
mod_full_paren_if_bool          = false    # true/false

# Whether to fully parenthesize Boolean expressions after '='
# statement, as in 'x = a && b > c;' => 'x = (a && (b > c));'.
mod_full_paren_assign_bool      = false    # true/false

# Whether to fully parenthesize Boolean expressions after '='
# statement, as in 'return  a && b > c;' => 'return (a && (b > c));'.
mod_full_paren_return_bool      = false    # true/false

# Whether to remove superfluous semicolons.
mod_remove_extra_semicolon      = false    # true/false

# Whether to remove duplicate include.
mod_remove_duplicate_include    = false    # true/false

# the following options (mod_XX_closebrace_comment) use different comment,
# depending of the setting of the next option.
# false: Use the c comment (default)
# true : Use the cpp comment
mod_add_force_c_closebrace_comment = false    # true/false

# If a function body exceeds the specified number of newlines and doesn't have
# a comment after the close brace, a comment will be added.
mod_add_long_function_closebrace_comment = 0        # unsigned number

# If a namespace body exceeds the specified number of newlines and doesn't
# have a comment after the close brace, a comment will be added.
mod_add_long_namespace_closebrace_comment = 0        # unsigned number

# If a class body exceeds the specified number of newlines and doesn't have a
# comment after the close brace, a comment will be added.
mod_add_long_class_closebrace_comment = 0        # unsigned number

# If a switch body exceeds the specified number of newlines and doesn't have a
# comment after the close brace, a comment will be added.
mod_add_long_switch_closebrace_comment = 0        # unsigned number

# If an #ifdef body exceeds the specified number of newlines and doesn't have
# a comment after the #endif, a comment will be added.
mod_add_long_ifdef_endif_comment = 0        # unsigned number

# If an #ifdef or #else body exceeds the specified number of newlines and
# doesn't have a comment after the #else, a comment will be added.
mod_add_long_ifdef_else_comment = 0        # unsigned number

# Whether to take care of the case by the mod_sort_xx options.
mod_sort_case_sensitive         = false    # true/false

# Whether to sort consecutive single-line 'import' statements.
mod_sort_import                 = false    # true/false

# (C#) Whether to sort consecutive single-line 'using' statements.
mod_sort_using                  = false    # true/false

# Whether to sort consecutive single-line '#include' statements (C/C++) and
# '#import' statements (Objective-C). Be aware that this has the potential to
# break your code if your includes/imports have ordering dependencies.
mod_sort_include                = false    # true/false

# Whether to prioritize '#include' and '#import' statements that contain
# filename without extension when sorting is enabled.
mod_sort_incl_import_prioritize_filename = false    # true/false

# Whether to prioritize '#include' and '#import' statements that does not
# contain extensions when sorting is enabled.
mod_sort_incl_import_prioritize_extensionless = false    # true/false

# Whether to prioritize '#include' and '#import' statements that contain
# angle over quotes when sorting is enabled.
mod_sort_incl_import_prioritize_angle_over_quotes = false    # true/false

# Whether to ignore file extension in '#include' and '#import' statements
# for sorting comparison.
mod_sort_incl_import_ignore_extension = false    # true/false

# Whether to group '#include' and '#import' statements when sorting is enabled.
mod_sort_incl_import_grouping_enabled = false    # true/false

# Whether to move a 'break' that appears after a fully braced 'case' before
# the close brace, as in 'case X: { ... } break;' => 'case X: { ... break; }'.
mod_move_case_break             = false    # true/false

# Whether to move a 'return' that appears after a fully braced 'case' before
# the close brace, as in 'case X: { ... } return;' => 'case X: { ... return; }'.
mod_move_case_return            = false    # true/false

# Add or remove braces around a fully braced case statement. Will only remove
# braces if there are no variable declarations in the block.
mod_case_brace                  = ignore   # ignore/add/remove/force

# Whether to remove a void 'return;' that appears as the last statement in a
# function.
mod_remove_empty_return         = false    # true/false

# Add or remove the comma after the last value of an enumeration.
mod_enum_last_comma             = add   # ignore/add/remove/force

# Syntax to use for infinite loops.
#
# 0: Leave syntax alone (default)
# 1: Rewrite as `for(;;)`
# 2: Rewrite as `while(true)`
# 3: Rewrite as `do`...`while(true);`
# 4: Rewrite as `while(1)`
# 5: Rewrite as `do`...`while(1);`
#
# Infinite loops that do not already match one of these syntaxes are ignored.
# Other options that affect loop formatting will be applied after transforming
# the syntax.
mod_infinite_loop               = 0        # unsigned number

# Add or remove the 'int' keyword in 'int short'.
mod_int_short                   = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'short int'.
mod_short_int                   = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'int long'.
mod_int_long                    = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'long int'.
mod_long_int                    = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'int signed'.
mod_int_signed                  = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'signed int'.
mod_signed_int                  = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'int unsigned'.
mod_int_unsigned                = ignore   # ignore/add/remove/force

# Add or remove the 'int' keyword in 'unsigned int'.
mod_unsigned_int                = ignore   # ignore/add/remove/force

# If there is a situation where mod_int_* and mod_*_int would result in
# multiple int keywords, whether to keep the rightmost int (the default) or the
# leftmost int.
mod_int_prefer_int_on_left      = false    # true/false

# (OC) Whether to organize the properties. If true, properties will be
# rearranged according to the mod_sort_oc_property_*_weight factors.
mod_sort_oc_properties          = false    # true/false

# (OC) Weight of a class property modifier.
mod_sort_oc_property_class_weight = 0        # number

# (OC) Weight of 'atomic' and 'nonatomic'.
mod_sort_oc_property_thread_safe_weight = 0        # number

# (OC) Weight of 'readwrite' when organizing properties.
mod_sort_oc_property_readwrite_weight = 0        # number

# (OC) Weight of a reference type specifier ('retain', 'copy', 'assign',
# 'weak', 'strong') when organizing properties.
mod_sort_oc_property_reference_weight = 0        # number

# (OC) Weight of getter type ('getter=') when organizing properties.
mod_sort_oc_property_getter_weight = 0        # number

# (OC) Weight of setter type ('setter=') when organizing properties.
mod_sort_oc_property_setter_weight = 0        # number

# (OC) Weight of nullability type ('nullable', 'nonnull', 'null_unspecified',
# 'null_resettable') when organizing properties.
mod_sort_oc_property_nullability_weight = 0        # number

#
# Preprocessor options
#

# How to use tabs when indenting preprocessor code.
#
# -1: Use 'indent_with_tabs' setting (default)
#  0: Spaces only
#  1: Indent with tabs to brace level, align with spaces
#  2: Indent and align with tabs, using spaces when not on a tabstop
#
# Default: -1
pp_indent_with_tabs             = -1       # number

# Add or remove indentation of preprocessor directives inside #if blocks
# at brace level 0 (file-level).
pp_indent                       = remove   # ignore/add/remove/force

# Whether to indent #if/#else/#endif at the brace level. If false, these are
# indented from column 1.
pp_indent_at_level              = false    # true/false

# Whether to indent #if/#else/#endif at the parenthesis level if the brace
# level is 0. If false, these are indented from column 1.
pp_indent_at_level0             = false    # true/false

# Specifies the number of columns to indent preprocessors per level
# at brace level 0 (file-level). If pp_indent_at_level=false, also specifies
# the number of columns to indent preprocessors per level
# at brace level > 0 (function-level).
#
# Default: 1
pp_indent_count                 = 1        # unsigned number

# Add or remove space after # based on pp level of #if blocks.
pp_space_after                  = ignore   # ignore/add/remove/force

# Sets the number of spaces per level added with pp_space_after.
pp_space_count                  = 0        # unsigned number

# The indent for '#region' and '#endregion' in C# and '#pragma region' in
# C/C++. Negative values decrease indent down to the first column.
pp_indent_region                = 0        # number

# Whether to indent the code between #region and #endregion.
pp_region_indent_code           = false    # true/false

# If pp_indent_at_level=true, sets the indent for #if, #else and #endif when
# not at file-level. Negative values decrease indent down to the first column.
#
# =0: Indent preprocessors using output_tab_size
# >0: Column at which all preprocessors will be indented
pp_indent_if                    = 0        # number

# Whether to indent the code between #if, #else and #endif.
pp_if_indent_code               = false    # true/false

# Whether to indent the body of an #if that encompasses all the code in the file.
pp_indent_in_guard              = false    # true/false

# Whether to indent '#define' at the brace level. If false, these are
# indented from column 1.
pp_define_at_level              = false    # true/false

# Whether to indent '#include' at the brace level.
pp_include_at_level             = false    # true/false

# Whether to ignore the '#define' body while formatting.
pp_ignore_define_body           = false    # true/false

# An offset value that controls the indentation of the body of a multiline #define.
# 'body' refers to all the lines of a multiline #define except the first line.
# Requires 'pp_ignore_define_body = false'.
#
#  <0: Absolute column: the body indentation starts off at the specified column
#      (ex. -3 ==> the body is indented starting from column 3)
# >=0: Relative to the column of the '#' of '#define'
#      (ex.  3 ==> the body is indented starting 3 columns at the right of '#')
#
# Default: 8
pp_multiline_define_body_indent = 8        # number

# Whether to indent case statements between #if, #else, and #endif.
# Only applies to the indent of the preprocessor that the case statements
# directly inside of.
#
# Default: true
pp_indent_case                  = true     # true/false

# Whether to indent whole function definitions between #if, #else, and #endif.
# Only applies to the indent of the preprocessor that the function definition
# is directly inside of.
#
# Default: true
pp_indent_func_def              = true     # true/false

# Whether to indent extern C blocks between #if, #else, and #endif.
# Only applies to the indent of the preprocessor that the extern block is
# directly inside of.
#
# Default: true
pp_indent_extern                = true     # true/false

# How to indent braces directly inside #if, #else, and #endif.
# Requires pp_if_indent_code=true and only applies to the indent of the
# preprocessor that the braces are directly inside of.
#  0: No extra indent
#  1: Indent by one level
# -1: Preserve original indentation
#
# Default: 1
pp_indent_brace                 = 1        # number

# Action to perform when unbalanced #if and #else blocks are found.
# 0: do nothing
# 1: print a warning message
# 2: terminate the program with an error (EX_SOFTWARE)
#
# The action will be triggered in the following cases:
# - if an #ifdef block ends on a different indent level than
#   where it started from. Example:
#
#    #ifdef TEST
#      int i;
#      {
#        int j;
#    #endif
#
# - an #elif/#else block ends on a different indent level than
#   the corresponding #ifdef block. Example:
#
#    #ifdef TEST
#        int i;
#    #else
#        }
#      int j;
#    #endif
pp_unbalanced_if_action         = 0        # unsigned number

#
# Sort includes options
#

# The regex for include category with priority 0.
include_category_0              = ""         # string

# The regex for include category with priority 1.
include_category_1              = ""         # string

# The regex for include category with priority 2.
include_category_2              = ""         # string

#
# Use or Do not Use options
#

# true:  indent_func_call_param will be used (default)
# false: indent_func_call_param will NOT be used
#
# Default: true
use_indent_func_call_param      = true     # true/false

# The value of the indentation for a continuation line is calculated
# differently if the statement is:
# - a declaration: your case with QString fileName ...
# - an assignment: your case with pSettings = new QSettings( ...
#
# At the second case the indentation value might be used twice:
# - at the assignment
# - at the function call (if present)
#
# To prevent the double use of the indentation value, use this option with the
# value 'true'.
#
# true:  indent_continue will be used only once
# false: indent_continue will be used every time (default)
#
# Requires indent_ignore_first_continue=false.
use_indent_continue_only_once   = false    # true/false

# The indentation can be:
# - after the assignment, at the '[' character
# - at the beginning of the lambda body
#
# true:  indentation will be at the beginning of the lambda body
# false: indentation will be after the assignment (default)
indent_cpp_lambda_only_once     = false    # true/false

# Whether sp_after_angle takes precedence over sp_inside_fparen. This was the
# historic behavior, but is probably not the desired behavior, so this is off
# by default.
use_sp_after_angle_always       = false    # true/false

# Whether to apply special formatting for Qt SIGNAL/SLOT macros. Essentially,
# this tries to format these so that they match Qt's normalized form (i.e. the
# result of QMetaObject::normalizedSignature), which can slightly improve the
# performance of the QObject::connect call, rather than how they would
# otherwise be formatted.
#
# See options_for_QT.cpp for details.
#
# Default: true
use_options_overriding_for_qt_macros = true     # true/false

# If true: the form feed character is removed from the list of whitespace
# characters. See https://en.cppreference.com/w/cpp/string/byte/isspace.
use_form_feed_no_more_as_whitespace_character = false    # true/false

#
# Warn levels - 1: error, 2: warning (default), 3: note
#

# (C#) Warning is given if doing tab-to-\t replacement and we have found one
# in a C# verbatim string literal.
#
# Default: 2
warn_level_tabs_found_in_verbatim_string_literals = 2        # unsigned number

# Limit the number of loops.
# Used by uncrustify.cpp to exit from infinite loop.
# 0: no limit.
debug_max_number_of_loops       = 0        # number

# Set the number of the line to protocol;
# Used in the function prot_the_line if the 2. parameter is zero.
# 0: nothing protocol.
debug_line_number_to_protocol   = 0        # number

# Set the number of second(s) before terminating formatting the current file,
# 0: no timeout.
# only for linux
debug_timeout                   = 0        # number

# Set the number of characters to be printed if the text is too long,
# 0: do not truncate.
debug_truncate                  = 0        # unsigned number

# sort (or not) the tracking info.
#
# Default: true
debug_sort_the_tracks           = true     # true/false

# decode (or not) the flags as a new line.
# only if the -p option is set.
debug_decode_the_flags          = false    # true/false

# use (or not) the exit(EX_SOFTWARE) function.
#
# Default: true
debug_use_the_exit_function_pop = true     # true/false

# print (or not) the version in the file defined at the command option -o.
debug_print_version             = false    # true/false

# insert the number of the line at the beginning of each line
set_numbering_for_html_output   = false    # true/false

# Meaning of the settings:
#   Ignore - do not do any changes
#   Add    - makes sure there is 1 or more space/brace/newline/etc
#   Force  - makes sure there is exactly 1 space/brace/newline/etc,
#            behaves like Add in some contexts
#   Remove - removes space/brace/newline/etc
#
#
# - Token(s) can be treated as specific type(s) with the 'set' option:
#     `set tokenType tokenString [tokenString...]`
#
#     Example:
#       `set BOOL __AND__ __OR__`
#
#     tokenTypes are defined in src/token_enum.h, use them without the
#     'CT_' prefix: 'CT_BOOL' => 'BOOL'
#
#
# - Token(s) can be treated as type(s) with the 'type' option.
#     `type tokenString [tokenString...]`
#
#     Example:
#       `type int c_uint_8 Rectangle`
#
#     This can also be achieved with `set TYPE int c_uint_8 Rectangle`
#
#
# To embed whitespace in tokenStrings use the '\' escape character, or quote
# the tokenStrings. These quotes are supported: "'`
#
#
# - Support for the auto detection of languages through the file ending can be
#   added using the 'file_ext' command.
#     `file_ext langType langString [langString..]`
#
#     Example:
#       `file_ext CPP .ch .cxx .cpp.in`
#
#     langTypes are defined in uncrusify_types.h in the lang_flag_e enum, use
#     them without the 'LANG_' prefix: 'LANG_CPP' => 'CPP'
#
#
# - Custom macro-based indentation can be set up using 'macro-open',
#   'macro-else' and 'macro-close'.
#     `(macro-open | macro-else | macro-close) tokenString`
#
#     Example:
#       `macro-open  BEGIN_TEMPLATE_MESSAGE_MAP`
#       `macro-open  BEGIN_MESSAGE_MAP`
#       `macro-close END_MESSAGE_MAP`
#
#
# option(s) with 'not default' value: 0
#


================================================
FILE: CITATION.cff
================================================
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Light"
  given-names: "Roger A."
  orcid: "https://orcid.org/0000-0001-9218-7797"
title: "My Research Software"
version: 2.0.21
doi: 10.21105/joss.00265
url: "https://github.com/eclise-mosquitto/mosquitto"
preferred-citation:
  type: article
  authors:
  - family-names: "Light"
    given-names: "Roger A."
    orcid: "https://orcid.org/0000-0001-9218-7797"
  doi: "10.21105/joss.00265"
  journal: "Journal of Open Source Software"
  start: 265
  title: "Mosquitto: server and client implementation of the MQTT protocol"
  issue: 13
  volume: 2
  year: 2017


================================================
FILE: CMakeLists.txt
================================================
# This is a cmake script. Process it with the CMake gui or command line utility
# to produce makefiles / Visual Studio project files on Mac OS X and Windows.
#
# To configure the build options either use the CMake gui, or run the command
# line utility including the "-i" option.

cmake_minimum_required(VERSION 3.18)

set (VERSION 2.1.2)
project(mosquitto
	VERSION ${VERSION}
	DESCRIPTION "Eclipse Mosquitto"
	LANGUAGES C
)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")

add_definitions (-DCMAKE -DVERSION=\"${VERSION}\")

if(WIN32)
	add_definitions("-D_CRT_SECURE_NO_WARNINGS")
	add_definitions("-D_CRT_NONSTDC_NO_DEPRECATE")
endif()

if(APPLE)
	set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -undefined dynamic_lookup")
endif()

add_library(common-options INTERFACE)
if(NOT WIN32)
	target_compile_options(common-options INTERFACE -Wall -Wextra -Wconversion)
endif()

include(CMakePushCheckState)
include(CheckIncludeFiles)
include(CheckLibraryExists)
include(CheckSourceCompiles)
include(GNUInstallDirs)
include(CMakePushCheckState)
include(CheckSourceCompiles)

option(WITH_BUNDLED_DEPS "Build with bundled dependencies?" ON)
option(WITH_LIB_CPP "Build C++ library?" ON)
option(WITH_TLS "Include SSL/TLS support?" ON)
option(WITH_TLS_PSK "Include TLS-PSK support (requires WITH_TLS)?" ON)
option(WITH_TESTS "Enable tests" ON)
option(INC_MEMTRACK "Include memory tracking support?" ON)

if (WITH_LIB_CPP OR WITH_TESTS)
	ENABLE_LANGUAGE(CXX)
endif()

if (WITH_TLS)
	find_package(OpenSSL REQUIRED)
	add_definitions("-DWITH_TLS")

	# mosquitto uses OpenSSL 1.1 API, so set OPENSSL_API_COMPAT accordingly:
	# https://www.openssl.org/docs/manmaster/man7/OPENSSL_API_COMPAT.html
	# TODO: migrate off ENGINE API (deprecated since OpenSSL 3.0), see:
	#       https://www.openssl.org/docs/manmaster/man7/migration_guide.html#Engines-and-METHOD-APIs
	add_definitions("-DOPENSSL_API_COMPAT=0x10100000L")

	if (WITH_TLS_PSK)
		add_definitions("-DWITH_TLS_PSK")
	endif (WITH_TLS_PSK)
else()
	set (OPENSSL_INCLUDE_DIR "")
endif()

option(WITH_UNIX_SOCKETS "Include Unix Domain Socket support?" ON)
if(WITH_UNIX_SOCKETS)
	add_definitions("-DWITH_UNIX_SOCKETS")
endif()

option(WITH_SOCKS "Include SOCKS5 support?" ON)
if(WITH_SOCKS)
	add_definitions("-DWITH_SOCKS")
endif()

option(WITH_WEBSOCKETS "Include websockets support?" ON)
option(WITH_WEBSOCKETS_BUILTIN "Websockets support uses builtin library? Set OFF to use libwebsockets" ON)

if(WITH_WEBSOCKETS AND NOT WITH_TLS)
	message(FATAL_ERROR "WITH_WEBSOCKETS support requires WITH_TLS.")
endif()
option(WITH_SRV "Include SRV lookup support?" OFF)
option(WITH_STATIC_LIBRARIES "Build static versions of the libmosquitto/pp libraries?" OFF)
option(WITH_PIC "Build the static library with PIC (Position Independent Code) enabled archives?" OFF)

option(WITH_THREADING "Include threading support?" ON)
if(WITH_THREADING)
	add_definitions("-DWITH_THREADING")
	if(WIN32)
		find_package(PThreads4W REQUIRED)
	endif()
endif()

option(WITH_DLT "Include DLT support?" OFF)
message(STATUS "WITH_DLT = ${WITH_DLT}")
if(WITH_DLT)
	find_package(PkgConfig)
	pkg_check_modules(DLT "automotive-dlt >= 2.11" REQUIRED)
endif()

find_package(cJSON REQUIRED)
find_package(argon2)

option(WITH_CTRL_SHELL "Include mosquitto_ctrl interactive shell support?" ON)
if(WITH_CTRL_SHELL)
	find_package(LineEditing)
endif()
if(ARGON2_FOUND)
	# Disable until separate password handling thread is implemented
	#add_definitions("-DWITH_ARGON2")
endif()

option(WITH_LTO "Build with link time optimizations (IPO) / interprocedural optimization (IPO) enabled." ON)
if(WITH_LTO)
	include(CheckIPOSupported)
	check_ipo_supported(RESULT is_ipo_supported OUTPUT output)
	if(is_ipo_supported)
		set_property(TARGET common-options PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
	else()
		message(WARNING "LTO/IPO is not supported: ${output}")
	endif()
endif()

# ========================================
# Include projects
# ========================================

option(WITH_CLIENTS "Build clients?" ON)
option(WITH_BROKER "Build broker?" ON)
option(WITH_APPS "Build apps?" ON)
option(WITH_PLUGINS "Build plugins?" ON)
option(WITH_DOCS "Build documentation?" ON)

target_sources(common-options INTERFACE config.h)
target_include_directories(common-options
	INTERFACE
		${mosquitto_SOURCE_DIR}
		${mosquitto_SOURCE_DIR}/include
)

if(WITH_TLS)
	target_include_directories(common-options
		INTERFACE
			"${OPENSSL_INCLUDE_DIR}"
	)
endif()

if(WITH_BUNDLED_DEPS)
	target_include_directories(common-options
		INTERFACE
			"${mosquitto_SOURCE_DIR}/deps"
	)
endif()


add_subdirectory(libcommon)
add_subdirectory(lib)
if(WITH_CLIENTS)
	add_subdirectory(client)
endif()

if(WITH_BROKER)
	add_subdirectory(src)
endif()

if(WITH_APPS)
	add_subdirectory(apps)
endif()

if(WITH_PLUGINS)
	add_subdirectory(plugins)
endif()

if(WITH_DOCS)
	add_subdirectory(man)
endif()

# ========================================
# Install config file
# ========================================

if(WITH_BROKER)
	install(FILES mosquitto.conf RENAME mosquitto.conf.example DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/mosquitto")
	install(FILES aclfile.example pskfile.example pwfile.example DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/mosquitto")
endif()

# ========================================
# Install pkg-config files
# ========================================

configure_file(libmosquitto.pc.in libmosquitto.pc @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libmosquitto.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
configure_file(libmosquittopp.pc.in libmosquittopp.pc @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libmosquittopp.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

# ========================================
# Install headers
# ========================================
install(
	FILES
	${mosquitto_SOURCE_DIR}/include/mosquitto.h
	${mosquitto_SOURCE_DIR}/include/mosquitto_broker.h
	${mosquitto_SOURCE_DIR}/include/mosquitto_plugin.h
	${mosquitto_SOURCE_DIR}/include/mosquittopp.h
	${mosquitto_SOURCE_DIR}/include/mqtt_protocol.h
	DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
install(
	FILES
	${mosquitto_SOURCE_DIR}/include/mosquitto/broker.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/broker_control.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/broker_plugin.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/defs.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_base64.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_cjson.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_file.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_memory.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_password.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_properties.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_random.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_string.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_time.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_topic.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libcommon_utf8.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_auth.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_callbacks.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_connect.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_create_delete.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_helpers.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_loop.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_message.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_options.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_publish.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_socks.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_subscribe.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_tls.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_unsubscribe.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquitto_will.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/libmosquittopp.h
	${mosquitto_SOURCE_DIR}/include/mosquitto/mqtt_protocol.h
	DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mosquitto"
)

# ========================================
# Testing
# ========================================
if(WITH_TESTS)
	find_package(GTest REQUIRED)
	include(GoogleTest)
	enable_testing()
	add_subdirectory(test)
endif()


================================================
FILE: CONTRIBUTING.md
================================================
Contributing to Mosquitto
=========================

Thank you for your interest in this project.

Project description:
--------------------

The Mosquitto project has been created to provide a light weight, open-source
implementation, of an MQTT broker to allow new, existing, and emerging
applications for Machine-to-Machine (M2M) and Internet of Things (IoT).

- <https://mosquitto.org/>
- <https://projects.eclipse.org/projects/iot.mosquitto>


Source
------

The Mosquitto code is stored in a git repository.

- https://github.com/eclipse/mosquitto

You can contribute bugfixes and new features by sending pull requests through GitHub.


## Legal

In order for your contribution to be accepted, it must comply with the Eclipse
Foundation IP policy.

Please read the [Eclipse Foundation policy on accepting contributions via Git](http://wiki.eclipse.org/Development_Resources/Contributing_via_Git).

1. Sign the [Eclipse ECA](http://www.eclipse.org/legal/ECA.php)
    1. Register for an Eclipse Foundation User ID. You can register [here](https://accounts.eclipse.org/user/register).
    2. Log into the [Accounts Portal](https://accounts.eclipse.org/), and click on the '[Eclipse Contributor Agreement](https://accounts.eclipse.org/user/eca)' link.
2. Go to your [account settings](https://accounts.eclipse.org/user/edit) and add your GitHub username to your account.
3. Make sure that you _sign-off_ your Git commits in the following format:
  ``` Signed-off-by: John Smith <johnsmith@nowhere.com> ``` This is usually at the bottom of the commit message. You can automate this by adding the '-s' flag when you make the commits. e.g.   ```git commit -s -m "Adding a cool feature"```
4. Ensure that the email address that you make your commits with is the same one you used to sign up to the Eclipse Foundation website with.

## Contributing a change

1. [Fork the repository on GitHub](https://github.com/eclipse/mosquitto/fork)
2. Clone the forked repository onto your computer: ``` git clone
   https://github.com/<your username>/mosquitto.git ```
3. If you are adding a new feature, then create a new branch from the latest
   ```develop``` branch with ```git checkout -b YOUR_BRANCH_NAME
   origin/develop```
4. If you are fixing a bug, then create a new branch from the latest
   ```fixes``` branch with ```git checkout -b YOUR_BRANCH_NAME origin/fixes```
5. Make your changes
6. Ensure that all new and existing tests pass.
7. Commit the changes into the branch: ``` git commit -s ``` Make sure that
   your commit message is meaningful and describes your changes correctly.
8. If you have a lot of commits for the change, squash them into a single / few
   commits.
9. Push the changes in your branch to your forked repository.
10. Finally, go to
	[https://github.com/eclipse/mosquitto](https://github.com/eclipse/mosquitto)
	and create a pull request from your "YOUR_BRANCH_NAME" branch to the
	```develop``` or ```fixes``` branch as appropriate to request review and
	merge of the commits in your pushed branch.


What happens next depends on the content of the patch. If it is 100% authored
by the contributor and is less than 1000 lines (and meets the needs of the
project), then it can be pulled into the main repository. If not, more steps
are required. These are detailed in the
[legal process poster](http://www.eclipse.org/legal/EclipseLegalProcessPoster.pdf).



Contact:
--------

Contact the project developers via the project's development
[mailing list](https://dev.eclipse.org/mailman/listinfo/mosquitto-dev).

Search for bugs:
----------------

This project uses [Github](https://github.com/eclipse/mosquitto/issues)
to track ongoing development and issues.

Create a new bug:
-----------------

Be sure to search for existing bugs before you create another one. Remember
that contributions are always welcome!

- [Create new Mosquitto bug](https://github.com/eclipse/mosquitto/issues)


================================================
FILE: ChangeLog.txt
================================================
2.1.3 - 2026-02-xx
==================

# Broker
- Fix MOSQ_EVT_DISCONNECT being called before MOSQ_EVT_ACL_CHECK for the will
  of that client. Closes #3487.
- Fix password length not being passed to MOSQ_EVT_BASIC_AUTH events.
  Closes #3490.
- Fix incorrect maximum-packet-size restriction for outgoing packets.
  Closes #3503.
- Fix incorrect maximum-packet-size restriction for incoming packets.
  Closes #3515.
- Fix will messages being incorrectly delayed if a client set
  session-expiry-interval=0 when using will-delay-interval>0. Closes #3505.

# Common lib:
- Fix potential crash if reading a file in restricted mode and the group id
  does not have an entry in /etc/groups. Closes #3498.
- Fix missing SONAME. Closes #3483.

# Lib
- Fix mosquitto_loop_start() leaving the mosq struct in an invalid state if
  thread creation fails. Closes #3496.

# Plugins
- Fix migrate_to_persist_sqlite.py not base64 decoding message payloads when
  migrating. Closes #3492.

# Build:
- Fix test when nbuilding with WITH_EDITLINE=no. Closes #3484.
- Fix tests when building with WITH_WEBSOCKETS=no. Closes #3502.
- Fix libmosquitto_static cmake build.
- Enable WITH_UNIX_SOCKETS on Windows.


2.1.2 - 2026-02-09
==================

# Broker
- Forbid running with `persistence true` and with a persistence plugin at the
  same time.

# Build
- Build fixes for OpenBSD. Closes #3474.
- Add missing libedit to docker builds. Closes #3476.
- Fix static/shared linking of libwebsockets under cmake.


2.1.1 - 2026-02-04
==================

# Broker

- Fix PUID/PGID checking for docker
- Add MOSQUITTO_UNSAFE_ALLOW_SYMLINKS environment variable to allow the
  restrictions on reading files through symlinks to be lifted in safe
  environments like kubernetes. Closes #3461.
- Fix inconsistent disconnect log message format, and add address:port.
- Fix `plugin`/`global_plugin` option not allowing space characters.
- Fix $SYS load values not being published initially. Closes #3459.
- Fix max_connections not being honoured on libwebsockets listeners. This does
  not affect the built-in websockets support. Closes #3455.
- Don't enforce receive-maximum, just log a warning. This allows badly
  behaving clients to be fixed. Closes #3471.

# Plugins
- Fix incorrect linking of libmosquitto_common.so for the acl and password
  file plugins. Closes #3460.

# Build
- Fix building with WITH_TLS=no


2.1.0 - 2026-01-29
==================

# Broker

## Deprecations
- The acl_file option is deprecated in favour of the acl-file plugin, which is
  the same code but moved into a plugin. The acl_file option will be removed
  in 3.0.
- The password_file option is deprecated in favour of the password-file plugin,
  which is the same code but moved into a plugin. The password_file option will
  be removed in 3.0.
- The per_listener_settings option is deprecated in favour of the new listener
  specific options. The per_listener_settings option will be removed in 3.0.

## Behaviour changes

- max_packet_size now defaults to 2,000,000 bytes instead of the 256MB MQTT
  limit. If you are using payloads that will result in a packet larger than
  this, you need to manually set the option to a value that suits your
  application.
- acl_file and password_file will produce an error on invalid input when
  reloading the config, causing the broker to quit.

## Protocol related
- Add support for broker created topic aliases. Topics are allocated on a
  first come first serve basis.
- Add support for bridges to allow remote brokers to create topic aliases when
  running in MQTT v5 mode.
- Enforce receive maximum on MQTT v5.
- Return protocol error if a client attemps to subscribe to a shared
  subscription and also sets no-local.
- Protocol version numbers reported in the log when a client connects now
  match the MQTT protocol version numbers, not internal Mosquitto values.
- Send DISCONNECT With session-takeover return code to MQTT v5 clients when a
  client connects with the same client id. Closes #2340.
- The `allow_duplicate_messages` now defaults to `true`.
- Add `accept_protocol_versions` option to allow limiting which MQTT protocol
  versions are allowed for a particular listener.

## TLS related
- Add `--tls-keylog` option which can be used to generate a file that can be
  used by wireshark to decrypt TLS traffic for debugging purposes. Closes #1818.
- Add `disable_client_cert_date_checks` option to allow expired client
  certificate to be considered valid.
- Add `bridge_tls_use_os_certs` option to allow bridges to be easily configured
  to trust default CA certificates. Closes #2473.
- Remove support for TLS v1.1 (clients only - it remains available in the
  broker but is now undocumented)
- Use openssl provided function for x509 certificate hostname verification,
  rather than own function.

## Bridge related
- Add `bridge_receive_maximum` option for MQTT v5.0 bridges.
- Add `bridge_session_expiry_interval` option for MQTT v5.0 bridges.
- Bridge reconnection backoff improvements.

## Transport related
- Add the `websockets_origin` option to allow optional enforcement of origin
  when a connection attempts an upgrade to WebSockets.
- Add built-in websockets support that doesn't use libwebsockets. This is the
  preferred websockets implementation.
- Add support for X-Forwarded-For header for built in websockets.
- Add suport for PROXY protocol v1 and v2.

## Platform specific
- Increase maximum connection count on Windows from 2048 to 8192 where
  supported. Closes #2122.
- Allow multiple instances of mosquitto to run as services on Windows. See
  README-windows.txt.
- Add kqueue support.
- Add support for systemd watchdog.

## General
- Report on what compile time options are enabled. Closes #2193.
- Performance: reduce memory allocations when sending packets.
- Log protocol version and ciphers that a client negotiates when connecting.
- Password salts are now 64 bytes long.
- Add the `global_plugin` option, which gives global plugin loaded regardless
  of `per_listener_settings`.
- Add `global_max_clients` option to allow limiting client sessions globally
  on the broker.
- Add `global_max_connections` option to allow limiting client connections globally
  on the broker.
- Improve idle performance. The broker now calculates when the next event of
  interest is, and uses that as the timeout for e.g. `epoll_wait()`. This can
  reduce the number of process wakeups by 100x on an idle broker.
- Add more efficient keepalive check.
- Add support for sending the SIGRTMIN signal to trigger log rotation.
  Closes #2337.
- Add `--test-config` option which can be used to test a configuration file
  before trying to use it in a live broker. Closes #2521.
- Add support for PUID/PGID environment variables for setting the user/group
  to drop privileges to. Closes #2441.
- Report persistence stats when starting.
- $SYS updates are now aligned to `sys_interval` seconds, meaning that if set
  to 10, for example, updates will be sent at times matching x0 seconds.
  Previously update intervals were aligned to the time the broker was started.
- Add `log_dest android` for logging to the Android logd daemon.
- Fix some retained topic memory not being cleared immediately after used.
- Add -q option to allow logging to be disabled at the command line.
- Log message if a client attempts to connect with TLS to a non-TLS listener.
- Add `listener_allow_anonymous` option.
- Add `listener_auto_id_prefix` option.
- Allow seconds when defining `persistent_client_expiration`.

## Plugin interface
- Add `mosquitto_topic_matches_sub_with_pattern()`, which can match against
  subscriptions with `%c` and `%u` patterns for client id / username
  substitution.
- Add support for modifying outgoing messages using `MOSQ_EVT_MESSAGE_OUT`.
- Add `mosquitto_client()` function for retrieving a client struct if that
  client is connected.
- Add `MOSQ_ERR_PLUGIN_IGNORE` to allow plugins to register basic auth or acl
  check callbacks, but still act as though they are not registered. A plugin
  that wanted to act as a blocklist for certain usernames, but wasn't carrying
  out authentication could return `MOSQ_ERR_PLUGIN_IGNORE` for usernames not on
  its blocklist. If no other plugins were configured, the client would be
  authenticated. Using `MOSQ_ERR_PLUGIN_DEFER` instead would mean the clients
  would be denied if no other plugins were configured.
- Add `mosquitto_client_port()` function for plugins.
- Add `MOSQ_EVT_CONNECT`, to allow plugins to know when a client has
  successfully authenticated to the broker.
- Add connection-state example plugin to demonstrate `MOSQ_EVT_CONNECT`.
- Add `MOSQ_EVT_CLIENT_OFFLINE`, to allow plugins to know when a client with a
  non-zero session expiry interval has gone offline.
- Plugins on non-Windows platforms now no longer make their symbols globally
  available, which means they are self contained.
- Add support for delayed basic authentication in plugins.
- Plugins using the `MOSQ_EVT_MESSAGE_WRITE` callback can now return
  `MOSQ_ERR_QUOTA_EXCEEDED` to have the messag
Download .txt
gitextract_o5h0yyj5/

├── .editorconfig
├── .github/
│   ├── issue_template.md
│   ├── labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── build-variants.yml
│       ├── cifuzz.yml
│       ├── codeql-analysis.yml
│       ├── coverage.yml
│       ├── coverity-scan-develop.yml
│       ├── coverity-scan-fixes.yml
│       ├── delete-old-workflow-runs.yml
│       ├── issue-labler.yml
│       ├── lock.yml
│       ├── macos.yml
│       ├── mosquitto-cmake.yml
│       ├── mosquitto-make-asan.yml
│       ├── mosquitto-make.yml
│       ├── windows-x86.yml
│       └── windows.yml
├── .gitignore
├── .uncrustify.cfg
├── CITATION.cff
├── CMakeLists.txt
├── CONTRIBUTING.md
├── ChangeLog.txt
├── LICENSE.txt
├── Makefile
├── NOTICE.md
├── README-compiling.md
├── README-letsencrypt.md
├── README-tests.md
├── README-windows.txt
├── README.md
├── SECURITY.md
├── THANKS.txt
├── about.html
├── aclfile.example
├── apps/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── db_dump/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── db_dump.c
│   │   ├── db_dump.h
│   │   ├── json.c
│   │   ├── print.c
│   │   └── stubs.c
│   ├── mosquitto_ctrl/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── broker.c
│   │   ├── client.c
│   │   ├── ctrl_shell.c
│   │   ├── ctrl_shell.h
│   │   ├── ctrl_shell_broker.c
│   │   ├── ctrl_shell_client.c
│   │   ├── ctrl_shell_completion_tree.c
│   │   ├── ctrl_shell_dynsec.c
│   │   ├── ctrl_shell_internal.h
│   │   ├── ctrl_shell_io.c
│   │   ├── ctrl_shell_post_connect.c
│   │   ├── ctrl_shell_pre_connect.c
│   │   ├── ctrl_shell_printf.c
│   │   ├── dynsec.c
│   │   ├── dynsec_client.c
│   │   ├── dynsec_group.c
│   │   ├── dynsec_role.c
│   │   ├── example.c
│   │   ├── mosquitto_ctrl.c
│   │   ├── mosquitto_ctrl.h
│   │   ├── options.c
│   │   └── test/
│   │       └── Makefile
│   ├── mosquitto_passwd/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── get_password.c
│   │   ├── get_password.h
│   │   └── mosquitto_passwd.c
│   └── mosquitto_signal/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── mosquitto_signal.c
│       ├── mosquitto_signal.h
│       ├── signal_unix.c
│       └── signal_windows.c
├── buildtest.py
├── client/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── args.txt
│   ├── client_props.c
│   ├── client_shared.c
│   ├── client_shared.h
│   ├── pub_client.c
│   ├── pub_shared.c
│   ├── pub_shared.h
│   ├── pub_test_properties
│   ├── rr_client.c
│   ├── sub_client.c
│   ├── sub_client_output.c
│   ├── sub_client_output.h
│   ├── sub_test_fixed_width
│   └── sub_test_properties
├── cmake/
│   ├── FindCUnit.cmake
│   ├── FindLineEditing.cmake
│   ├── Findargon2.cmake
│   └── FindcJSON.cmake
├── codecov.yml
├── common/
│   ├── json_help.c
│   ├── json_help.h
│   └── lib_load.h
├── config.h
├── config.mk
├── dashboard/
│   ├── README.md
│   └── src/
│       ├── app/
│       │   ├── consts.js
│       │   ├── dashboard.js
│       │   ├── index.js
│       │   ├── listeners.js
│       │   └── sidebar.js
│       ├── css/
│       │   └── styles.css
│       ├── index.html
│       ├── lib/
│       │   └── chart.umd.js
│       ├── listeners.html
│       ├── tailwind/
│       │   └── styles.css
│       ├── tailwind.config.js
│       └── utils/
│           ├── assert.js
│           ├── queue.js
│           └── utils.js
├── deps/
│   ├── picohttpparser/
│   │   ├── README.md
│   │   ├── picohttpparser.c
│   │   └── picohttpparser.h
│   ├── uthash.h
│   └── utlist.h
├── doc/
│   ├── historical/
│   │   ├── old-regex.txt
│   │   └── topic-match.kds
│   └── joss-paper/
│       ├── codemeta.json
│       ├── paper.bib
│       └── paper.md
├── docker/
│   ├── 1.6-openssl/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   └── docker-entrypoint.sh
│   ├── 2.0-openssl/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto-no-auth.conf
│   ├── 2.1-alpine/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto.conf
│   ├── 2.1-ubuntu/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto.conf
│   ├── README.md
│   ├── generic/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── docker-entrypoint.sh
│   │   └── mosquitto-no-auth.conf
│   └── local/
│       ├── Dockerfile
│       ├── README.md
│       ├── docker-entrypoint.sh
│       └── mosquitto.conf
├── edl-v10
├── epl-v20
├── examples/
│   ├── mysql_log/
│   │   ├── Makefile
│   │   └── mysql_log.c
│   ├── publish/
│   │   ├── Makefile
│   │   ├── basic-1.c
│   │   └── basic-websockets-1.c
│   ├── subscribe/
│   │   └── basic-1.c
│   ├── subscribe_simple/
│   │   ├── Makefile
│   │   ├── callback.c
│   │   ├── multiple.c
│   │   └── single.c
│   └── temperature_conversion/
│       ├── Makefile
│       ├── main.cpp
│       ├── readme.txt
│       ├── temperature_conversion.cpp
│       └── temperature_conversion.h
├── format.sh
├── fuzzing/
│   ├── Makefile
│   ├── apps/
│   │   ├── Makefile
│   │   ├── db_dump/
│   │   │   ├── Makefile
│   │   │   ├── db_dump_fuzz_load.cpp
│   │   │   ├── db_dump_fuzz_load_client_stats.cpp
│   │   │   └── db_dump_fuzz_load_stats.cpp
│   │   └── mosquitto_passwd/
│   │       ├── Makefile
│   │       └── mosquitto_passwd_fuzz_load.cpp
│   ├── broker/
│   │   ├── Makefile
│   │   ├── broker_fuzz.cpp
│   │   ├── broker_fuzz.h
│   │   ├── broker_fuzz_acl_file.cpp
│   │   ├── broker_fuzz_handle_auth.cpp
│   │   ├── broker_fuzz_handle_connect.cpp
│   │   ├── broker_fuzz_handle_publish.cpp
│   │   ├── broker_fuzz_handle_subscribe.cpp
│   │   ├── broker_fuzz_handle_unsubscribe.cpp
│   │   ├── broker_fuzz_password_file.cpp
│   │   ├── broker_fuzz_proxy_v1.cpp
│   │   ├── broker_fuzz_proxy_v2.cpp
│   │   ├── broker_fuzz_psk_file.cpp
│   │   ├── broker_fuzz_queue_msg.cpp
│   │   ├── broker_fuzz_read_handle.cpp
│   │   ├── broker_fuzz_test_config.cpp
│   │   ├── broker_fuzz_with_init.cpp
│   │   ├── fuzz_packet_read_base.c
│   │   └── fuzz_packet_read_base.h
│   ├── config.mk
│   ├── corpora/
│   │   ├── broker_acl_file.dict
│   │   └── broker_conf.dict
│   ├── generate_packet_corpora.py
│   ├── libcommon/
│   │   ├── Makefile
│   │   ├── libcommon_fuzz_property.cpp
│   │   ├── libcommon_fuzz_property.proto
│   │   ├── libcommon_fuzz_pub_topic_check2.cpp
│   │   ├── libcommon_fuzz_sub_topic_check2.cpp
│   │   ├── libcommon_fuzz_topic_matching.cpp
│   │   ├── libcommon_fuzz_topic_matching.proto
│   │   ├── libcommon_fuzz_topic_tokenise.cpp
│   │   └── libcommon_fuzz_utf8.cpp
│   ├── plugins/
│   │   ├── Makefile
│   │   └── dynamic-security/
│   │       ├── Makefile
│   │       └── dynsec_fuzz_load.cpp
│   └── scripts/
│       ├── oss-fuzz-build.sh
│       └── oss-fuzz-dependencies.sh
├── include/
│   ├── mosquitto/
│   │   ├── broker.h
│   │   ├── broker_control.h
│   │   ├── broker_plugin.h
│   │   ├── defs.h
│   │   ├── libcommon.h
│   │   ├── libcommon_base64.h
│   │   ├── libcommon_cjson.h
│   │   ├── libcommon_file.h
│   │   ├── libcommon_memory.h
│   │   ├── libcommon_password.h
│   │   ├── libcommon_properties.h
│   │   ├── libcommon_random.h
│   │   ├── libcommon_string.h
│   │   ├── libcommon_time.h
│   │   ├── libcommon_topic.h
│   │   ├── libcommon_utf8.h
│   │   ├── libmosquitto.h
│   │   ├── libmosquitto_auth.h
│   │   ├── libmosquitto_callbacks.h
│   │   ├── libmosquitto_connect.h
│   │   ├── libmosquitto_create_delete.h
│   │   ├── libmosquitto_helpers.h
│   │   ├── libmosquitto_loop.h
│   │   ├── libmosquitto_message.h
│   │   ├── libmosquitto_options.h
│   │   ├── libmosquitto_publish.h
│   │   ├── libmosquitto_socks.h
│   │   ├── libmosquitto_subscribe.h
│   │   ├── libmosquitto_tls.h
│   │   ├── libmosquitto_unsubscribe.h
│   │   ├── libmosquitto_will.h
│   │   ├── libmosquittopp.h
│   │   └── mqtt_protocol.h
│   ├── mosquitto.h
│   ├── mosquitto_broker.h
│   ├── mosquitto_plugin.h
│   ├── mosquittopp.h
│   └── mqtt_protocol.h
├── installer/
│   ├── mosquitto.nsi
│   └── mosquitto64.nsi
├── lib/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── actions_publish.c
│   ├── actions_subscribe.c
│   ├── actions_unsubscribe.c
│   ├── alias_mosq.c
│   ├── alias_mosq.h
│   ├── callbacks.c
│   ├── callbacks.h
│   ├── connect.c
│   ├── cpp/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   └── mosquittopp.cpp
│   ├── extended_auth.c
│   ├── handle_auth.c
│   ├── handle_connack.c
│   ├── handle_disconnect.c
│   ├── handle_ping.c
│   ├── handle_pubackcomp.c
│   ├── handle_publish.c
│   ├── handle_pubrec.c
│   ├── handle_pubrel.c
│   ├── handle_suback.c
│   ├── handle_unsuback.c
│   ├── helpers.c
│   ├── http_client.c
│   ├── http_client.h
│   ├── libmosquitto.c
│   ├── linker.version
│   ├── logging_mosq.c
│   ├── logging_mosq.h
│   ├── loop.c
│   ├── messages_mosq.c
│   ├── messages_mosq.h
│   ├── mosquitto_internal.h
│   ├── net_mosq.c
│   ├── net_mosq.h
│   ├── net_mosq_ocsp.c
│   ├── net_ws.c
│   ├── options.c
│   ├── packet_datatypes.c
│   ├── packet_mosq.c
│   ├── packet_mosq.h
│   ├── property_mosq.c
│   ├── property_mosq.h
│   ├── pthread_compat.h
│   ├── read_handle.c
│   ├── read_handle.h
│   ├── send_connect.c
│   ├── send_disconnect.c
│   ├── send_mosq.c
│   ├── send_mosq.h
│   ├── send_publish.c
│   ├── send_subscribe.c
│   ├── send_unsubscribe.c
│   ├── socks_mosq.c
│   ├── socks_mosq.h
│   ├── srv_mosq.c
│   ├── thread_mosq.c
│   ├── tls_mosq.c
│   ├── tls_mosq.h
│   ├── util_mosq.c
│   ├── util_mosq.h
│   ├── will_mosq.c
│   └── will_mosq.h
├── libcommon/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── base64_common.c
│   ├── cjson_common.c
│   ├── file_common.c
│   ├── linker.version
│   ├── memory_common.c
│   ├── mqtt_common.c
│   ├── password_common.c
│   ├── property_common.c
│   ├── property_common.h
│   ├── random_common.c
│   ├── strings_common.c
│   ├── time_common.c
│   ├── topic_common.c
│   └── utf8_common.c
├── libmosquitto.pc.in
├── libmosquittopp.pc.in
├── make/
│   ├── broker.mk
│   └── unit-test.mk
├── man/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── common/
│   │   ├── env-var-mosquitto-unsafe-allow-symlinks.xml
│   │   ├── option-bind.xml
│   │   ├── option-clean-session.xml
│   │   ├── option-clientid-prefix.xml
│   │   ├── option-clientid.xml
│   │   ├── option-config-file.xml
│   │   ├── option-debug.xml
│   │   ├── option-format-no-eol.xml
│   │   ├── option-format-pretty.xml
│   │   ├── option-format-verbose.xml
│   │   ├── option-format.xml
│   │   ├── option-help.xml
│   │   ├── option-hide-retain.xml
│   │   ├── option-host.xml
│   │   ├── option-keepalive.xml
│   │   ├── option-no-tls.xml
│   │   ├── option-nodelay.xml
│   │   ├── option-password.xml
│   │   ├── option-payload-file.xml
│   │   ├── option-payload-message.xml
│   │   ├── option-payload-null.xml
│   │   ├── option-payload-stdin-file.xml
│   │   ├── option-port.xml
│   │   ├── option-property.xml
│   │   ├── option-protocol-version.xml
│   │   ├── option-proxy.xml
│   │   ├── option-qos-incoming.xml
│   │   ├── option-quiet.xml
│   │   ├── option-retain-handling.xml
│   │   ├── option-session-expiry-interval.xml
│   │   ├── option-srv.xml
│   │   ├── option-timeout.xml
│   │   ├── option-tls-alpn.xml
│   │   ├── option-tls-cafile.xml
│   │   ├── option-tls-capath.xml
│   │   ├── option-tls-cert.xml
│   │   ├── option-tls-ciphers.xml
│   │   ├── option-tls-engine-kpass-sha1.xml
│   │   ├── option-tls-engine.xml
│   │   ├── option-tls-insecure.xml
│   │   ├── option-tls-key.xml
│   │   ├── option-tls-keyform.xml
│   │   ├── option-tls-keylog.xml
│   │   ├── option-tls-psk-identity.xml
│   │   ├── option-tls-psk.xml
│   │   ├── option-tls-use-os-certs.xml
│   │   ├── option-tls-version.xml
│   │   ├── option-unix-socket.xml
│   │   ├── option-url.xml
│   │   ├── option-username.xml
│   │   ├── option-websockets.xml
│   │   ├── option-will-payload.xml
│   │   ├── option-will-qos.xml
│   │   ├── option-will-retain.xml
│   │   ├── option-will-topic.xml
│   │   ├── options-intro.xml
│   │   ├── section-bugs.xml
│   │   ├── section-encrypted-connections.xml
│   │   ├── section-exit-status.xml
│   │   ├── section-output-format.xml
│   │   ├── section-properties-connect.xml
│   │   ├── section-properties-disconnect.xml
│   │   ├── section-properties-publish.xml
│   │   ├── section-properties-subscribe.xml
│   │   ├── section-properties-unsubscribe.xml
│   │   ├── section-properties-will.xml
│   │   ├── section-wills.xml
│   │   ├── synopsis-tls-certificate-options.xml
│   │   ├── synopsis-tls-psk-options.xml
│   │   ├── synopsis-will.xml
│   │   └── version-2.1.xml
│   ├── html.xsl
│   ├── libmosquitto.3.meta
│   ├── libmosquitto.3.xml
│   ├── manpage.xsl
│   ├── mosquitto-tls.7.meta
│   ├── mosquitto-tls.7.xml
│   ├── mosquitto.7.meta
│   ├── mosquitto.7.xml
│   ├── mosquitto.8.meta
│   ├── mosquitto.8.xml
│   ├── mosquitto.conf.5.meta
│   ├── mosquitto.conf.5.xml
│   ├── mosquitto_ctrl.1.meta
│   ├── mosquitto_ctrl.1.xml
│   ├── mosquitto_ctrl_dynsec.1.meta
│   ├── mosquitto_ctrl_dynsec.1.xml
│   ├── mosquitto_ctrl_shell.1.meta
│   ├── mosquitto_ctrl_shell.1.xml
│   ├── mosquitto_passwd.1.meta
│   ├── mosquitto_passwd.1.xml
│   ├── mosquitto_pub.1.meta
│   ├── mosquitto_pub.1.xml
│   ├── mosquitto_rr.1.meta
│   ├── mosquitto_rr.1.xml
│   ├── mosquitto_signal.1.meta
│   ├── mosquitto_signal.1.xml
│   ├── mosquitto_sub.1.meta
│   ├── mosquitto_sub.1.xml
│   ├── mqtt.7.meta
│   └── mqtt.7.xml
├── misc/
│   ├── currentcost/
│   │   ├── cc128_log_mysql.pl
│   │   ├── cc128_parse.pl
│   │   ├── cc128_read.pl
│   │   ├── cc128_read.py
│   │   └── gnome-panel/
│   │       ├── CurrentCostMQTT.py
│   │       └── CurrentCostMQTT.server
│   └── letsencrypt/
│       └── mosquitto-copy.sh
├── mosquitto.conf
├── plugins/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── README.md
│   ├── acl-file/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── acl_check.c
│   │   ├── acl_parse.c
│   │   ├── plugin.c
│   │   ├── test.conf
│   │   └── test.sh
│   ├── dynamic-security/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── acl.c
│   │   ├── auth.c
│   │   ├── clientlist.c
│   │   ├── clients.c
│   │   ├── config.c
│   │   ├── config_init.c
│   │   ├── control.c
│   │   ├── default_acl.c
│   │   ├── details.c
│   │   ├── dynamic_security.h
│   │   ├── grouplist.c
│   │   ├── groups.c
│   │   ├── kicklist.c
│   │   ├── migrate_to_dynsec.py
│   │   ├── plugin.c
│   │   ├── rolelist.c
│   │   ├── roles.c
│   │   ├── test.conf
│   │   ├── test.sh
│   │   └── tick.c
│   ├── examples/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── add-properties/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_add_properties.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── auth-by-env/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   └── mosquitto_auth_by_env.c
│   │   ├── auth-by-ip/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_auth_by_ip.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── client-lifetime-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_client_lifetime_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── client-properties/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_client_properties.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── connection-state/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_connection_state.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── delayed-auth/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_delayed_auth.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── deny-protocol-version/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_deny_protocol_version.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── force-retain/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_force_retain.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── limit-subscription-qos/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_limit_subscription_qos.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── message-timestamp/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_message_timestamp.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-ban/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_ban.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-modification/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_modification.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── payload-size-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_payload_size_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── plugin-event-stats/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_plugin_event_stats.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── print-ip-on-publish/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_print_ip_on_publish.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── tick-interval/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_tick_interval.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-hierarchy-flatten/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_hierarchy_flatten.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-jail/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_jail.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   ├── topic-modification/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosquitto_topic_modification.c
│   │   │   ├── test.conf
│   │   │   └── test.sh
│   │   └── wildcard-temp/
│   │       ├── CMakeLists.txt
│   │       ├── Makefile
│   │       ├── mosquitto_wildcard_temp.c
│   │       ├── test.conf
│   │       └── test.sh
│   ├── password-file/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── password_check.c
│   │   ├── password_parse.c
│   │   ├── plugin.c
│   │   ├── test.conf
│   │   ├── test.pwfile
│   │   └── test.sh
│   ├── persist-sqlite/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── base_msgs.c
│   │   ├── client_msgs.c
│   │   ├── clients.c
│   │   ├── common.c
│   │   ├── init.c
│   │   ├── migrate_to_persist_sqlite.py
│   │   ├── persist_sqlite.h
│   │   ├── plugin.c
│   │   ├── restore.c
│   │   ├── retain_msgs.c
│   │   ├── subscriptions.c
│   │   ├── test.conf
│   │   ├── test.sh
│   │   ├── tick.c
│   │   ├── util.h
│   │   └── will.c
│   ├── plugin.mk
│   └── sparkplug-aware/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── README.md
│       ├── on_message.c
│       ├── plugin.c
│       ├── plugin_global.h
│       ├── test.conf
│       └── test.sh
├── pskfile.example
├── pwfile.example
├── run_tests.py
├── security/
│   └── mosquitto.apparmor
├── service/
│   ├── monit/
│   │   └── mosquitto.monit
│   ├── svscan/
│   │   └── run
│   ├── systemd/
│   │   ├── README
│   │   ├── mosquitto.service.notify
│   │   └── mosquitto.service.simple
│   └── upstart/
│       └── mosquitto.conf
├── set-version.sh
├── snap/
│   ├── local/
│   │   ├── default_config.conf
│   │   └── launcher.sh
│   └── snapcraft.yaml
├── src/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── acl_file.c
│   ├── acl_file.h
│   ├── bridge.c
│   ├── bridge_topic.c
│   ├── broker_control.c
│   ├── conf.c
│   ├── conf_includedir.c
│   ├── context.c
│   ├── control.c
│   ├── control_common.c
│   ├── database.c
│   ├── handle_auth.c
│   ├── handle_connack.c
│   ├── handle_connect.c
│   ├── handle_disconnect.c
│   ├── handle_publish.c
│   ├── handle_subscribe.c
│   ├── handle_unsubscribe.c
│   ├── http_api.c
│   ├── http_serv.c
│   ├── keepalive.c
│   ├── linker-aix.syms
│   ├── linker-macosx.syms
│   ├── linker.syms
│   ├── listeners.c
│   ├── logging.c
│   ├── loop.c
│   ├── mosquitto.c
│   ├── mosquitto_broker_internal.h
│   ├── mux.c
│   ├── mux.h
│   ├── mux_epoll.c
│   ├── mux_kqueue.c
│   ├── mux_poll.c
│   ├── net.c
│   ├── password_file.c
│   ├── password_file.h
│   ├── persist.h
│   ├── persist_read.c
│   ├── persist_read_v234.c
│   ├── persist_read_v5.c
│   ├── persist_write.c
│   ├── persist_write_v5.c
│   ├── plugin_acl_check.c
│   ├── plugin_basic_auth.c
│   ├── plugin_callbacks.c
│   ├── plugin_cleanup.c
│   ├── plugin_client_offline.c
│   ├── plugin_connect.c
│   ├── plugin_disconnect.c
│   ├── plugin_extended_auth.c
│   ├── plugin_init.c
│   ├── plugin_message.c
│   ├── plugin_persist.c
│   ├── plugin_psk_key.c
│   ├── plugin_public.c
│   ├── plugin_reload.c
│   ├── plugin_subscribe.c
│   ├── plugin_tick.c
│   ├── plugin_unsubscribe.c
│   ├── plugin_v2.c
│   ├── plugin_v3.c
│   ├── plugin_v4.c
│   ├── plugin_v5.c
│   ├── property_broker.c
│   ├── proxy_v1.c
│   ├── proxy_v2.c
│   ├── psk_file.c
│   ├── read_handle.c
│   ├── retain.c
│   ├── security_default.c
│   ├── send_auth.c
│   ├── send_connack.c
│   ├── send_suback.c
│   ├── send_unsuback.c
│   ├── service.c
│   ├── session_expiry.c
│   ├── signals.c
│   ├── subs.c
│   ├── sys_tree.c
│   ├── sys_tree.h
│   ├── topic_tok.c
│   ├── watchdog.c
│   ├── websockets.c
│   ├── will_delay.c
│   └── xtreport.c
├── test/
│   ├── CMakeLists.txt
│   ├── Makefile
│   ├── __init__.py
│   ├── apps/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── TODO.md
│   │   ├── ctrl/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── ctrl-args.py
│   │   │   ├── ctrl-broker.py
│   │   │   ├── ctrl-dynsec.py
│   │   │   ├── ctrl_shell_broker_test.cpp
│   │   │   ├── ctrl_shell_completion_test.cpp
│   │   │   ├── ctrl_shell_dynsec_test.cpp
│   │   │   ├── ctrl_shell_help_test.cpp
│   │   │   ├── ctrl_shell_options_test.cpp
│   │   │   ├── ctrl_shell_pre_connect_test.cpp
│   │   │   ├── ctrl_shell_test.cpp
│   │   │   ├── mosq_test_helper.py
│   │   │   └── test.py
│   │   ├── db_dump/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── data/
│   │   │   │   ├── bad-chunk.test-db
│   │   │   │   ├── bad-dbid-size.test-db
│   │   │   │   ├── bad-magic.test-db
│   │   │   │   ├── short.test-db
│   │   │   │   ├── v3-corrupt.test-db
│   │   │   │   ├── v3-empty.test-db
│   │   │   │   ├── v4-corrupt.test-db
│   │   │   │   ├── v4-empty.test-db
│   │   │   │   ├── v4-single-client.test-db
│   │   │   │   ├── v4-single-cmsg.test-db
│   │   │   │   ├── v4-single-retain.test-db
│   │   │   │   ├── v4-single-sub.test-db
│   │   │   │   ├── v5-corrupt.test-db
│   │   │   │   ├── v5-empty.test-db
│   │   │   │   ├── v6-corrupt-client.test-db
│   │   │   │   ├── v6-corrupt-cmsg.test-db
│   │   │   │   ├── v6-corrupt-retain.test-db
│   │   │   │   ├── v6-corrupt-sub.test-db
│   │   │   │   ├── v6-corrupt.test-db
│   │   │   │   ├── v6-empty.test-db
│   │   │   │   ├── v6-mqtt-v5-props.test-db
│   │   │   │   ├── v6-single-all.test-db
│   │   │   │   ├── v6-single-client.test-db
│   │   │   │   ├── v6-single-cmsg.test-db
│   │   │   │   ├── v6-single-retain.test-db
│   │   │   │   └── v6-single-sub.test-db
│   │   │   ├── db-dump-client-stats.py
│   │   │   ├── db-dump-corrupt.py
│   │   │   ├── db-dump-json-v6-mqtt-v5-props.py
│   │   │   ├── db-dump-print-empty.py
│   │   │   ├── db-dump-print-v6-all.py
│   │   │   ├── db-dump-print-v6-mqtt-v5-props.py
│   │   │   ├── db-dump-stats-current.py
│   │   │   ├── db-dump-stats.py
│   │   │   ├── mosq_test_helper.py
│   │   │   └── test.py
│   │   ├── mosq_test_helper.py
│   │   ├── passwd/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── mosq_test_helper.py
│   │   │   ├── passwd-args.py
│   │   │   ├── passwd-changes.py
│   │   │   ├── passwd-stdout.py
│   │   │   └── test.py
│   │   └── signal/
│   │       ├── CMakeLists.txt
│   │       ├── Makefile
│   │       ├── mosq_test_helper.py
│   │       ├── signal-args.py
│   │       └── test.py
│   ├── broker/
│   │   ├── 01-bad-initial-packets.py
│   │   ├── 01-connect-575314.py
│   │   ├── 01-connect-accept-protocol.py
│   │   ├── 01-connect-allow-anonymous.py
│   │   ├── 01-connect-auto-id.py
│   │   ├── 01-connect-disconnect-v5.py
│   │   ├── 01-connect-global-max-clients.py
│   │   ├── 01-connect-global-max-connections.py
│   │   ├── 01-connect-listener-allow-anonymous.py
│   │   ├── 01-connect-max-connections.py
│   │   ├── 01-connect-max-keepalive.py
│   │   ├── 01-connect-take-over.py
│   │   ├── 01-connect-uname-no-password-denied.pwfile
│   │   ├── 01-connect-uname-no-password-denied.py
│   │   ├── 01-connect-uname-or-anon.pwfile
│   │   ├── 01-connect-uname-or-anon.py
│   │   ├── 01-connect-uname-password-denied-no-will.py
│   │   ├── 01-connect-uname-password-denied.pwfile
│   │   ├── 01-connect-uname-password-denied.py
│   │   ├── 01-connect-uname-password-success-no-tls.pwfile
│   │   ├── 01-connect-uname-password-success-no-tls.py
│   │   ├── 01-connect-unix-socket.py
│   │   ├── 01-connect-windows-line-endings.py
│   │   ├── 01-connect-zero-length-id.py
│   │   ├── 01-plugin-connect-uname-password-denied.pwfile
│   │   ├── 01-plugin-connect-uname-password-denied.py
│   │   ├── 02-shared-nolocal.py
│   │   ├── 02-shared-qos0-v5.py
│   │   ├── 02-subhier-crash.py
│   │   ├── 02-subpub-b2c-topic-alias.py
│   │   ├── 02-subpub-qos0-long-topic.py
│   │   ├── 02-subpub-qos0-oversize-payload.py
│   │   ├── 02-subpub-qos0-queued-bytes.py
│   │   ├── 02-subpub-qos0-retain-as-publish.py
│   │   ├── 02-subpub-qos0-send-retain.py
│   │   ├── 02-subpub-qos0-subscription-id.py
│   │   ├── 02-subpub-qos0-topic-alias-unknown.py
│   │   ├── 02-subpub-qos0-topic-alias.py
│   │   ├── 02-subpub-qos1-message-expiry-retain.py
│   │   ├── 02-subpub-qos1-message-expiry-will.py
│   │   ├── 02-subpub-qos1-message-expiry.py
│   │   ├── 02-subpub-qos1-nolocal.py
│   │   ├── 02-subpub-qos1-oversize-payload.py
│   │   ├── 02-subpub-qos1.py
│   │   ├── 02-subpub-qos2-1322.py
│   │   ├── 02-subpub-qos2-max-inflight-bytes.py
│   │   ├── 02-subpub-qos2-pubrec-error.py
│   │   ├── 02-subpub-qos2-receive-maximum-1.py
│   │   ├── 02-subpub-qos2-receive-maximum-2.py
│   │   ├── 02-subpub-qos2.py
│   │   ├── 02-subpub-recover-subscriptions.py
│   │   ├── 02-subscribe-dollar-v5.py
│   │   ├── 02-subscribe-invalid-utf8.py
│   │   ├── 02-subscribe-long-topic.py
│   │   ├── 02-subscribe-persistence-flipflop.py
│   │   ├── 03-pattern-matching.py
│   │   ├── 03-publish-b2c-disconnect-qos1.py
│   │   ├── 03-publish-b2c-disconnect-qos2.py
│   │   ├── 03-publish-b2c-qos1-len.py
│   │   ├── 03-publish-b2c-qos2-len.py
│   │   ├── 03-publish-bad-flags.py
│   │   ├── 03-publish-c2b-disconnect-qos2.py
│   │   ├── 03-publish-c2b-qos2-len.py
│   │   ├── 03-publish-dollar-v5.py
│   │   ├── 03-publish-dollar.py
│   │   ├── 03-publish-invalid-utf8.py
│   │   ├── 03-publish-long-topic.py
│   │   ├── 03-publish-qos1-max-inflight-expire.py
│   │   ├── 03-publish-qos1-max-inflight.py
│   │   ├── 03-publish-qos1-no-subscribers-v5.py
│   │   ├── 03-publish-qos1-queued-bytes.conf
│   │   ├── 03-publish-qos1-queued-bytes.py
│   │   ├── 03-publish-qos1-retain-disabled.py
│   │   ├── 03-publish-qos1.py
│   │   ├── 03-publish-qos2-dup.py
│   │   ├── 03-publish-qos2-max-inflight-exceeded.py
│   │   ├── 03-publish-qos2-max-inflight.py
│   │   ├── 03-publish-qos2-reuse-mid.py
│   │   ├── 03-publish-qos2.py
│   │   ├── 04-retain-check-source-persist-diff-port.py
│   │   ├── 04-retain-check-source-persist.py
│   │   ├── 04-retain-check-source.py
│   │   ├── 04-retain-clear-multiple.py
│   │   ├── 04-retain-qos0-clear.py
│   │   ├── 04-retain-qos0-fresh.py
│   │   ├── 04-retain-qos0-repeated.py
│   │   ├── 04-retain-qos0.py
│   │   ├── 04-retain-qos1-qos0.py
│   │   ├── 04-retain-upgrade-outgoing-qos.py
│   │   ├── 05-clean-session-qos1.py
│   │   ├── 05-session-expiry-kick.py
│   │   ├── 05-session-expiry-v5.py
│   │   ├── 06-bridge-b2br-disconnect-qos1.py
│   │   ├── 06-bridge-b2br-disconnect-qos2.py
│   │   ├── 06-bridge-b2br-late-connection-retain.py
│   │   ├── 06-bridge-b2br-late-connection.py
│   │   ├── 06-bridge-b2br-remapping.py
│   │   ├── 06-bridge-br2b-disconnect-qos1.py
│   │   ├── 06-bridge-br2b-disconnect-qos2.py
│   │   ├── 06-bridge-br2b-remapping.py
│   │   ├── 06-bridge-clean-session-core.py
│   │   ├── 06-bridge-clean-session-csF-lcsF.py
│   │   ├── 06-bridge-clean-session-csF-lcsN.py
│   │   ├── 06-bridge-clean-session-csF-lcsT.py
│   │   ├── 06-bridge-clean-session-csT-lcsF.py
│   │   ├── 06-bridge-clean-session-csT-lcsN.py
│   │   ├── 06-bridge-clean-session-csT-lcsT.py
│   │   ├── 06-bridge-config-reload.py
│   │   ├── 06-bridge-fail-persist-resend-qos1.py
│   │   ├── 06-bridge-fail-persist-resend-qos2.py
│   │   ├── 06-bridge-no-local.py
│   │   ├── 06-bridge-outgoing-retain.py
│   │   ├── 06-bridge-per-listener-settings.py
│   │   ├── 06-bridge-reconnect-local-out.py
│   │   ├── 06-bridge-remap-receive-wildcard.py
│   │   ├── 06-bridge-remote-shutdown.py
│   │   ├── 07-will-control.py
│   │   ├── 07-will-delay-invalid-573191.py
│   │   ├── 07-will-delay-reconnect.py
│   │   ├── 07-will-delay-recover.py
│   │   ├── 07-will-delay-session-expiry-0.py
│   │   ├── 07-will-delay-session-expiry.py
│   │   ├── 07-will-delay-session-expiry2.py
│   │   ├── 07-will-delay.py
│   │   ├── 07-will-disconnect-with-will.py
│   │   ├── 07-will-invalid-utf8.py
│   │   ├── 07-will-no-flag.py
│   │   ├── 07-will-null-topic.py
│   │   ├── 07-will-null.py
│   │   ├── 07-will-oversize-payload.py
│   │   ├── 07-will-per-listener.py
│   │   ├── 07-will-properties.py
│   │   ├── 07-will-qos0.py
│   │   ├── 07-will-reconnect-1273.py
│   │   ├── 07-will-takeover.py
│   │   ├── 08-ssl-bridge-helper.py
│   │   ├── 08-ssl-bridge.py
│   │   ├── 08-ssl-connect-cert-auth-crl.py
│   │   ├── 08-ssl-connect-cert-auth-expired-allowed.py
│   │   ├── 08-ssl-connect-cert-auth-expired.py
│   │   ├── 08-ssl-connect-cert-auth-revoked.py
│   │   ├── 08-ssl-connect-cert-auth-without.py
│   │   ├── 08-ssl-connect-cert-auth.py
│   │   ├── 08-ssl-connect-dhparam.py
│   │   ├── 08-ssl-connect-identity.py
│   │   ├── 08-ssl-connect-no-auth-wrong-ca.py
│   │   ├── 08-ssl-connect-no-auth.py
│   │   ├── 08-ssl-connect-no-identity.py
│   │   ├── 08-ssl-hup-disconnect.py
│   │   ├── 08-tls-psk-bridge.psk
│   │   ├── 08-tls-psk-bridge.py
│   │   ├── 08-tls-psk-pub.psk
│   │   ├── 08-tls-psk-pub.py
│   │   ├── 09-acl-access-variants.py
│   │   ├── 09-acl-change.py
│   │   ├── 09-acl-empty-file.py
│   │   ├── 09-auth-bad-method.py
│   │   ├── 09-extended-auth-change-username.py
│   │   ├── 09-extended-auth-multistep-reauth.py
│   │   ├── 09-extended-auth-multistep.py
│   │   ├── 09-extended-auth-reauth.py
│   │   ├── 09-extended-auth-single.py
│   │   ├── 09-extended-auth-single2.py
│   │   ├── 09-plugin-acl-access-variants.py
│   │   ├── 09-plugin-acl-change.py
│   │   ├── 09-plugin-auth-acl-pub-prop.py
│   │   ├── 09-plugin-auth-acl-pub.py
│   │   ├── 09-plugin-auth-acl-sub-denied.py
│   │   ├── 09-plugin-auth-acl-sub.py
│   │   ├── 09-plugin-auth-context-params.py
│   │   ├── 09-plugin-auth-defer-unpwd-fail.py
│   │   ├── 09-plugin-auth-defer-unpwd-success.py
│   │   ├── 09-plugin-auth-msg-params.py
│   │   ├── 09-plugin-auth-unpwd-fail.py
│   │   ├── 09-plugin-auth-unpwd-success.py
│   │   ├── 09-plugin-auth-v2-unpwd-fail.py
│   │   ├── 09-plugin-auth-v2-unpwd-success.py
│   │   ├── 09-plugin-auth-v3-unpwd-fail.py
│   │   ├── 09-plugin-auth-v3-unpwd-success.py
│   │   ├── 09-plugin-auth-v4-unpwd-fail.py
│   │   ├── 09-plugin-auth-v4-unpwd-success.py
│   │   ├── 09-plugin-auth-v5-unpwd-fail.py
│   │   ├── 09-plugin-auth-v5-unpwd-success.py
│   │   ├── 09-plugin-bad.py
│   │   ├── 09-plugin-change-id.py
│   │   ├── 09-plugin-delayed-auth.py
│   │   ├── 09-plugin-evt-client-offline.py
│   │   ├── 09-plugin-evt-message-in.py
│   │   ├── 09-plugin-evt-message-out.py
│   │   ├── 09-plugin-evt-psk-key.py
│   │   ├── 09-plugin-evt-reload.py
│   │   ├── 09-plugin-evt-subscribe.py
│   │   ├── 09-plugin-evt-tick.py
│   │   ├── 09-plugin-evt-unsubscribe.py
│   │   ├── 09-plugin-load-acl.py
│   │   ├── 09-plugin-load-basic-auth.py
│   │   ├── 09-plugin-load-extended-auth.py
│   │   ├── 09-plugin-publish.py
│   │   ├── 09-plugin-unsupported.py
│   │   ├── 09-pwfile-parse-invalid.py
│   │   ├── 10-listener-mount-point.py
│   │   ├── 11-message-expiry.py
│   │   ├── 11-persistence-autosave-changes.py
│   │   ├── 11-persistent-subscription-no-local.py
│   │   ├── 11-persistent-subscription.py
│   │   ├── 11-pub-props.py
│   │   ├── 11-subscription-id.py
│   │   ├── 12-prop-assigned-client-identifier.py
│   │   ├── 12-prop-maximum-packet-size-broker.py
│   │   ├── 12-prop-maximum-packet-size-publish-qos1.py
│   │   ├── 12-prop-maximum-packet-size-publish-qos2.py
│   │   ├── 12-prop-response-topic-correlation-data.py
│   │   ├── 12-prop-response-topic.py
│   │   ├── 12-prop-server-keepalive.py
│   │   ├── 12-prop-subpub-content-type.py
│   │   ├── 12-prop-subpub-payload-format.py
│   │   ├── 13-websocket-bad-origin.py
│   │   ├── 14-dynsec-acl.py
│   │   ├── 14-dynsec-allow-wildcard.py
│   │   ├── 14-dynsec-anon-group.py
│   │   ├── 14-dynsec-auth.py
│   │   ├── 14-dynsec-client-invalid.py
│   │   ├── 14-dynsec-client.py
│   │   ├── 14-dynsec-config-init-env.py
│   │   ├── 14-dynsec-config-init-file.py
│   │   ├── 14-dynsec-config-init-random.py
│   │   ├── 14-dynsec-default-access.py
│   │   ├── 14-dynsec-disable-client.py
│   │   ├── 14-dynsec-group-invalid.py
│   │   ├── 14-dynsec-group.py
│   │   ├── 14-dynsec-modify-client.py
│   │   ├── 14-dynsec-modify-group.py
│   │   ├── 14-dynsec-modify-role.py
│   │   ├── 14-dynsec-plugin-invalid.py
│   │   ├── 14-dynsec-role-invalid.py
│   │   ├── 14-dynsec-role.py
│   │   ├── 15-persist-bridge-queue.py
│   │   ├── 15-persist-client-drop-expired-messages.py
│   │   ├── 15-persist-client-expired-session.py
│   │   ├── 15-persist-client-msg-in-v3-1-1.py
│   │   ├── 15-persist-client-msg-in-v5-0.py
│   │   ├── 15-persist-client-msg-modify-acl.py
│   │   ├── 15-persist-client-msg-out-clear-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-dup-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-queue-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-v3-1-1-db.py
│   │   ├── 15-persist-client-msg-out-v3-1-1.py
│   │   ├── 15-persist-client-msg-out-v5-0.py
│   │   ├── 15-persist-client-v3-1-1.py
│   │   ├── 15-persist-client-v5-0.py
│   │   ├── 15-persist-client-will.py
│   │   ├── 15-persist-migrate-db.py
│   │   ├── 15-persist-publish-properties-v5-0.py
│   │   ├── 15-persist-retain-clear.py
│   │   ├── 15-persist-retain-v3-1-1.py
│   │   ├── 15-persist-retain-v5-0.py
│   │   ├── 15-persist-subscription-v3-1-1.py
│   │   ├── 15-persist-subscription-v5-0.py
│   │   ├── 16-cmd-args.py
│   │   ├── 16-config-huge.py
│   │   ├── 16-config-includedir.py
│   │   ├── 16-config-missing.py
│   │   ├── 16-config-parse-errors-tls-psk.py
│   │   ├── 16-config-parse-errors-tls.py
│   │   ├── 16-config-parse-errors-without-tls.py
│   │   ├── 17-control-list-listeners.py
│   │   ├── 17-control-list-plugins.py
│   │   ├── 17-control-missing-endpoint.py
│   │   ├── 20-sparkplug-aware.py
│   │   ├── 20-sparkplug-compliance.py
│   │   ├── 21-proxy-bad-version.py
│   │   ├── 21-proxy-v1-bad.py
│   │   ├── 21-proxy-v1-success.py
│   │   ├── 21-proxy-v2-bad-config.py
│   │   ├── 21-proxy-v2-bad-header.py
│   │   ├── 21-proxy-v2-ipv4.py
│   │   ├── 21-proxy-v2-ipv6.py
│   │   ├── 21-proxy-v2-local.py
│   │   ├── 21-proxy-v2-long-tlv.py
│   │   ├── 21-proxy-v2-lost-connection.py
│   │   ├── 21-proxy-v2-ssl-cipher.py
│   │   ├── 21-proxy-v2-ssl-common-name-failure.py
│   │   ├── 21-proxy-v2-ssl-common-name-success.py
│   │   ├── 21-proxy-v2-ssl-require-cert-failure.py
│   │   ├── 21-proxy-v2-ssl-require-cert-success.py
│   │   ├── 21-proxy-v2-ssl-require-tls-failure.py
│   │   ├── 21-proxy-v2-ssl-require-tls-success.py
│   │   ├── 21-proxy-v2-unix.py
│   │   ├── 21-proxy-v2-websockets.py
│   │   ├── 22-http-api-acl.py
│   │   ├── 22-http-api-api.py
│   │   ├── 22-http-api-auth.pwfile
│   │   ├── 22-http-api-auth.py
│   │   ├── 22-http-api-file.py
│   │   ├── 22-http-api-tls.py
│   │   ├── 23-security-acl-file-reload.py
│   │   ├── 23-security-password-file-reload.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── c/
│   │   │   ├── 08-tls-psk-bridge.c
│   │   │   ├── 08-tls-psk-pub.c
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── auth_plugin_acl.c
│   │   │   ├── auth_plugin_acl_change.c
│   │   │   ├── auth_plugin_acl_sub_denied.c
│   │   │   ├── auth_plugin_context_params.c
│   │   │   ├── auth_plugin_delayed.c
│   │   │   ├── auth_plugin_extended_multiple.c
│   │   │   ├── auth_plugin_extended_reauth.c
│   │   │   ├── auth_plugin_extended_single.c
│   │   │   ├── auth_plugin_extended_single2.c
│   │   │   ├── auth_plugin_id_change.c
│   │   │   ├── auth_plugin_msg_params.c
│   │   │   ├── auth_plugin_publish.c
│   │   │   ├── auth_plugin_pwd.c
│   │   │   ├── auth_plugin_v2.c
│   │   │   ├── auth_plugin_v3.c
│   │   │   ├── auth_plugin_v4.c
│   │   │   ├── auth_plugin_v5.c
│   │   │   ├── auth_plugin_v5_control.c
│   │   │   ├── bad_v1.c
│   │   │   ├── bad_v2_1.c
│   │   │   ├── bad_v2_2.c
│   │   │   ├── bad_v2_3.c
│   │   │   ├── bad_v2_4.c
│   │   │   ├── bad_v2_5.c
│   │   │   ├── bad_v2_6.c
│   │   │   ├── bad_v2_7.c
│   │   │   ├── bad_v3_1.c
│   │   │   ├── bad_v3_2.c
│   │   │   ├── bad_v3_3.c
│   │   │   ├── bad_v3_4.c
│   │   │   ├── bad_v3_5.c
│   │   │   ├── bad_v3_6.c
│   │   │   ├── bad_v3_7.c
│   │   │   ├── bad_v4_1.c
│   │   │   ├── bad_v4_2.c
│   │   │   ├── bad_v4_3.c
│   │   │   ├── bad_v4_4.c
│   │   │   ├── bad_v5_1.c
│   │   │   ├── bad_v6.c
│   │   │   ├── bad_vnone_1.c
│   │   │   ├── kick_last_client.c
│   │   │   ├── mosquitto_plugin_v2.h
│   │   │   ├── plugin_control.c
│   │   │   ├── plugin_evt_client_offline.c
│   │   │   ├── plugin_evt_message_in.c
│   │   │   ├── plugin_evt_message_out.c
│   │   │   ├── plugin_evt_persist_client_update.c
│   │   │   ├── plugin_evt_psk_key.c
│   │   │   ├── plugin_evt_reload.c
│   │   │   ├── plugin_evt_subscribe.c
│   │   │   ├── plugin_evt_tick.c
│   │   │   ├── plugin_evt_unsubscribe.c
│   │   │   ├── plugin_load_acl.c
│   │   │   └── plugin_load_extended_auth.c
│   │   ├── data/
│   │   │   ├── AUTH.json
│   │   │   ├── CONNACK.json
│   │   │   ├── CONNECT.json
│   │   │   ├── DISCONNECT.json
│   │   │   ├── FLOW.json
│   │   │   ├── FORBIDDEN.json
│   │   │   ├── PINGREQ.json
│   │   │   ├── PINGRESP.json
│   │   │   ├── PUBACK.json
│   │   │   ├── PUBCOMP.json
│   │   │   ├── PUBLISH.json
│   │   │   ├── PUBREC.json
│   │   │   ├── PUBREL.json
│   │   │   ├── REGRESSION.json
│   │   │   ├── SUBACK.json
│   │   │   ├── SUBSCRIBE.json
│   │   │   ├── UNSUBACK.json
│   │   │   ├── UNSUBSCRIBE.json
│   │   │   └── ZZ-broker-check.json
│   │   ├── dynamic-security-init.json
│   │   ├── dynsec_helper.py
│   │   ├── mosq_test_helper.py
│   │   ├── msg_sequence_test.py
│   │   ├── ntest.py
│   │   ├── persist_module_helper.py
│   │   ├── persist_sqlite.py
│   │   ├── prop_subpub_helper.py
│   │   ├── proxy_helper.py
│   │   ├── readme.txt
│   │   ├── test.py
│   │   └── test.supp
│   ├── client/
│   │   ├── 02-subscribe-argv-errors-tls-psk.py
│   │   ├── 02-subscribe-argv-errors-tls.py
│   │   ├── 02-subscribe-argv-errors-without-tls.py
│   │   ├── 02-subscribe-env.py
│   │   ├── 02-subscribe-filter-out.py
│   │   ├── 02-subscribe-format-json-properties.py
│   │   ├── 02-subscribe-format-json-qos0.py
│   │   ├── 02-subscribe-format-json-qos1.py
│   │   ├── 02-subscribe-format-json-retain.py
│   │   ├── 02-subscribe-format.py
│   │   ├── 02-subscribe-null.py
│   │   ├── 02-subscribe-qos1-ws.py
│   │   ├── 02-subscribe-qos1.py
│   │   ├── 02-subscribe-retain-handling.py
│   │   ├── 02-subscribe-verbose.py
│   │   ├── 03-publish-argv-errors-tls-psk.py
│   │   ├── 03-publish-argv-errors-tls.py
│   │   ├── 03-publish-argv-errors-without-tls.py
│   │   ├── 03-publish-env.py
│   │   ├── 03-publish-file-empty.py
│   │   ├── 03-publish-file.py
│   │   ├── 03-publish-options-file.py
│   │   ├── 03-publish-qos0-empty.py
│   │   ├── 03-publish-qos1-properties.py
│   │   ├── 03-publish-qos1-ws-large.py
│   │   ├── 03-publish-qos1-ws.py
│   │   ├── 03-publish-qos1.py
│   │   ├── 03-publish-repeat.py
│   │   ├── 03-publish-socks-auth-failed.py
│   │   ├── 03-publish-socks-no-auth.py
│   │   ├── 03-publish-socks.py
│   │   ├── 03-publish-stdin-file.py
│   │   ├── 03-publish-stdin-line.py
│   │   ├── 03-publish-tls.py
│   │   ├── 03-publish-url.py
│   │   ├── 04-rr-argv-errors-tls-psk.py
│   │   ├── 04-rr-argv-errors-tls.py
│   │   ├── 04-rr-argv-errors-without-tls.py
│   │   ├── 04-rr-env.py
│   │   ├── 04-rr-qos1-ws.py
│   │   ├── 04-rr-qos1.py
│   │   ├── 04-rr-retain-handling.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── data/
│   │   │   └── .config/
│   │   │       ├── mosquitto_pub
│   │   │       └── mosquitto_sub
│   │   ├── mosq_test_helper.py
│   │   ├── test-ws.sh
│   │   ├── test.py
│   │   ├── test.sh
│   │   └── ws.conf
│   ├── lib/
│   │   ├── 01-con-discon-success-v5.py
│   │   ├── 01-con-discon-success.py
│   │   ├── 01-con-discon-will-clear.py
│   │   ├── 01-con-discon-will-v5.py
│   │   ├── 01-con-discon-will.py
│   │   ├── 01-extended-auth-continue.py
│   │   ├── 01-extended-auth-failure.py
│   │   ├── 01-keepalive-pingreq.py
│   │   ├── 01-no-clean-session.py
│   │   ├── 01-pre-connect-callback.py
│   │   ├── 01-server-keepalive-pingreq.py
│   │   ├── 01-unpwd-set.py
│   │   ├── 01-will-set.py
│   │   ├── 01-will-unpwd-set.py
│   │   ├── 02-subscribe-helper-qos2.py
│   │   ├── 02-subscribe-qos0.py
│   │   ├── 02-subscribe-qos1.py
│   │   ├── 02-subscribe-qos2.py
│   │   ├── 02-unsubscribe-multiple-v5.py
│   │   ├── 02-unsubscribe-v5.py
│   │   ├── 02-unsubscribe.py
│   │   ├── 03-publish-b2c-qos1-unexpected-puback.py
│   │   ├── 03-publish-b2c-qos1.py
│   │   ├── 03-publish-b2c-qos2-len.py
│   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.py
│   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.py
│   │   ├── 03-publish-b2c-qos2.py
│   │   ├── 03-publish-c2b-qos1-disconnect.py
│   │   ├── 03-publish-c2b-qos1-len.py
│   │   ├── 03-publish-c2b-qos1-receive-maximum.py
│   │   ├── 03-publish-c2b-qos2-disconnect.py
│   │   ├── 03-publish-c2b-qos2-len.py
│   │   ├── 03-publish-c2b-qos2-maximum-qos-0.py
│   │   ├── 03-publish-c2b-qos2-maximum-qos-1.py
│   │   ├── 03-publish-c2b-qos2-pubrec-error.py
│   │   ├── 03-publish-c2b-qos2-receive-maximum-1.py
│   │   ├── 03-publish-c2b-qos2-receive-maximum-2.py
│   │   ├── 03-publish-c2b-qos2.py
│   │   ├── 03-publish-loop.py
│   │   ├── 03-publish-qos0-no-payload.py
│   │   ├── 03-publish-qos0.py
│   │   ├── 03-request-response-correlation.py
│   │   ├── 03-request-response.py
│   │   ├── 04-retain-qos0.py
│   │   ├── 08-ssl-bad-cacert.py
│   │   ├── 08-ssl-connect-cert-auth-enc.py
│   │   ├── 08-ssl-connect-cert-auth.py
│   │   ├── 08-ssl-connect-no-auth.py
│   │   ├── 08-ssl-connect-san.py
│   │   ├── 08-ssl-fake-cacert.py
│   │   ├── 09-util-topic-tokenise.py
│   │   ├── 11-prop-oversize-packet.py
│   │   ├── 11-prop-recv-qos0.py
│   │   ├── 11-prop-recv-qos1.py
│   │   ├── 11-prop-recv-qos2.py
│   │   ├── 11-prop-send-content-type.py
│   │   ├── 11-prop-send-payload-format.py
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── c/
│   │   │   ├── 01-con-discon-success-v5.c
│   │   │   ├── 01-con-discon-success.c
│   │   │   ├── 01-con-discon-will-clear.c
│   │   │   ├── 01-con-discon-will-v5.c
│   │   │   ├── 01-con-discon-will.c
│   │   │   ├── 01-extended-auth-continue.c
│   │   │   ├── 01-extended-auth-failure.c
│   │   │   ├── 01-keepalive-pingreq.c
│   │   │   ├── 01-no-clean-session.c
│   │   │   ├── 01-pre-connect-callback.c
│   │   │   ├── 01-server-keepalive-pingreq.c
│   │   │   ├── 01-unpwd-set.c
│   │   │   ├── 01-will-set.c
│   │   │   ├── 01-will-unpwd-set.c
│   │   │   ├── 02-subscribe-helper-callback-qos2.c
│   │   │   ├── 02-subscribe-helper-simple-qos2.c
│   │   │   ├── 02-subscribe-qos0.c
│   │   │   ├── 02-subscribe-qos1-async1.c
│   │   │   ├── 02-subscribe-qos1-async2.c
│   │   │   ├── 02-subscribe-qos1.c
│   │   │   ├── 02-subscribe-qos2.c
│   │   │   ├── 02-unsubscribe-multiple-v5.c
│   │   │   ├── 02-unsubscribe-v5.c
│   │   │   ├── 02-unsubscribe.c
│   │   │   ├── 02-unsubscribe2-v5.c
│   │   │   ├── 03-publish-b2c-qos1-unexpected-puback.c
│   │   │   ├── 03-publish-b2c-qos1.c
│   │   │   ├── 03-publish-b2c-qos2-len.c
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.c
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.c
│   │   │   ├── 03-publish-b2c-qos2.c
│   │   │   ├── 03-publish-c2b-qos1-disconnect.c
│   │   │   ├── 03-publish-c2b-qos1-len.c
│   │   │   ├── 03-publish-c2b-qos1-receive-maximum.c
│   │   │   ├── 03-publish-c2b-qos2-disconnect.c
│   │   │   ├── 03-publish-c2b-qos2-len.c
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-0.c
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-1.c
│   │   │   ├── 03-publish-c2b-qos2-pubrec-error.c
│   │   │   ├── 03-publish-c2b-qos2-receive-maximum.c
│   │   │   ├── 03-publish-c2b-qos2.c
│   │   │   ├── 03-publish-loop-forever.c
│   │   │   ├── 03-publish-loop-manual.c
│   │   │   ├── 03-publish-loop-start.c
│   │   │   ├── 03-publish-loop.c
│   │   │   ├── 03-publish-qos0-no-payload.c
│   │   │   ├── 03-publish-qos0.c
│   │   │   ├── 03-request-response-1.c
│   │   │   ├── 03-request-response-2.c
│   │   │   ├── 03-request-response-correlation-1.c
│   │   │   ├── 04-retain-qos0.c
│   │   │   ├── 08-ssl-bad-cacert.c
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx-default.c
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx.c
│   │   │   ├── 08-ssl-connect-cert-auth-enc.c
│   │   │   ├── 08-ssl-connect-cert-auth.c
│   │   │   ├── 08-ssl-connect-no-auth.c
│   │   │   ├── 08-ssl-connect-san.c
│   │   │   ├── 08-ssl-fake-cacert.c
│   │   │   ├── 09-util-topic-tokenise.c
│   │   │   ├── 11-prop-oversize-packet.c
│   │   │   ├── 11-prop-recv.c
│   │   │   ├── 11-prop-send-content-type.c
│   │   │   ├── 11-prop-send-payload-format.c
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   └── fuzzish.c
│   │   ├── cpp/
│   │   │   ├── 01-con-discon-success-v5.cpp
│   │   │   ├── 01-con-discon-success.cpp
│   │   │   ├── 01-con-discon-will-clear.cpp
│   │   │   ├── 01-con-discon-will-v5.cpp
│   │   │   ├── 01-con-discon-will.cpp
│   │   │   ├── 01-extended-auth-continue.cpp
│   │   │   ├── 01-extended-auth-failure.cpp
│   │   │   ├── 01-keepalive-pingreq.cpp
│   │   │   ├── 01-no-clean-session.cpp
│   │   │   ├── 01-pre-connect-callback.cpp
│   │   │   ├── 01-server-keepalive-pingreq.cpp
│   │   │   ├── 01-unpwd-set.cpp
│   │   │   ├── 01-will-set.cpp
│   │   │   ├── 01-will-unpwd-set.cpp
│   │   │   ├── 02-subscribe-helper-callback-qos2.cpp
│   │   │   ├── 02-subscribe-helper-simple-qos2.cpp
│   │   │   ├── 02-subscribe-qos0.cpp
│   │   │   ├── 02-subscribe-qos1-async1.cpp
│   │   │   ├── 02-subscribe-qos1-async2.cpp
│   │   │   ├── 02-subscribe-qos1.cpp
│   │   │   ├── 02-subscribe-qos2.cpp
│   │   │   ├── 02-unsubscribe-v5.cpp
│   │   │   ├── 02-unsubscribe.cpp
│   │   │   ├── 03-publish-b2c-qos1-unexpected-puback.cpp
│   │   │   ├── 03-publish-b2c-qos1.cpp
│   │   │   ├── 03-publish-b2c-qos2-len.cpp
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubcomp.cpp
│   │   │   ├── 03-publish-b2c-qos2-unexpected-pubrel.cpp
│   │   │   ├── 03-publish-b2c-qos2.cpp
│   │   │   ├── 03-publish-c2b-qos1-disconnect.cpp
│   │   │   ├── 03-publish-c2b-qos1-len.cpp
│   │   │   ├── 03-publish-c2b-qos1-receive-maximum.cpp
│   │   │   ├── 03-publish-c2b-qos2-disconnect.cpp
│   │   │   ├── 03-publish-c2b-qos2-len.cpp
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-0.cpp
│   │   │   ├── 03-publish-c2b-qos2-maximum-qos-1.cpp
│   │   │   ├── 03-publish-c2b-qos2-pubrec-error.cpp
│   │   │   ├── 03-publish-c2b-qos2-receive-maximum.cpp
│   │   │   ├── 03-publish-c2b-qos2.cpp
│   │   │   ├── 03-publish-loop-forever.cpp
│   │   │   ├── 03-publish-loop-manual.cpp
│   │   │   ├── 03-publish-loop-start.cpp
│   │   │   ├── 03-publish-loop.cpp
│   │   │   ├── 03-publish-qos0-no-payload.cpp
│   │   │   ├── 03-publish-qos0.cpp
│   │   │   ├── 03-request-response-1.cpp
│   │   │   ├── 03-request-response-2.cpp
│   │   │   ├── 03-request-response-correlation-1.cpp
│   │   │   ├── 04-retain-qos0.cpp
│   │   │   ├── 08-ssl-bad-cacert.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx-default.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-custom-ssl-ctx.cpp
│   │   │   ├── 08-ssl-connect-cert-auth-enc.cpp
│   │   │   ├── 08-ssl-connect-cert-auth.cpp
│   │   │   ├── 08-ssl-connect-no-auth.cpp
│   │   │   ├── 08-ssl-connect-san.cpp
│   │   │   ├── 08-ssl-fake-cacert.cpp
│   │   │   ├── 09-util-topic-tokenise.cpp
│   │   │   ├── 11-prop-oversize-packet.cpp
│   │   │   ├── 11-prop-recv.cpp
│   │   │   ├── 11-prop-send-content-type.cpp
│   │   │   ├── 11-prop-send-payload-format.cpp
│   │   │   ├── CMakeLists.txt
│   │   │   └── Makefile
│   │   ├── data/
│   │   │   ├── AUTH.json
│   │   │   ├── CONNACK.json
│   │   │   ├── CONNECT.json
│   │   │   ├── DISCONNECT.json
│   │   │   ├── FORBIDDEN.json
│   │   │   ├── PINGREQ.json
│   │   │   ├── PINGRESP.json
│   │   │   ├── PUBACK.json
│   │   │   ├── PUBLISH.json
│   │   │   ├── PUBREC.json
│   │   │   ├── SUBSCRIBE.json
│   │   │   ├── UNSUBACK.json
│   │   │   └── UNSUBSCRIBE.json
│   │   ├── mosq_test_helper.py
│   │   ├── msg_sequence_test.py
│   │   └── test.py
│   ├── mock/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── apps/
│   │   │   ├── CMakeLists.txt
│   │   │   └── mosquitto_ctrl/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── Makefile
│   │   │       ├── ctrl_shell_mock.cpp
│   │   │       └── ctrl_shell_mock.hpp
│   │   ├── c_function_mock.hpp
│   │   ├── editline_mock.cpp
│   │   ├── editline_mock.hpp
│   │   ├── lib/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── actions_publish_mock.cpp
│   │   │   ├── actions_subscribe_mock.cpp
│   │   │   ├── actions_unsubscribe_mock.cpp
│   │   │   ├── callbacks_mock.cpp
│   │   │   ├── connect_mock.cpp
│   │   │   ├── extended_auth_mock.cpp
│   │   │   ├── helpers_mock.cpp
│   │   │   ├── libmosquitto_mock.cpp
│   │   │   ├── libmosquitto_mock.hpp
│   │   │   ├── loop_mock.cpp
│   │   │   ├── messages_mosq_mock.cpp
│   │   │   ├── net_mosq_mock.cpp
│   │   │   ├── options_mock.cpp
│   │   │   ├── socks_mosq_mock.cpp
│   │   │   ├── srv_mosq_mock.cpp
│   │   │   └── thread_mosq_mock.cpp
│   │   ├── libcommon/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Makefile
│   │   │   ├── base64_common_mock.cpp
│   │   │   ├── cjson_common.cpp
│   │   │   ├── file_common_mock.cpp
│   │   │   ├── libmosquitto_common_mock.cpp
│   │   │   ├── libmosquitto_common_mock.hpp
│   │   │   ├── memory_common_mock.cpp
│   │   │   ├── mqtt_common_mock.cpp
│   │   │   ├── password_common_mock.cpp
│   │   │   ├── property_common_mock.cpp
│   │   │   ├── random_common_mock.cpp
│   │   │   ├── strings_common_mock.cpp
│   │   │   ├── time_common_mock.cpp
│   │   │   ├── topic_common_mock.cpp
│   │   │   └── utf8_common_mock.cpp
│   │   ├── pthread_mock.cpp
│   │   └── pthread_mock.hpp
│   ├── mosq_test.py
│   ├── mqtt5_opts.py
│   ├── mqtt5_props.py
│   ├── mqtt5_rc.py
│   ├── old/
│   │   ├── Makefile
│   │   ├── msgsps_common.h
│   │   ├── msgsps_pub.c
│   │   └── msgsps_sub.c
│   ├── path_helper.h
│   ├── ptest.py
│   ├── random/
│   │   ├── Makefile
│   │   ├── auth_plugin.c
│   │   ├── pwfile
│   │   ├── random.conf
│   │   ├── random_client.py
│   │   └── test.py
│   ├── ssl/
│   │   ├── all-ca.crt
│   │   ├── client-encrypted.crt
│   │   ├── client-encrypted.key
│   │   ├── client-expired.crt
│   │   ├── client-expired.key
│   │   ├── client-revoked.crt
│   │   ├── client-revoked.key
│   │   ├── client.crt
│   │   ├── client.key
│   │   ├── crl-empty.pem
│   │   ├── crl.pem
│   │   ├── dhparam
│   │   ├── gen.sh
│   │   ├── openssl.cnf
│   │   ├── readme.txt
│   │   ├── server-expired.crt
│   │   ├── server-expired.key
│   │   ├── server-san.crt
│   │   ├── server-san.key
│   │   ├── server.crt
│   │   ├── server.key
│   │   ├── test-alt-ca.crt
│   │   ├── test-alt-ca.key
│   │   ├── test-bad-root-ca.crt
│   │   ├── test-bad-root-ca.key
│   │   ├── test-fake-root-ca.crt
│   │   ├── test-fake-root-ca.key
│   │   ├── test-root-ca.crt
│   │   ├── test-root-ca.key
│   │   ├── test-signing-ca.crt
│   │   └── test-signing-ca.key
│   └── unit/
│       ├── CMakeLists.txt
│       ├── Makefile
│       ├── broker/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── bridge_topic_test.c
│       │   ├── files/
│       │   │   ├── persist_read/
│       │   │   │   ├── corrupt-header-long.test-db
│       │   │   │   ├── corrupt-header-short.test-db
│       │   │   │   ├── empty.test-db
│       │   │   │   ├── unsupported-version.test-db
│       │   │   │   ├── v3-bad-chunk.test-db
│       │   │   │   ├── v3-cfg-bad-dbid.test-db
│       │   │   │   ├── v3-cfg-truncated.test-db
│       │   │   │   ├── v3-cfg.test-db
│       │   │   │   ├── v3-client-message.test-db
│       │   │   │   ├── v3-client.test-db
│       │   │   │   ├── v3-message-store.test-db
│       │   │   │   ├── v3-retain.test-db
│       │   │   │   ├── v3-sub.test-db
│       │   │   │   ├── v4-cfg.test-db
│       │   │   │   ├── v4-message-store.test-db
│       │   │   │   ├── v5-bad-chunk.test-db
│       │   │   │   ├── v5-cfg-truncated.test-db
│       │   │   │   ├── v5-client.test-db
│       │   │   │   ├── v6-base-msg-topic-0.test-db
│       │   │   │   ├── v6-cfg.test-db
│       │   │   │   ├── v6-client-message-props.test-db
│       │   │   │   ├── v6-client-message.test-db
│       │   │   │   ├── v6-client.test-db
│       │   │   │   ├── v6-message-store-props.test-db
│       │   │   │   ├── v6-message-store.test-db
│       │   │   │   ├── v6-retain.test-db
│       │   │   │   └── v6-sub.test-db
│       │   │   └── persist_write/
│       │   │       ├── empty.test-db
│       │   │       ├── v4-full.test-db
│       │   │       └── v6-message-store-no-ref.test-db
│       │   ├── keepalive_stubs.c
│       │   ├── keepalive_test.c
│       │   ├── persist_read_stubs.c
│       │   ├── persist_read_test.c
│       │   ├── persist_write_stubs.c
│       │   ├── persist_write_test.c
│       │   ├── stubs.c
│       │   ├── subs_stubs.c
│       │   └── subs_test.c
│       ├── lib/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── datatype_read.c
│       │   ├── datatype_write.c
│       │   ├── property_read.c
│       │   ├── property_user_read.c
│       │   ├── property_write.c
│       │   ├── publish_test.c
│       │   ├── stubs.c
│       │   └── test.c
│       ├── libcommon/
│       │   ├── CMakeLists.txt
│       │   ├── Makefile
│       │   ├── base64_test.c
│       │   ├── file_test.c
│       │   ├── property_add.c
│       │   ├── property_value.c
│       │   ├── strings_test.c
│       │   ├── test.c
│       │   ├── topic_test.c
│       │   ├── trim_test.c
│       │   └── utf8.c
│       ├── tls_stubs.c
│       └── tls_test.c
├── vcpkg.json
└── www/
    ├── README.md
    ├── conf.py
    ├── files/
    │   ├── manifest.json
    │   └── stickers/
    │       └── index.html
    ├── pages/
    │   ├── documentation/
    │   │   ├── authentication-methods.md
    │   │   ├── dynamic-security.md
    │   │   ├── listeners/
    │   │   │   ├── haproxy.md
    │   │   │   └── per_listener_settings.md
    │   │   ├── migrating-to-2-0.md
    │   │   ├── persistence/
    │   │   │   └── sqlite.md
    │   │   ├── plugins/
    │   │   │   ├── acl-file.md
    │   │   │   ├── password-file.md
    │   │   │   └── sparkplug-aware.md
    │   │   └── using-the-snap.md
    │   ├── documentation.md
    │   ├── download.md
    │   ├── index.html
    │   ├── roadmap.md
    │   └── security.md
    ├── plugins/
    │   ├── __init__.py
    │   └── docbookmanpage/
    │       ├── docbookmanpage.plugin
    │       ├── docbookmanpage.py
    │       └── html.xsl
    ├── posts/
    │   ├── 2009/
    │   │   └── 12/
    │   │       ├── version-0-2-released.md
    │   │       └── version-0-3-released.md
    │   ├── 2010/
    │   │   ├── 01/
    │   │   │   ├── mailing-list-irc.md
    │   │   │   ├── version-0-4-1-released.md
    │   │   │   └── version-0-4-released.md
    │   │   ├── 02/
    │   │   │   └── version-0-4-2-released.md
    │   │   ├── 03/
    │   │   │   ├── google-powermeter.md
    │   │   │   ├── upgrading-to-0-5-1.md
    │   │   │   ├── version-0-5-1-released.md
    │   │   │   ├── version-0-5-2-released.md
    │   │   │   ├── version-0-5-3-released.md
    │   │   │   └── version-0-5-4-released.md
    │   │   ├── 04/
    │   │   │   ├── help-wanted-rpm-packaging.md
    │   │   │   ├── mind-control-mqtt.md
    │   │   │   └── oggcamp.md
    │   │   ├── 05/
    │   │   │   ├── fedora-packages-available.md
    │   │   │   ├── gentoo-ebuilds-available.md
    │   │   │   ├── mosquitto-org.md
    │   │   │   ├── mqtt-push-on-android.md
    │   │   │   ├── mqtt-wiki.md
    │   │   │   ├── version-0-6-1-released.md
    │   │   │   └── version-0-6-released.md
    │   │   ├── 06/
    │   │   │   ├── automation-has-the-oven-warmed-up-yet.md
    │   │   │   ├── google-powermeter-step-by-step.attachments.json
    │   │   │   ├── google-powermeter-step-by-step.md
    │   │   │   ├── mosquitto-0-7rc1.md
    │   │   │   └── version-0-7-released.md
    │   │   ├── 07/
    │   │   │   ├── mosquitto-on-opensuse-11-3.md
    │   │   │   └── mqtt-client-library.md
    │   │   ├── 08/
    │   │   │   ├── compiling-mosquitto-on-mac-os-x.md
    │   │   │   ├── mosquitto-running-on-mac-os-x.md
    │   │   │   ├── mqtt-v3-1.md
    │   │   │   ├── version-0-8-1-released.md
    │   │   │   ├── version-0-8-2.md
    │   │   │   └── version-0-8-released.md
    │   │   ├── 09/
    │   │   │   ├── debian-packages.md
    │   │   │   └── mqtt-with-php.md
    │   │   ├── 10/
    │   │   │   ├── man-page-translations.md
    │   │   │   ├── one-year-old.md
    │   │   │   └── version-0-8-3-released.md
    │   │   ├── 11/
    │   │   │   ├── distro-packaging.md
    │   │   │   ├── mosquitto-0-9test2.md
    │   │   │   └── version-0-9-released.md
    │   │   └── 12/
    │   │       └── version-0-9-1-released.md
    │   ├── 2011/
    │   │   ├── 01/
    │   │   │   ├── mosquitto-for-slackware.md
    │   │   │   └── mqtt-news.md
    │   │   ├── 02/
    │   │   │   ├── lightweight-messaging-and-linux.md
    │   │   │   ├── mosquitto-on-maemo.md
    │   │   │   ├── mqtt-on-android.md
    │   │   │   └── version-0-9-2-released.md
    │   │   ├── 03/
    │   │   │   ├── api-documentation.md
    │   │   │   ├── mosquitto-in-mac-homebrew.md
    │   │   │   └── version-0-9-3-released.md
    │   │   ├── 04/
    │   │   │   └── version-0-10-released.md
    │   │   ├── 05/
    │   │   │   ├── mqtt-ontology.md
    │   │   │   └── version-0-10-1-released.md
    │   │   ├── 06/
    │   │   │   ├── nanode-a-cheap-networked-arduino-clone.md
    │   │   │   ├── version-0-10-2-released.md
    │   │   │   ├── version-0-11-1-released.md
    │   │   │   ├── version-0-11-2-released.md
    │   │   │   └── version-0-11-released.md
    │   │   ├── 07/
    │   │   │   ├── debian-and-ubuntu-packaging.md
    │   │   │   ├── lua-mqtt-client.md
    │   │   │   ├── mosquitto-on-qnx.md
    │   │   │   ├── version-0-11-3-released.md
    │   │   │   ├── version-0-12-released.md
    │   │   │   └── wireshark-mqtt-decoder.md
    │   │   ├── 08/
    │   │   │   ├── arch-linux-package.md
    │   │   │   ├── facebook-using-mqtt.attachments.json
    │   │   │   ├── facebook-using-mqtt.md
    │   │   │   ├── mosquitto-on-openwrt.md
    │   │   │   └── mqtt-standardisation.md
    │   │   ├── 09/
    │   │   │   └── version-0-13-released.md
    │   │   ├── 10/
    │   │   │   ├── mqtt-power-usage-on-android.md
    │   │   │   └── two.md
    │   │   ├── 11/
    │   │   │   ├── android-mqtt-example-project.md
    │   │   │   ├── ibm-java-and-c-clients-to-be-open-source.md
    │   │   │   ├── new-linux-repositories.md
    │   │   │   ├── version-0-14-1-released.md
    │   │   │   ├── version-0-14-2-released.md
    │   │   │   └── version-0-14-released.md
    │   │   └── 12/
    │   │       ├── mqtt-on-nanode.md
    │   │       └── version-0-14-3-released.md
    │   ├── 2012/
    │   │   ├── 01/
    │   │   │   ├── challenge-web-based-mqtt-graphing.md
    │   │   │   ├── do-you-use-mqtt.md
    │   │   │   ├── mosquitto-test-server.md
    │   │   │   └── version-0-14-4-released.md
    │   │   ├── 02/
    │   │   │   ├── mqtt2pachube.md
    │   │   │   └── version-0-15-released.md
    │   │   ├── 03/
    │   │   │   ├── quick-start-guide-for-mqtt-with-pachube.md
    │   │   │   └── upcoming-incompatible-library-changes.md
    │   │   ├── 05/
    │   │   │   └── python-client-module-available-for-testing.md
    │   │   ├── 06/
    │   │   │   ├── ipv6-on-test-server.md
    │   │   │   └── ssl-support-on-test-server.md
    │   │   ├── 07/
    │   │   │   └── upcoming-release.md
    │   │   ├── 08/
    │   │   │   ├── baby.attachments.json
    │   │   │   ├── baby.md
    │   │   │   ├── bugfix-coming-soon.md
    │   │   │   ├── version-1-0-1-released.md
    │   │   │   ├── version-1-0-2-released.md
    │   │   │   └── version-1-0-released.md
    │   │   ├── 09/
    │   │   │   ├── updating-password-files.md
    │   │   │   └── version-1-0-3-released.md
    │   │   ├── 10/
    │   │   │   └── version-1-0-4-released.md
    │   │   ├── 11/
    │   │   │   ├── making-mosquitto-packages-for-debian-yourself.md
    │   │   │   └── version-1-0-5-released.md
    │   │   └── 12/
    │   │       ├── libmosquitto-go-bindings.md
    │   │       └── version-1-1-released.md
    │   ├── 2013/
    │   │   ├── 01/
    │   │   │   ├── mosquitto-debian-repository.md
    │   │   │   ├── version-1-1-1-released.md
    │   │   │   └── version-1-1-2-released.md
    │   │   ├── 02/
    │   │   │   ├── mqtt-standardisation-oasis-call-for-participation.md
    │   │   │   └── version-1-1-3-released.md
    │   │   ├── 04/
    │   │   │   └── some-interesting-mqtt-things.md
    │   │   ├── 05/
    │   │   │   └── mosquitto-javascript-client-deprecated.md
    │   │   ├── 07/
    │   │   │   ├── authentication-plugins.md
    │   │   │   └── version-1-2-near-complete.md
    │   │   ├── 08/
    │   │   │   ├── mosquitto-on-fedora.md
    │   │   │   ├── mqtt-watchdir.md
    │   │   │   └── version-1-2-released.md
    │   │   ├── 09/
    │   │   │   └── version-1-2-1-released.md
    │   │   ├── 10/
    │   │   │   └── version-1-2-2-released.md
    │   │   └── 12/
    │   │       ├── paho-mqtt-python-client.md
    │   │       └── version-1-2-3-released.md
    │   ├── 2014/
    │   │   ├── 03/
    │   │   │   ├── version-1-3-1-released.md
    │   │   │   └── version-1-3-released.md
    │   │   ├── 05/
    │   │   │   ├── new-arrival.attachments.json
    │   │   │   └── new-arrival.md
    │   │   ├── 07/
    │   │   │   └── version-1-3-2-released.md
    │   │   ├── 08/
    │   │   │   ├── version-1-3-3-released.md
    │   │   │   └── version-1-3-4-released.md
    │   │   └── 10/
    │   │       ├── mosquitto-and-poodle.md
    │   │       ├── unintended-change-of-behaviour-in-1-3-4.md
    │   │       └── version-1-3-5-released.md
    │   ├── 2015/
    │   │   ├── 01/
    │   │   │   └── seeking-sponsorship.md
    │   │   ├── 02/
    │   │   │   └── version-1-4-released.md
    │   │   ├── 04/
    │   │   │   └── version-1-4-1-released.md
    │   │   ├── 05/
    │   │   │   ├── mosquitto-and-current-unreleased-libwebsockets-branch.md
    │   │   │   └── version-1-4-2-released.md
    │   │   ├── 08/
    │   │   │   └── version-1-4-3-released.md
    │   │   ├── 09/
    │   │   │   └── version-1-4-4-released.md
    │   │   ├── 11/
    │   │   │   └── version-1-4-5-released.md
    │   │   └── 12/
    │   │       ├── using-lets-encrypt-certificates-with-mosquitto.md
    │   │       └── version-1-4-7-released.md
    │   ├── 2016/
    │   │   ├── 01/
    │   │   │   └── test6-mosquitto-org.md
    │   │   ├── 02/
    │   │   │   └── version-1-4-8-released.md
    │   │   ├── 03/
    │   │   │   ├── logo-contest-results-for-shortlisting.md
    │   │   │   ├── logo-contest.md
    │   │   │   └── repository-moved-to-github.md
    │   │   ├── 05/
    │   │   │   ├── stickers.attachments.json
    │   │   │   └── stickers.md
    │   │   ├── 06/
    │   │   │   └── version-1-4-9-released.md
    │   │   ├── 08/
    │   │   │   ├── mqtt-v5-draft-features.md
    │   │   │   └── version-1-4-10-released.md
    │   │   └── 12/
    │   │       └── pre-christmas-update.md
    │   ├── 2017/
    │   │   ├── 02/
    │   │   │   └── version-1-4-11-released.md
    │   │   ├── 03/
    │   │   │   ├── for-the-final-time.attachments.json
    │   │   │   └── for-the-final-time.md
    │   │   ├── 05/
    │   │   │   └── security-advisory-cve-2017-7650.md
    │   │   ├── 06/
    │   │   │   ├── citing-eclipse-mosquitto.md
    │   │   │   └── security-advisory-cve-2017-9868.md
    │   │   └── 07/
    │   │       ├── version-1-4-13-released.md
    │   │       └── version-1-4-14-released.md
    │   ├── 2018/
    │   │   ├── 01/
    │   │   │   └── mosquitto-debian-repo-key-updated.md
    │   │   ├── 02/
    │   │   │   └── security-advisory-cve-2017-7651-cve-2017-7652.md
    │   │   ├── 05/
    │   │   │   ├── press-release.md
    │   │   │   └── version-1-5-released.md
    │   │   ├── 08/
    │   │   │   ├── updated-debian-repository-backend.md
    │   │   │   └── version-151-released.md
    │   │   ├── 09/
    │   │   │   ├── security-advisory-cve-2018-12543.md
    │   │   │   └── version-152-released.md
    │   │   ├── 11/
    │   │   │   ├── mqtt5-progress.md
    │   │   │   └── version-154-released.md
    │   │   └── 12/
    │   │       └── version-155-released.md
    │   ├── 2019/
    │   │   ├── 02/
    │   │   │   ├── mqtt5-test-release.md
    │   │   │   ├── version-1-5-6-released.md
    │   │   │   ├── version-1-5-7-released.md
    │   │   │   └── version-1-5-8-released.md
    │   │   ├── 04/
    │   │   │   ├── version-1-6-1-released.md
    │   │   │   ├── version-1-6-2-released.md
    │   │   │   └── version-1-6-released.md
    │   │   ├── 06/
    │   │   │   └── version-1-6-3-released.md
    │   │   ├── 08/
    │   │   │   └── version-1-6-4-released.md
    │   │   ├── 09/
    │   │   │   ├── version-1-6-5-released.md
    │   │   │   ├── version-1-6-6-released.md
    │   │   │   └── version-1-6-7-released.md
    │   │   └── 11/
    │   │       └── version-1-6-8-released.md
    │   ├── 2020/
    │   │   ├── 02/
    │   │   │   └── version-1-6-9-released.md
    │   │   ├── 05/
    │   │   │   └── version-1-6-10-released.md
    │   │   ├── 06/
    │   │   │   ├── mosquitto-ubuntu-appliance.md
    │   │   │   └── test-mosquitto-org-cert-updated.md
    │   │   ├── 08/
    │   │   │   ├── version-1-6-11-released.md
    │   │   │   └── version-1-6-12-released.md
    │   │   └── 12/
    │   │       ├── version-2-0-0-released.md
    │   │       ├── version-2-0-2-released.md
    │   │       ├── version-2-0-3-released.md
    │   │       └── version-2-0-4-released.md
    │   ├── 2021/
    │   │   ├── 01/
    │   │   │   ├── version-2-0-5-released.md
    │   │   │   └── version-2-0-6-released.md
    │   │   ├── 02/
    │   │   │   ├── version-2-0-7-released.md
    │   │   │   └── version-2-0-8-released.md
    │   │   ├── 03/
    │   │   │   └── version-2-0-9-released.md
    │   │   ├── 04/
    │   │   │   └── version-2-0-10-released.md
    │   │   ├── 06/
    │   │   │   └── version-2-0-11-released.md
    │   │   ├── 08/
    │   │   │   └── version-2-0-12-released.md
    │   │   ├── 10/
    │   │   │   └── version-2-0-13-released.md
    │   │   └── 11/
    │   │       └── version-2-0-14-released.md
    │   ├── 2022/
    │   │   └── 08/
    │   │       └── version-2-0-15-released.md
    │   ├── 2023/
    │   │   ├── 08/
    │   │   │   ├── version-2-0-16-released.md
    │   │   │   └── version-2-0-17-released.md
    │   │   └── 09/
    │   │       └── version-2-0-18-released.md
    │   ├── 2024/
    │   │   └── 10/
    │   │       ├── version-2-0-19-released.md
    │   │       └── version-2-0-20-released.md
    │   ├── 2025/
    │   │   ├── 03/
    │   │   │   └── version-2-0-21-released.md
    │   │   └── 07/
    │   │       └── version-2-0-22-released.md
    │   └── 2026/
    │       ├── 01/
    │       │   ├── rc-2.1.0rc1-available.md
    │       │   └── version-2-1-0-released.md
    │       └── 02/
    │           ├── version-2-1-1-released.md
    │           └── version-2-1-2-released.md
    ├── templates/
    │   └── book.tmpl
    └── themes/
        └── mosquitto/
            ├── assets/
            │   └── css/
            │       ├── bulma.css
            │       ├── local.css
            │       └── man.css
            ├── engine
            ├── parent
            └── templates/
                ├── base.tmpl
                ├── base_footer.tmpl
                ├── base_header.tmpl
                ├── base_helper.tmpl
                ├── index.tmpl
                ├── post.tmpl
                ├── post_header.tmpl
                └── story.tmpl
Download .txt
Showing preview only (591K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6236 symbols across 982 files)

FILE: apps/db_dump/db_dump.c
  type client_data (line 45) | struct client_data {
  type base_msg_chunk (line 54) | struct base_msg_chunk {
  type mosquitto_db (line 60) | struct mosquitto_db
  type client_data (line 78) | struct client_data
  type base_msg_chunk (line 79) | struct base_msg_chunk
  function free__sub (line 82) | static void free__sub(struct P_sub *chunk)
  function free__client (line 89) | static void free__client(struct P_client *chunk)
  function free__client_msg (line 96) | static void free__client_msg(struct P_client_msg *chunk)
  function free__base_msg (line 102) | static void free__base_msg(struct P_base_msg *chunk)
  function dump__cfg_chunk_process (line 110) | static int dump__cfg_chunk_process(FILE *db_fd, uint32_t length)
  function dump__client_chunk_process (line 154) | static int dump__client_chunk_process(FILE *db_fd, uint32_t length)
  function dump__client_msg_chunk_process (line 197) | static int dump__client_msg_chunk_process(FILE *db_fd, uint32_t length)
  function dump__base_msg_chunk_process (line 241) | static int dump__base_msg_chunk_process(FILE *db_fptr, uint32_t length)
  function dump__retain_chunk_process (line 334) | static int dump__retain_chunk_process(FILE *db_fd, uint32_t length)
  function dump__sub_chunk_process (line 368) | static int dump__sub_chunk_process(FILE *db_fd, uint32_t length)
  function report_client_stats (line 407) | static void report_client_stats(void)
  function cleanup_client_stats (line 420) | static void cleanup_client_stats()
  function cleanup_msg_store (line 438) | static void cleanup_msg_store()
  function main (line 455) | int main(int argc, char *argv[])

FILE: apps/db_dump/db_dump.h
  type P_client (line 23) | struct P_client
  type P_client_msg (line 24) | struct P_client_msg
  type P_base_msg (line 25) | struct P_base_msg
  type P_sub (line 26) | struct P_sub
  type P_base_msg (line 31) | struct P_base_msg
  type P_client (line 32) | struct P_client
  type P_client_msg (line 33) | struct P_client_msg
  type P_retain (line 34) | struct P_retain
  type P_sub (line 35) | struct P_sub

FILE: apps/db_dump/json.c
  function json_init (line 51) | void json_init(void)
  function json_print (line 72) | void json_print(void)
  function json_cleanup (line 80) | void json_cleanup(void)
  function json_add_base_msg (line 86) | void json_add_base_msg(struct P_base_msg *chunk)
  function json_add_client (line 126) | void json_add_client(struct P_client *chunk)
  function json_add_client_msg (line 145) | void json_add_client_msg(struct P_client_msg *chunk)
  function json_add_subscription (line 163) | void json_add_subscription(struct P_sub *chunk)
  function json_add_retained_msg (line 178) | void json_add_retained_msg(struct P_retain *chunk)

FILE: apps/db_dump/print.c
  function print__properties (line 29) | static void print__properties(mosquitto_property *properties)
  function print__client (line 77) | void print__client(struct P_client *chunk, uint32_t length)
  function print__client_msg (line 94) | void print__client_msg(struct P_client_msg *chunk, uint32_t length)
  function print__base_msg (line 112) | void print__base_msg(struct P_base_msg *chunk, uint32_t length)
  function print__sub (line 140) | void print__sub(struct P_sub *chunk, uint32_t length)

FILE: apps/db_dump/stubs.c
  type mosquitto (line 12) | struct mosquitto
  function context__add_to_by_id (line 18) | void context__add_to_by_id(struct mosquitto *context)
  function db__message_store (line 24) | int db__message_store(const struct mosquitto *source, struct mosquitto__...
  function db__msg_store_ref_inc (line 30) | void db__msg_store_ref_inc(struct mosquitto__base_msg *base_msg)
  function log__printf (line 36) | int log__printf(struct mosquitto *mosq, unsigned int level, const char *...
  function retain__store (line 42) | int retain__store(const char *topic, struct mosquitto__base_msg *base_ms...
  function sub__add (line 48) | int sub__add(struct mosquitto *context, const struct mosquitto_subscript...
  function db__msg_add_to_inflight_stats (line 54) | void db__msg_add_to_inflight_stats(struct mosquitto_msg_data *msg_data, ...
  function db__msg_add_to_queued_stats (line 60) | void db__msg_add_to_queued_stats(struct mosquitto_msg_data *msg_data, st...
  function session_expiry__add_from_persistence (line 66) | int session_expiry__add_from_persistence(struct mosquitto *context, time...

FILE: apps/mosquitto_ctrl/broker.c
  function broker__print_usage (line 32) | void broker__print_usage(void)
  function print_listeners (line 49) | static void print_listeners(cJSON *j_response)
  function print_plugin_info (line 95) | static void print_plugin_info(cJSON *j_response)
  function broker__payload_callback (line 142) | static void broker__payload_callback(struct mosq_ctrl *ctrl, long payloa...
  function broker__list_plugins (line 196) | static int broker__list_plugins(int argc, char *argv[], cJSON *j_command)
  function broker__list_listeners (line 211) | static int broker__list_listeners(int argc, char *argv[], cJSON *j_command)
  function broker__main (line 233) | int broker__main(int argc, char *argv[], struct mosq_ctrl *ctrl)

FILE: apps/mosquitto_ctrl/client.c
  function on_message (line 36) | static void on_message(struct mosquitto *mosq, void *obj, const struct m...
  function on_publish (line 51) | static void on_publish(struct mosquitto *mosq, void *obj, int mid, int r...
  function on_subscribe (line 65) | static void on_subscribe(struct mosquitto *mosq, void *obj, int mid, int...
  function on_connect (line 96) | static void on_connect(struct mosquitto *mosq, void *obj, int reason_cod...
  function client_request_response (line 125) | int client_request_response(struct mosq_ctrl *ctrl)

FILE: apps/mosquitto_ctrl/ctrl_shell.c
  type ctrl_shell (line 86) | struct ctrl_shell
  type completion_tree_cmd (line 88) | struct completion_tree_cmd
  function signal_winch (line 91) | static void signal_winch(int signal)
  function signal_term (line 98) | static void signal_term(int signal)
  function term_set_flag (line 105) | static void term_set_flag(bool set, unsigned int flag)
  function term_set_echo (line 119) | static void term_set_echo(bool echo)
  function term_set_canon (line 125) | static void term_set_canon(bool canon)
  function ctrl_shell_rtrim (line 131) | void ctrl_shell_rtrim(char *buf)
  function ctrl_shell_get_password (line 141) | bool ctrl_shell_get_password(char *buf, size_t len)
  function response_wait (line 157) | static int response_wait(void)
  function ctrl_shell_publish_blocking (line 178) | int ctrl_shell_publish_blocking(cJSON *j_command)
  function ctrl_shell__connect_blocking (line 214) | void ctrl_shell__connect_blocking(const char *hostname, int port)
  function ctrl_shell_line_callback_set (line 229) | void ctrl_shell_line_callback_set(void (*callback)(char *line))
  function ctrl_shell_command_generic_arg0 (line 235) | int ctrl_shell_command_generic_arg0(const char *command)
  function ctrl_shell_command_generic_arg1 (line 244) | int ctrl_shell_command_generic_arg1(const char *command, const char *ite...
  function ctrl_shell_command_generic_int_arg1 (line 262) | int ctrl_shell_command_generic_int_arg1(const char *command, const char ...
  function ctrl_shell_command_generic_arg2 (line 281) | int ctrl_shell_command_generic_arg2(const char *command, const char *ite...
  function ctrl_shell__subscribe_blocking (line 301) | static int ctrl_shell__subscribe_blocking(const char *topic, void (*modu...
  function ctrl_shell_callback_final (line 337) | bool ctrl_shell_callback_final(char *line)
  function ctrl_shell_print_help_final (line 359) | void ctrl_shell_print_help_final(const char *command, const char *modul)
  function calc_generator_arg (line 380) | static void calc_generator_arg(int start)
  type completion_tree_cmd (line 410) | struct completion_tree_cmd
  type completion_tree_arg (line 411) | struct completion_tree_arg
  function ctrl_shell_completion_commands_set (line 453) | void ctrl_shell_completion_commands_set(struct completion_tree_root *new...
  function my_get_address (line 472) | int my_get_address(int sock, char *buf, size_t len, uint16_t *remote_port)
  function on_connect_reconnect (line 506) | static void on_connect_reconnect(struct mosquitto *mosq, void *userdata,...
  function ctrl_shell__on_connect (line 519) | void ctrl_shell__on_connect(struct mosquitto *mosq, void *userdata, int rc)
  function ctrl_shell__on_message (line 533) | void ctrl_shell__on_message(struct mosquitto *mosq, void *userdata, cons...
  function ctrl_shell__on_publish (line 567) | void ctrl_shell__on_publish(struct mosquitto *mosq, void *userdata, int ...
  function ctrl_shell__on_subscribe (line 585) | void ctrl_shell__on_subscribe(struct mosquitto *mosq, void *userdata, in...
  function ctrl_shell__load_module (line 602) | void ctrl_shell__load_module(void (*mod_init)(struct ctrl_shell__module ...
  function set_no_colour (line 618) | void set_no_colour(void)
  function set_bg_light (line 632) | static void set_bg_light(void)
  function set_bg_dark (line 645) | static void set_bg_dark(void)
  function get_bg (line 658) | static int get_bg(void)
  function ctrl_shell__cleanup (line 714) | void ctrl_shell__cleanup(void)
  function ctrl_shell__main (line 737) | void ctrl_shell__main(struct mosq_config *config)
  function print_label (line 822) | static void print_label(unsigned int level, const char *label)
  function ctrl_shell_print_label (line 841) | void ctrl_shell_print_label(unsigned int level, const char *label)
  function ctrl_shell_print_label_value (line 848) | void ctrl_shell_print_label_value(unsigned int level, const char *label,...
  function ctrl_shell_print_value (line 869) | void ctrl_shell_print_value(unsigned int level, const char *fmt, ...)
  function ctrl_shell_print_help_command (line 885) | void ctrl_shell_print_help_command(const char *cmd)
  function ctrl_shell_print_help_desc (line 891) | void ctrl_shell_print_help_desc(const char *desc)

FILE: apps/mosquitto_ctrl/ctrl_shell.h
  type completion_tree_arg (line 48) | struct completion_tree_arg {
  type completion_tree_arg_list (line 53) | struct completion_tree_arg_list {
  type completion_tree_cmd (line 58) | struct completion_tree_cmd {
  type completion_tree_root (line 65) | struct completion_tree_root {
  type completion_tree_root (line 78) | struct completion_tree_root
  type completion_tree_arg_list (line 82) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 83) | struct completion_tree_arg_list
  type completion_tree_cmd (line 84) | struct completion_tree_cmd
  type completion_tree_root (line 85) | struct completion_tree_root
  type completion_tree_cmd (line 86) | struct completion_tree_cmd
  type completion_tree_root (line 86) | struct completion_tree_root
  type completion_tree_arg_list (line 86) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 87) | struct completion_tree_arg_list
  type completion_tree_cmd (line 88) | struct completion_tree_cmd
  type completion_tree_arg_list (line 88) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 89) | struct completion_tree_arg_list
  type completion_tree_cmd (line 89) | struct completion_tree_cmd
  type completion_tree_arg_list (line 90) | struct completion_tree_arg_list

FILE: apps/mosquitto_ctrl/ctrl_shell_broker.c
  type completion_tree_root (line 31) | struct completion_tree_root
  function command_tree_create (line 34) | static void command_tree_create(void)
  function print_help (line 56) | static void print_help(char **saveptr)
  function line_callback (line 80) | static void line_callback(char *line)
  function print_plugins (line 118) | static void print_plugins(cJSON *j_data)
  function print_listeners (line 147) | static void print_listeners(cJSON *j_data)
  function handle_response (line 178) | static void handle_response(const char *command, cJSON *j_data, const ch...
  function on_subscribe (line 190) | static void on_subscribe(void)
  function ctrl_shell__broker_cleanup (line 195) | static void ctrl_shell__broker_cleanup(void)
  function ctrl_shell__broker_init (line 202) | void ctrl_shell__broker_init(struct ctrl_shell__module *mod)

FILE: apps/mosquitto_ctrl/ctrl_shell_client.c
  function ctrl_shell__connect (line 31) | int ctrl_shell__connect(void)
  function ctrl_shell__disconnect (line 76) | void ctrl_shell__disconnect(void)

FILE: apps/mosquitto_ctrl/ctrl_shell_completion_tree.c
  function completion_tree_arg_list_args_free (line 30) | void completion_tree_arg_list_args_free(struct completion_tree_arg_list ...
  function completion_tree_arg_list_free (line 48) | void completion_tree_arg_list_free(struct completion_tree_arg_list *arg_...
  function completion_tree_cmd_free (line 62) | void completion_tree_cmd_free(struct completion_tree_cmd *cmd)
  function completion_tree_free (line 76) | void completion_tree_free(struct completion_tree_root *tree)
  type completion_tree_cmd (line 93) | struct completion_tree_cmd
  type completion_tree_root (line 93) | struct completion_tree_root
  type completion_tree_arg_list (line 93) | struct completion_tree_arg_list
  type completion_tree_cmd (line 95) | struct completion_tree_cmd
  type completion_tree_cmd (line 97) | struct completion_tree_cmd
  type completion_tree_arg_list (line 112) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 114) | struct completion_tree_arg_list
  function completion_tree_cmd_append_arg_list (line 118) | void completion_tree_cmd_append_arg_list(struct completion_tree_cmd *cmd...
  type completion_tree_arg_list (line 133) | struct completion_tree_arg_list
  type completion_tree_cmd (line 133) | struct completion_tree_cmd
  type completion_tree_arg_list (line 139) | struct completion_tree_arg_list
  function completion_tree_arg_list_add_arg (line 151) | void completion_tree_arg_list_add_arg(struct completion_tree_arg_list *a...

FILE: apps/mosquitto_ctrl/ctrl_shell_dynsec.c
  type completion_tree_root (line 32) | struct completion_tree_root
  type completion_tree_arg_list (line 33) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 34) | struct completion_tree_arg_list
  type completion_tree_arg_list (line 35) | struct completion_tree_arg_list
  function command_tree_create (line 39) | static void command_tree_create(void)
  function print_help (line 222) | static void print_help(char **saveptr)
  function send_set_default_acl_access (line 360) | static int send_set_default_acl_access(char **saveptr)
  function list_update (line 398) | static int list_update(const char *command)
  function list_generic (line 409) | static int list_generic(const char *command, char **saveptr)
  function send_create_client (line 429) | static int send_create_client(char **saveptr)
  function send_add_role_acl (line 472) | static int send_add_role_acl(char **saveptr)
  function send_remove_role_acl (line 525) | static int send_remove_role_acl(char **saveptr)
  function send_modify (line 561) | static int send_modify(const char *command, const char *objectname, char...
  function send_set_client_password (line 598) | static int send_set_client_password(char **saveptr)
  function line_callback (line 634) | static void line_callback(char *line)
  function print_json_value (line 747) | static void print_json_value(cJSON *value, const char *null_value)
  function print_json_array (line 765) | static void print_json_array(cJSON *j_list, const char *label, const cha...
  function print_details (line 792) | static void print_details(cJSON *j_data)
  function print_client (line 811) | static void print_client(cJSON *j_data)
  function print_group (line 858) | static void print_group(cJSON *j_data)
  function print_role (line 893) | static void print_role(cJSON *j_data)
  function print_default_acls (line 954) | static void print_default_acls(cJSON *j_data)
  function response_callback (line 975) | static void response_callback(const char *command, cJSON *j_data, const ...
  function on_subscribe (line 1040) | static void on_subscribe(void)
  function ctrl_shell__dynsec_cleanup (line 1054) | static void ctrl_shell__dynsec_cleanup(void)
  function ctrl_shell__dynsec_init (line 1073) | void ctrl_shell__dynsec_init(struct ctrl_shell__module *mod)

FILE: apps/mosquitto_ctrl/ctrl_shell_internal.h
  type ctrl_shell (line 41) | struct ctrl_shell {
  type ctrl_shell__module (line 70) | struct ctrl_shell__module {
  type ctrl_shell (line 80) | struct ctrl_shell
  type ctrl_shell__module (line 91) | struct ctrl_shell__module
  type mosquitto (line 94) | struct mosquitto
  type mosquitto (line 95) | struct mosquitto
  type mosquitto (line 96) | struct mosquitto
  type mosquitto (line 97) | struct mosquitto
  type mosquitto_message (line 97) | struct mosquitto_message
  type ctrl_shell__module (line 99) | struct ctrl_shell__module
  type ctrl_shell__module (line 100) | struct ctrl_shell__module
  type mosq_config (line 102) | struct mosq_config

FILE: apps/mosquitto_ctrl/ctrl_shell_io.c
  function ctrl_shell__output (line 24) | void ctrl_shell__output(const char *buf)

FILE: apps/mosquitto_ctrl/ctrl_shell_post_connect.c
  type completion_tree_root (line 29) | struct completion_tree_root
  function command_tree_create (line 32) | static void command_tree_create(void)
  function print_help (line 53) | static void print_help(char **saveptr)
  type module_data (line 83) | struct module_data {
  type module_data (line 88) | struct module_data
  function line_callback (line 94) | static void line_callback(char *line)
  function ctrl_shell__post_connect_cleanup (line 142) | void ctrl_shell__post_connect_cleanup(void)
  function ctrl_shell__post_connect_init (line 149) | void ctrl_shell__post_connect_init(void)

FILE: apps/mosquitto_ctrl/ctrl_shell_pre_connect.c
  type completion_tree_root (line 30) | struct completion_tree_root
  function command_tree_create (line 33) | static void command_tree_create(void)
  function print_help (line 53) | void print_help(char **saveptr)
  function line_callback (line 96) | static void line_callback(char *line)
  function ctrl_shell__pre_connect_cleanup (line 208) | void ctrl_shell__pre_connect_cleanup(void)
  function ctrl_shell__pre_connect_init (line 215) | void ctrl_shell__pre_connect_init(void)

FILE: apps/mosquitto_ctrl/ctrl_shell_printf.c
  function ctrl_shell_vprintf (line 26) | void ctrl_shell_vprintf(const char *fmt, va_list va)
  function ctrl_shell_printf (line 34) | void ctrl_shell_printf(const char *fmt, ...)

FILE: apps/mosquitto_ctrl/dynsec.c
  function dynsec__print_usage (line 41) | void dynsec__print_usage(void)
  function print_list (line 107) | static void print_list(cJSON *j_response, const char *arrayname, const c...
  function print_json_value (line 136) | static void print_json_value(cJSON *value, const char *null_value)
  function print_json_array (line 154) | static void print_json_array(cJSON *j_list, int slen, const char *label,...
  function print_client (line 184) | static void print_client(cJSON *j_response)
  function print_group (line 226) | static void print_group(cJSON *j_response)
  function print_role (line 255) | static void print_role(cJSON *j_response)
  function print_anonymous_group (line 315) | static void print_anonymous_group(cJSON *j_response)
  function print_default_acl_access (line 340) | static void print_default_acl_access(cJSON *j_response)
  function dynsec__payload_callback (line 371) | static void dynsec__payload_callback(struct mosq_ctrl *ctrl, long payloa...
  function dynsec__set_default_acl_access (line 443) | static int dynsec__set_default_acl_access(int argc, char *argv[], cJSON ...
  function dynsec__get_default_acl_access (line 496) | static int dynsec__get_default_acl_access(int argc, char *argv[], cJSON ...
  function cJSON (line 518) | static cJSON *init_add_acl_to_role(cJSON *j_acls, const char *type, cons...
  function cJSON (line 540) | static cJSON *init_add_role(const char *rolename)
  function cJSON (line 576) | static cJSON *init_add_client(const char *username, const char *password...
  function cJSON (line 630) | static cJSON *init_create(const char *username, const char *password, co...
  function dynsec_init (line 684) | static int dynsec_init(int argc, char *argv[])
  function dynsec__main (line 772) | int dynsec__main(int argc, char *argv[], struct mosq_ctrl *ctrl)

FILE: apps/mosquitto_ctrl/dynsec_client.c
  function dynsec_client__create (line 30) | int dynsec_client__create(int argc, char *argv[], cJSON *j_command)
  function dynsec_client__delete (line 91) | int dynsec_client__delete(int argc, char *argv[], cJSON *j_command)
  function dynsec_client__enable_disable (line 112) | int dynsec_client__enable_disable(int argc, char *argv[], cJSON *j_comma...
  function dynsec_client__set_id (line 133) | int dynsec_client__set_id(int argc, char *argv[], cJSON *j_command)
  function dynsec_client__file_set_password (line 158) | int dynsec_client__file_set_password(int argc, char *argv[], const char ...
  function dynsec_client__set_password (line 302) | int dynsec_client__set_password(int argc, char *argv[], cJSON *j_command)
  function dynsec_client__get (line 338) | int dynsec_client__get(int argc, char *argv[], cJSON *j_command)
  function dynsec_client__add_remove_role (line 359) | int dynsec_client__add_remove_role(int argc, char *argv[], cJSON *j_comm...
  function dynsec_client__list_all (line 388) | int dynsec_client__list_all(int argc, char *argv[], cJSON *j_command)

FILE: apps/mosquitto_ctrl/dynsec_group.c
  function dynsec_group__create (line 30) | int dynsec_group__create(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__delete (line 51) | int dynsec_group__delete(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__get_anonymous (line 72) | int dynsec_group__get_anonymous(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__set_anonymous (line 87) | int dynsec_group__set_anonymous(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__get (line 108) | int dynsec_group__get(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__add_remove_role (line 129) | int dynsec_group__add_remove_role(int argc, char *argv[], cJSON *j_comma...
  function dynsec_group__list_all (line 158) | int dynsec_group__list_all(int argc, char *argv[], cJSON *j_command)
  function dynsec_group__add_remove_client (line 185) | int dynsec_group__add_remove_client(int argc, char *argv[], cJSON *j_com...

FILE: apps/mosquitto_ctrl/dynsec_role.c
  function dynsec_role__create (line 34) | int dynsec_role__create(int argc, char *argv[], cJSON *j_command)
  function dynsec_role__delete (line 55) | int dynsec_role__delete(int argc, char *argv[], cJSON *j_command)
  function dynsec_role__get (line 76) | int dynsec_role__get(int argc, char *argv[], cJSON *j_command)
  function dynsec_role__list_all (line 97) | int dynsec_role__list_all(int argc, char *argv[], cJSON *j_command)
  function dynsec_role__add_acl (line 124) | int dynsec_role__add_acl(int argc, char *argv[], cJSON *j_command)
  function dynsec_role__remove_acl (line 177) | int dynsec_role__remove_acl(int argc, char *argv[], cJSON *j_command)

FILE: apps/mosquitto_ctrl/example.c
  function ctrl_help (line 32) | void ctrl_help(void)
  function ctrl_main (line 40) | int ctrl_main(int argc, char *argv[], struct mosq_ctrl *ctrl)

FILE: apps/mosquitto_ctrl/mosquitto_ctrl.c
  function print_version (line 37) | static void print_version(void)
  function print_usage (line 46) | static void print_usage(void)
  function main (line 58) | int main(int argc, char *argv[])

FILE: apps/mosquitto_ctrl/mosquitto_ctrl.h
  type mosq_config (line 35) | struct mosq_config {
  type mosq_ctrl (line 72) | struct mosq_ctrl {
  type mosq_ctrl (line 81) | struct mosq_ctrl
  type mosq_config (line 83) | struct mosq_config
  type mosq_config (line 84) | struct mosq_config
  type mosq_config (line 85) | struct mosq_config
  type mosq_config (line 86) | struct mosq_config
  type mosq_ctrl (line 88) | struct mosq_ctrl
  type mosquitto (line 89) | struct mosquitto
  type mosq_config (line 89) | struct mosq_config
  type mosquitto (line 90) | struct mosquitto
  type mosq_config (line 90) | struct mosq_config
  type mosq_ctrl (line 93) | struct mosq_ctrl
  type mosq_ctrl (line 96) | struct mosq_ctrl
  type mosq_ctrl (line 126) | struct mosq_ctrl

FILE: apps/mosquitto_ctrl/options.c
  type mosq_config (line 42) | struct mosq_config
  type mosq_config (line 44) | struct mosq_config
  function init_config (line 47) | void init_config(struct mosq_config *cfg)
  function client_config_cleanup (line 55) | void client_config_cleanup(struct mosq_config *cfg)
  function ctrl_config_parse (line 88) | int ctrl_config_parse(struct mosq_config *cfg, int *argc, char **argv[])
  function client_config_line_proc (line 144) | static int client_config_line_proc(struct mosq_config *cfg, int *argc, c...
  function client_config_load (line 539) | int client_config_load(struct mosq_config *cfg)
  function client_opts_set (line 597) | int client_opts_set(struct mosquitto *mosq, struct mosq_config *cfg)
  function client_connect (line 684) | int client_connect(struct mosquitto *mosq, struct mosq_config *cfg)
  function mosquitto__urldecode (line 732) | static int mosquitto__urldecode(char *str)
  function mosquitto__parse_socks_url (line 780) | static int mosquitto__parse_socks_url(struct mosq_config *cfg, char *url)

FILE: apps/mosquitto_passwd/get_password.c
  function get_password__reset_term (line 43) | void get_password__reset_term(void)
  function gets_quiet (line 55) | static int gets_quiet(char *s, int len)
  function get_password (line 109) | int get_password(const char *prompt, const char *verify_prompt, bool qui...

FILE: apps/mosquitto_passwd/mosquitto_passwd.c
  type cb_helper (line 57) | struct cb_helper {
  type mosquitto_pwhash_type (line 65) | enum mosquitto_pwhash_type
  function FILE (line 70) | static FILE *mpw_tmpfile(void)
  function FILE (line 81) | static FILE *mpw_tmpfile(void)
  function print_usage (line 113) | static void print_usage(void)
  function output_new_password (line 130) | static int output_new_password(FILE *fptr, const char *username, const c...
  function pwfile_iterate (line 162) | static int pwfile_iterate(FILE *fptr, FILE *ftmp,
  function delete_pwuser_cb (line 231) | static int delete_pwuser_cb(FILE *fptr, FILE *ftmp, const char *username...
  function delete_pwuser (line 248) | static int delete_pwuser(FILE *fptr, FILE *ftmp, const char *username)
  function update_file_cb (line 268) | static int update_file_cb(FILE *fptr, FILE *ftmp, const char *username, ...
  function update_file (line 281) | static int update_file(FILE *fptr, FILE *ftmp)
  function update_pwuser_cb (line 290) | static int update_pwuser_cb(FILE *fptr, FILE *ftmp, const char *username...
  function update_pwuser (line 309) | static int update_pwuser(FILE *fptr, FILE *ftmp, const char *username, c...
  function copy_contents (line 330) | static int copy_contents(FILE *src, FILE *dest)
  function create_backup (line 360) | static int create_backup(char *backup_file, FILE *fptr)
  function handle_sigint (line 392) | static void handle_sigint(int signal)
  function is_username_valid (line 404) | static bool is_username_valid(const char *username)
  function main (line 436) | int main(int argc, char *argv[])

FILE: apps/mosquitto_signal/mosquitto_signal.c
  function print_usage (line 25) | static void print_usage(void)
  function main (line 50) | int main(int argc, char *argv[])

FILE: apps/mosquitto_signal/mosquitto_signal.h
  type mosq_signal (line 4) | enum mosq_signal {
  type mosq_signal (line 13) | enum mosq_signal

FILE: apps/mosquitto_signal/signal_unix.c
  function signal_all (line 32) | void signal_all(int sig)
  function send_signal (line 81) | void send_signal(int pid, enum mosq_signal msig)

FILE: apps/mosquitto_signal/signal_windows.c
  type mosq_sig (line 37) | enum mosq_sig
  function signal_all (line 56) | void signal_all(enum mosq_signal msig)
  function send_signal (line 87) | void send_signal(int pid, enum mosq_signal msig)

FILE: buildtest.py
  function run_test (line 39) | def run_test(msg, opts):
  function simple_tests (line 47) | def simple_tests():
  function random_tests (line 53) | def random_tests(count=10):

FILE: client/client_props.c
  type prop_type (line 39) | enum prop_type {
  function cfg_parse_property (line 63) | int cfg_parse_property(struct mosq_config *cfg, int argc, char *argv[], ...

FILE: client/client_shared.c
  type mosq_config (line 42) | struct mosq_config
  type mosq_config (line 44) | struct mosq_config
  function check_format (line 58) | static int check_format(const char *str)
  function init_config (line 211) | static void init_config(struct mosq_config *cfg, int pub_or_sub)
  function client_config_cleanup (line 234) | void client_config_cleanup(struct mosq_config *cfg)
  function client_config_options_file (line 300) | static int client_config_options_file(struct mosq_config *cfg, int argc,...
  function client_config_load (line 322) | int client_config_load(struct mosq_config *cfg, int pub_or_sub, int argc...
  function cfg_add_topic (line 525) | static int cfg_add_topic(struct mosq_config *cfg, int type, char *topic,...
  function client_config_line_proc (line 561) | int client_config_line_proc(struct mosq_config *cfg, int pub_or_sub, int...
  function client_tls_opts_set (line 1347) | static int client_tls_opts_set(struct mosquitto *mosq, struct mosq_confi...
  function client_opts_set (line 1426) | int client_opts_set(struct mosquitto *mosq, struct mosq_config *cfg)
  function clientid_generate (line 1476) | int clientid_generate(struct mosq_config *cfg)
  function client_connect (line 1490) | int client_connect(struct mosquitto *mosq, struct mosq_config *cfg)
  function mosquitto__urldecode (line 1551) | static int mosquitto__urldecode(char *str)
  function mosquitto__parse_socks_url (line 1599) | static int mosquitto__parse_socks_url(struct mosq_config *cfg, char *url)
  function err_printf (line 1786) | void err_printf(const struct mosq_config *cfg, const char *fmt, ...)
  function tls_keylog_callback (line 1802) | static void tls_keylog_callback(const SSL *ssl, const char *line)

FILE: client/client_shared.h
  type mosq_config (line 54) | struct mosq_config {
  type mosq_config (line 151) | struct mosq_config
  type mosq_config (line 152) | struct mosq_config
  type mosquitto (line 153) | struct mosquitto
  type mosq_config (line 153) | struct mosq_config
  type mosq_config (line 154) | struct mosq_config
  type mosquitto (line 155) | struct mosquitto
  type mosq_config (line 155) | struct mosq_config
  type mosq_config (line 157) | struct mosq_config
  type mosq_config (line 159) | struct mosq_config

FILE: client/pub_client.c
  function set_repeat_time (line 56) | static void set_repeat_time(void)
  function check_repeat_time (line 63) | static int check_repeat_time(void)
  type timeval (line 75) | struct timeval
  function set_repeat_time (line 78) | static void set_repeat_time(void)
  function check_repeat_time (line 89) | static int check_repeat_time(void)
  function my_disconnect_callback (line 107) | void my_disconnect_callback(struct mosquitto *mosq, void *obj, int rc, c...
  function my_publish (line 120) | int my_publish(struct mosquitto *mosq, int *mid, const char *topic, int ...
  function my_connect_callback (line 132) | void my_connect_callback(struct mosquitto *mosq, void *obj, int result, ...
  function my_publish_callback (line 198) | void my_publish_callback(struct mosquitto *mosq, void *obj, int mid, int...
  function pub_shared_init (line 230) | int pub_shared_init(void)
  function pub_stdin_line_loop (line 241) | static int pub_stdin_line_loop(struct mosquitto *mosq)
  function pub_other_loop (line 346) | static int pub_other_loop(struct mosquitto *mosq)
  function pub_shared_loop (line 383) | int pub_shared_loop(struct mosquitto *mosq)
  function pub_shared_cleanup (line 393) | void pub_shared_cleanup(void)
  function print_version (line 399) | static void print_version(void)
  function print_usage (line 408) | static void print_usage(void)
  function main (line 533) | int main(int argc, char *argv[])

FILE: client/pub_shared.c
  type mosq_config (line 41) | struct mosq_config
  function my_log_callback (line 44) | void my_log_callback(struct mosquitto *mosq, void *obj, int level, const...
  function load_stdin (line 54) | int load_stdin(void)
  function load_file (line 91) | int load_file(const char *filename)

FILE: client/pub_shared.h
  type mosq_config (line 29) | struct mosq_config
  type mosquitto (line 32) | struct mosquitto
  type mosquitto (line 33) | struct mosquitto
  type mosquitto (line 34) | struct mosquitto
  type mosquitto (line 35) | struct mosquitto
  type mosquitto (line 39) | struct mosquitto
  type mosquitto (line 42) | struct mosquitto

FILE: client/rr_client.c
  type rr__state (line 40) | enum rr__state {
  type rr__state (line 49) | enum rr__state
  type mosquitto (line 53) | struct mosquitto
  type timespec (line 56) | struct timespec
  type timespec (line 57) | struct timespec
  function my_signal_handler (line 62) | static void my_signal_handler(int signum)
  function my_publish (line 73) | int my_publish(struct mosquitto *mosq, int *mid, const char *topic, int ...
  function my_message_callback (line 85) | static void my_message_callback(struct mosquitto *mosq, void *obj, const...
  function my_connect_callback (line 117) | void my_connect_callback(struct mosquitto *mosq, void *obj, int result, ...
  function my_subscribe_callback (line 137) | static void my_subscribe_callback(struct mosquitto *mosq, void *obj, int...
  function print_version (line 153) | static void print_version(void)
  function print_usage (line 162) | static void print_usage(void)
  function report_latency (line 286) | static void report_latency(void)
  function main (line 312) | int main(int argc, char *argv[])

FILE: client/sub_client.c
  type mosq_config (line 39) | struct mosq_config
  type mosquitto (line 44) | struct mosquitto
  function timeout_cb (line 56) | void CALLBACK timeout_cb(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
  function my_signal_handler (line 75) | static void my_signal_handler(int signum)
  function my_message_callback (line 93) | static void my_message_callback(struct mosquitto *mosq, void *obj, const...
  function my_connect_callback (line 148) | static void my_connect_callback(struct mosquitto *mosq, void *obj, int r...
  function my_subscribe_callback (line 182) | static void my_subscribe_callback(struct mosquitto *mosq, void *obj, int...
  function my_log_callback (line 213) | static void my_log_callback(struct mosquitto *mosq, void *obj, int level...
  function print_version (line 223) | static void print_version(void)
  function print_usage (line 232) | static void print_usage(void)
  function main (line 372) | int main(int argc, char *argv[])

FILE: client/sub_client_output.c
  type mosq_config (line 56) | struct mosq_config
  type fieldoptions (line 58) | struct fieldoptions {
  type watch_topic (line 66) | struct watch_topic {
  type watch_topic (line 72) | struct watch_topic
  function get_time (line 75) | static int get_time(struct tm **ti, long *ns)
  function hexsep (line 119) | static void hexsep(int xpos, int precision, char sepchar)
  function write_payload (line 127) | static void write_payload(const unsigned char *payload, int payloadlen, ...
  function json_print_properties (line 179) | static int json_print_properties(cJSON *root, const mosquitto_property *...
  function format_time_8601 (line 285) | static void format_time_8601(const struct tm *ti, int ns, char *buf, siz...
  function json_print (line 296) | static int json_print(const struct mosquitto_message *message, const mos...
  function formatted_print_blank (line 370) | static void formatted_print_blank(struct fieldoptions *fopts)
  function formatted_print_float (line 382) | static int formatted_print_float(const unsigned char *payload, int paylo...
  function formatted_print_int (line 418) | static void formatted_print_int(int value, struct fieldoptions *fopts)
  function formatted_print_str (line 436) | static void formatted_print_str(const char *value, struct fieldoptions *...
  function formatted_print_percent (line 464) | static void formatted_print_percent(const struct mosq_config *lcfg, cons...
  function formatted_print (line 666) | static void formatted_print(const struct mosq_config *lcfg, const struct...
  function rand_init (line 804) | static void rand_init(void)
  function watch_print (line 819) | static void watch_print(const struct mosquitto_message *message)
  function print_message (line 842) | void print_message(struct mosq_config *lcfg, const struct mosquitto_mess...
  function output_init (line 900) | void output_init(struct mosq_config *lcfg)

FILE: client/sub_client_output.h
  type mosq_config (line 25) | struct mosq_config
  type mosq_config (line 26) | struct mosq_config
  type mosquitto_message (line 26) | struct mosquitto_message

FILE: common/json_help.c
  function json_get_bool (line 30) | int json_get_bool(cJSON *json, const char *name, bool *value, bool optio...
  function json_get_int (line 53) | int json_get_int(cJSON *json, const char *name, int *value, bool optiona...
  function json_get_int64 (line 76) | int json_get_int64(cJSON *json, const char *name, int64_t *value, bool o...
  function json_get_string (line 99) | int json_get_string(cJSON *json, const char *name, const char **value, b...
  function cJSON (line 124) | cJSON *cJSON_AddIntToObject(cJSON * const object, const char * const nam...
  function cJSON (line 133) | cJSON *cJSON_AddUIntToObject(cJSON * const object, const char * const na...

FILE: config.h
  type SSIZE_T (line 46) | typedef SSIZE_T ssize_t;

FILE: dashboard/src/app/consts.js
  constant MAX_POINTS_IN_CHART (line 1) | const MAX_POINTS_IN_CHART = 5_000;
  constant KEEP_DATAPOINTS_FOR_INTERVAL (line 2) | const KEEP_DATAPOINTS_FOR_INTERVAL =
  constant CHART_UPDATE_INTERVAL_IN_MILLISECONDS (line 7) | const CHART_UPDATE_INTERVAL_IN_MILLISECONDS =
  constant SMOOTHED_CHART_UPDATE_INTERVAL_IN_MILLISECONDS (line 11) | const SMOOTHED_CHART_UPDATE_INTERVAL_IN_MILLISECONDS =
  constant INTERVAL_5SECS_IN_MILLISECONDS (line 15) | const INTERVAL_5SECS_IN_MILLISECONDS = 1000 * 5;
  constant CHARTJS_ANIMATION_DURATION_MS (line 16) | const CHARTJS_ANIMATION_DURATION_MS = 400;
  constant SYSTOPIC_ENDPOINT (line 17) | const SYSTOPIC_ENDPOINT = "/api/v1/systree";
  constant LISTENERS_ENDPOINT (line 18) | const LISTENERS_ENDPOINT = "/api/v1/listeners";
  constant CHART_DISPLAY_WINDOW (line 19) | const CHART_DISPLAY_WINDOW = 16;

FILE: dashboard/src/app/dashboard.js
  constant MAIN_CHART_COLOR (line 1) | const MAIN_CHART_COLOR = "#fd602e";
  constant SUPPLEMENTARY_CHART_COLOR (line 2) | const SUPPLEMENTARY_CHART_COLOR = "#6366f1";
  class MosquittoDashboard (line 4) | class MosquittoDashboard {
    method constructor (line 5) | constructor(headless = false) {
    method getChartDataFromStore (line 39) | getChartDataFromStore(chartId) {
    method createOptions (line 55) | createOptions() {
    method createChartDataObject (line 61) | createChartDataObject() {
    method composeDashboardObject (line 78) | composeDashboardObject() {
    method setBrokerVersion (line 111) | setBrokerVersion() {
    method setBrokerStatus (line 118) | setBrokerStatus() {
    method createLineChart (line 136) | createLineChart(
    method createSentVsReceivedChart (line 229) | createSentVsReceivedChart(chartDataType) {
    method createRateSentVsReceivedChart (line 324) | createRateSentVsReceivedChart(chartDataType) {
    method handleChartAction (line 420) | handleChartAction(chartId, action) {
    method addToggle (line 461) | addToggle() {
    method initializeCharts (line 501) | initializeCharts() {
    method getChartDatasets (line 575) | getChartDatasets(chartId) {
    method getChartPositionalData (line 606) | getChartPositionalData(chart) {
    method isEndElementVisibleAndDefaultZoom (line 615) | isEndElementVisibleAndDefaultZoom(lastX, currentEnd, zoomLevel) {
    method slideChart (line 622) | slideChart(chart) {
    method destroyCharts (line 629) | destroyCharts() {
    method updateLastSysTopics (line 639) | updateLastSysTopics(id, value) {
    method updateMatchingChart (line 643) | updateMatchingChart(chartId, sysTopics, chartIdsToUpdate) {
    method getElementsToUpdate (line 691) | getElementsToUpdate(sysTopics) {
    method trimChartDataWindow (line 1049) | trimChartDataWindow(labels, dataset, timestampNow) {
    method processChartOverflow (line 1063) | processChartOverflow(labels, dataset, timestamp) {
    method datapointsAreSufficientlyDifferent (line 1083) | datapointsAreSufficientlyDifferent(datapoint1, datapoint2) {
    method labelsAreFarApart (line 1090) | labelsAreFarApart(earlierTimeString, laterTimeString) {
    method setMustUpdateForMatchingGraph (line 1104) | setMustUpdateForMatchingGraph(chartId) {
    method addSmoothedDataPoint (line 1146) | addSmoothedDataPoint(
    method updateChartInner (line 1189) | updateChartInner(id, datapoint, timestamp, dashboardDataObject) {
    method getOverviewChartSubchartIds (line 1252) | getOverviewChartSubchartIds(id) {
    method updateOverviewChartInner (line 1262) | updateOverviewChartInner(id, firstSubChartId, secondSubChartId) {
    method updateHtmlElementById (line 1324) | updateHtmlElementById(elementId, value) {
    method removeHtmlElementClass (line 1331) | removeHtmlElementClass(elementId, className) {
    method addHtmlElementClass (line 1338) | addHtmlElementClass(elementId, className) {
    method updateChart (line 1345) | updateChart(
    method updateOverviewChart (line 1363) | updateOverviewChart(
    method getLastChartsDataPoints (line 1380) | getLastChartsDataPoints(dashboardDataObject) {
    method updateCharts (line 1406) | updateCharts(
    method mustInsertDatapointDueToInterval (line 1508) | mustInsertDatapointDueToInterval(
    method checkForDataUpdates (line 1522) | async checkForDataUpdates() {
    method updateStore (line 1601) | updateStore(dashboardDataObject, idsOfChartsToUpdate) {
    method startDataUpdates (line 1631) | async startDataUpdates() {

FILE: dashboard/src/app/index.js
  function checkNormalBannerImage (line 6) | function checkNormalBannerImage(bannerImage, bannerCard) {
  function checkSvgBannerImage (line 18) | function checkSvgBannerImage(bannerImage, bannerCard, bannerLink, banner...

FILE: dashboard/src/app/listeners.js
  class Listeners (line 1) | class Listeners {
    method constructor (line 2) | constructor() {
    method init (line 8) | async init() {
    method displayListeners (line 29) | displayListeners(data) {
    method createCommandSection (line 75) | createCommandSection(listener, type, addMargin = true) {
    method createListenerCard (line 192) | createListenerCard(listener, index) {
    method createDetailRow (line 236) | createDetailRow(label, value) {
    method generateConnectionCommand (line 258) | generateConnectionCommand(listener, commandType = "mosquitto_pub") {

FILE: dashboard/src/app/sidebar.js
  class Sidebar (line 1) | class Sidebar {
    method constructor (line 2) | constructor() {
    method bindEvents (line 19) | bindEvents() {
    method toggleMenu (line 35) | toggleMenu() {
    method syncUi (line 43) | syncUi() {
    method openMenu (line 55) | openMenu() {
    method closeMenu (line 62) | closeMenu() {

FILE: dashboard/src/lib/chart.umd.js
  method Colors (line 7) | get Colors(){return Ko}
  method Decimation (line 7) | get Decimation(){return Jo}
  method Filler (line 7) | get Filler(){return pa}
  method Legend (line 7) | get Legend(){return _a}
  method SubTitle (line 7) | get SubTitle(){return wa}
  method Title (line 7) | get Title(){return va}
  method Tooltip (line 7) | get Tooltip(){return Va}
  function e (line 7) | function e(){}
  function s (line 7) | function s(t){return null==t}
  function n (line 7) | function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object...
  function o (line 7) | function o(t){return null!==t&&"[object Object]"===Object.prototype.toSt...
  function a (line 7) | function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(...
  function r (line 7) | function r(t,e){return a(t)?t:e}
  function l (line 7) | function l(t,e){return void 0===t?e:t}
  function d (line 7) | function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}
  function u (line 7) | function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--...
  function f (line 7) | function f(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(...
  function g (line 7) | function g(t){if(n(t))return t.map(g);if(o(t)){const e=Object.create(nul...
  function p (line 7) | function p(t){return-1===["__proto__","prototype","constructor"].indexOf...
  function m (line 7) | function m(t,e,i,s){if(!p(t))return;const n=e[t],a=i[t];o(n)&&o(a)?b(n,a...
  function b (line 7) | function b(t,e,i){const s=n(e)?e:[e],a=s.length;if(!o(t))return t;const ...
  function x (line 7) | function x(t,e){return b(t,e,{merger:_})}
  function _ (line 7) | function _(t,e,i){if(!p(t))return;const s=e[t],n=i[t];o(s)&&o(n)?x(s,n):...
  function v (line 7) | function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s...
  function M (line 7) | function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{...
  function w (line 7) | function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}
  function D (line 7) | function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"=...
  function V (line 7) | function V(t,e,i){return Math.abs(t-e)<i}
  function B (line 7) | function B(t){const e=Math.round(t);t=V(t,e,t/1e3)?e:t;const i=Math.pow(...
  function N (line 7) | function N(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e...
  function W (line 7) | function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}
  function H (line 7) | function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}
  function j (line 7) | function j(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o...
  function $ (line 7) | function $(t){return t*(C/180)}
  function Y (line 7) | function Y(t){return t*(180/C)}
  function U (line 7) | function U(t){if(!a(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*...
  function X (line 7) | function X(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Mat...
  function q (line 7) | function q(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}
  function K (line 7) | function K(t,e){return(t-e+A)%O-C}
  function G (line 7) | function G(t){return(t%O+O)%O}
  function Z (line 7) | function Z(t,e,i,s){const n=G(t),o=G(e),a=G(i),r=G(o-n),l=G(a-n),h=G(n-o...
  function J (line 7) | function J(t,e,i){return Math.max(e,Math.min(i,t))}
  function Q (line 7) | function Q(t){return J(t,-32768,32767)}
  function tt (line 7) | function tt(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}
  function et (line 7) | function et(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s...
  function nt (line 7) | function nt(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[...
  function at (line 7) | function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineP...
  function rt (line 7) | function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s...
  function lt (line 7) | function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}
  function ct (line 7) | function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.cal...
  function dt (line 7) | function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i...
  function pt (line 7) | function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iSca...
  function mt (line 7) | function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,x...
  class bt (line 7) | class bt{constructor(){this._request=null,this._charts=new Map,this._run...
    method constructor (line 7) | constructor(){this._request=null,this._charts=new Map,this._running=!1...
    method _notify (line 7) | _notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({...
    method _refresh (line 7) | _refresh(){this._request||(this._running=!0,this._request=ht.call(wind...
    method _update (line 7) | _update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.runn...
    method _getAnims (line 7) | _getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running...
    method listen (line 7) | listen(t,e,i){this._getAnims(t).listeners[e].push(i)}
    method add (line 7) | add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}
    method has (line 7) | has(t){return this._getAnims(t).items.length>0}
    method start (line 7) | start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now...
    method running (line 7) | running(t){if(!this._running)return!1;const e=this._charts.get(t);retu...
    method stop (line 7) | stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;cons...
    method remove (line 7) | remove(t){return this._charts.delete(t)}
  function _t (line 13) | function _t(t){return t+.5|0}
  function vt (line 13) | function vt(t){return yt(_t(2.55*t),0,255)}
  function Mt (line 13) | function Mt(t){return yt(_t(255*t),0,255)}
  function wt (line 13) | function wt(t){return yt(_t(t/2.55)/100,0,1)}
  function kt (line 13) | function kt(t){return yt(_t(100*t),0,100)}
  function At (line 13) | function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;re...
  function Lt (line 13) | function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Ma...
  function Et (line 13) | function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4...
  function Rt (line 13) | function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i...
  function It (line 13) | function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=M...
  function zt (line 13) | function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s))...
  function Ft (line 13) | function Ft(t,e,i){return zt(Lt,t,e,i)}
  function Vt (line 13) | function Vt(t){return(t%360+360)%360}
  function Bt (line 13) | function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=...
  function jt (line 13) | function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Wt),i=Object....
  function Xt (line 13) | function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*...
  function qt (line 13) | function qt(t,e){return t?Object.assign(e||{},t):t}
  function Kt (line 13) | function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.lengt...
  function Gt (line 13) | function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);le...
  class Zt (line 13) | class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let...
    method constructor (line 13) | constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var ...
    method valid (line 13) | get valid(){return this._valid}
    method rgb (line 13) | get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}
    method rgb (line 13) | set rgb(t){this._rgb=Kt(t)}
    method rgbString (line 13) | rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, $...
    method hexString (line 13) | hexString(){return this._valid?At(this._rgb):void 0}
    method hslString (line 13) | hslString(){return this._valid?function(t){if(!t)return;const e=It(t),...
    method mix (line 13) | mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o...
    method interpolate (line 13) | interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t....
    method clone (line 13) | clone(){return new Zt(this.rgb)}
    method alpha (line 13) | alpha(t){return this._rgb.a=Mt(t),this}
    method clearer (line 13) | clearer(t){return this._rgb.a*=1-t,this}
    method greyscale (line 13) | greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=...
    method opaquer (line 13) | opaquer(t){return this._rgb.a*=1+t,this}
    method negate (line 13) | negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,...
    method lighten (line 13) | lighten(t){return Xt(this._rgb,2,t),this}
    method darken (line 13) | darken(t){return Xt(this._rgb,2,-t),this}
    method saturate (line 13) | saturate(t){return Xt(this._rgb,1,t),this}
    method desaturate (line 13) | desaturate(t){return Xt(this._rgb,1,-t),this}
    method rotate (line 13) | rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r...
  function Jt (line 13) | function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[ob...
  function Qt (line 13) | function Qt(t){return Jt(t)?t:new Zt(t)}
  function te (line 13) | function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexStrin...
  function ne (line 13) | function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify...
  method numeric (line 13) | numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let ...
  method logarithmic (line 13) | logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.p...
  function he (line 13) | function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.len...
  function ce (line 13) | function ce(t,e,i){return"string"==typeof e?b(he(t,e),i):b(he(t,""),e)}
  class de (line 13) | class de{constructor(t,e){this.animation=void 0,this.backgroundColor="rg...
    method constructor (line 13) | constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,...
    method set (line 13) | set(t,e){return ce(this,t,e)}
    method get (line 13) | get(t){return he(this,t)}
    method describe (line 13) | describe(t,e){return ce(le,t,e)}
    method override (line 13) | override(t,e){return ce(re,t,e)}
    method route (line 13) | route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.definePr...
    method apply (line 13) | apply(t){t.forEach((t=>t(this)))}
  function fe (line 13) | function fe(){return"undefined"!=typeof window&&"undefined"!=typeof docu...
  function ge (line 13) | function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.to...
  function pe (line 13) | function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!=...
  function be (line 13) | function be(t,e){return me(t).getPropertyValue(e)}
  function _e (line 13) | function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=...
  function ve (line 13) | function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePi...
  function we (line 13) | function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"c...
  function ke (line 13) | function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t....
  method passive (line 13) | get passive(){return t=!0,!1}
  function Pe (line 13) | function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);retur...
  function De (line 13) | function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ...
  function Ce (line 13) | function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).wid...
  function Oe (line 13) | function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=...
  function Ae (line 13) | function Ae(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/...
  function Te (line 13) | function Te(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.c...
  function Le (line 13) | function Le(t,e,i,s){Ee(t,e,i,s,null)}
  function Ee (line 13) | function Ee(t,e,i,s,n){let o,a,r,l,h,c,d,u;const f=e.pointStyle,g=e.rota...
  function Re (line 13) | function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t....
  function Ie (line 13) | function Ie(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.le...
  function ze (line 13) | function ze(t){t.restore()}
  function Fe (line 13) | function Fe(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){c...
  function Ve (line 13) | function Ve(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e....
  function Be (line 13) | function Be(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measur...
  function Ne (line 13) | function Ne(t,e){const i=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.le...
  function We (line 13) | function We(t,e,i,o,a,r={}){const l=n(e)?e:[e],h=r.strokeWidth>0&&""!==r...
  function He (line 13) | function He(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a...
  function je (line 13) | function je(t,e=[""],i,s,n=(()=>t[0])){const o=i||t;void 0===s&&(s=ti("_...
  function $e (line 13) | function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProx...
  function Ye (line 13) | function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scri...
  function qe (line 13) | function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t...
  function Ke (line 13) | function Ke(t,e,i){return S(t)?t(e,i):t}
  function Ze (line 13) | function Ze(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);...
  function Je (line 13) | function Je(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t...
  function Qe (line 13) | function Qe(t,e,i,s,n){for(;i;)i=Ze(t,e,i,s,n);return i}
  function ti (line 13) | function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0...
  function ei (line 13) | function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=ne...
  function ii (line 13) | function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new A...
  function ai (line 13) | function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,...
  function ri (line 13) | function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array...
  function li (line 13) | function li(t,e,i){return Math.max(Math.min(t,i),e)}
  function hi (line 13) | function hi(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.ski...
  method easeInOutElastic (line 13) | easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):....
  method easeInBack (line 13) | easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)}
  method easeOutBack (line 13) | easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1}
  method easeInOutBack (line 13) | easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*...
  method easeOutBounce (line 13) | easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1....
  function gi (line 13) | function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}
  function pi (line 13) | function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e....
  function mi (line 13) | function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a...
  function _i (line 13) | function _i(t,e){const i=(""+t).match(bi);if(!i||"normal"===i[1])return ...
  function vi (line 13) | function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[...
  function Mi (line 13) | function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}
  function wi (line 13) | function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRig...
  function ki (line 13) | function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.to...
  function Si (line 13) | function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==t...
  function Pi (line 13) | function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;o<a;++o)if(r=t[o]...
  function Di (line 13) | function Di(t,e,i){const{min:s,max:n}=t,o=c(e,(n-s)/2),a=(t,e)=>i&&0===t...
  function Ci (line 13) | function Ci(t,e){return Object.assign(Object.create(t),e)}
  function Oi (line 13) | function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t...
  function Ai (line 13) | function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.ge...
  function Ti (line 13) | function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style....
  function Li (line 13) | function Li(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{betw...
  function Ei (line 13) | function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end...
  function Ri (line 13) | function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e...
  function Ii (line 13) | function Ii(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){con...
  function zi (line 13) | function zi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)...
  function Fi (line 13) | function Fi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n...
  function Vi (line 13) | function Vi(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t...
  function Bi (line 13) | function Bi(t,e){if(!e)return!1;const i=[],s=function(t,e){return Jt(e)?...
  function Wi (line 13) | function Wi(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedM...
  function Hi (line 13) | function Hi(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];f...
  function ji (line 13) | function ji(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;re...
  function $i (line 13) | function $i(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.ind...
  function Yi (line 13) | function Yi(t,e,i,s,n,o){return o||t.isPointInArea(e)?"r"!==i||s?$i(t,e,...
  function Ui (line 13) | function Ui(t,e,i,s,n){const o=[],a="x"===i?"inXRange":"inYRange";let r=...
  method index (line 13) | index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=...
  method dataset (line 13) | dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1...
  method nearest (line 13) | nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1...
  function Ki (line 13) | function Ki(t,e){return t.filter((t=>t.pos===e))}
  function Gi (line 13) | function Gi(t,e){return t.filter((t=>-1===qi.indexOf(t.pos)&&t.box.axis=...
  function Zi (line 13) | function Zi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.w...
  function Ji (line 13) | function Ji(t,e){const i=function(t){const e={};for(const i of t){const{...
  function Qi (line 13) | function Qi(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}
  function ts (line 13) | function ts(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.le...
  function es (line 13) | function es(t,e,i,s){const{pos:n,box:a}=i,r=t.maxPadding;if(!o(n)){i.siz...
  function is (line 13) | function is(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:...
  function ss (line 13) | function ss(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o...
  function ns (line 13) | function ns(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width...
  function os (line 13) | function os(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){...
  method addBox (line 13) | addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e...
  method removeBox (line 13) | removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.spl...
  method configure (line 13) | configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i....
  method update (line 13) | update(t,e,i,s){if(!t)return;const n=ki(t.options.layout.padding),o=Math...
  class rs (line 13) | class rs{acquireContext(t,e){}releaseContext(t){return!1}addEventListene...
    method acquireContext (line 13) | acquireContext(t,e){}
    method releaseContext (line 13) | releaseContext(t){return!1}
    method addEventListener (line 13) | addEventListener(t,e,i){}
    method removeEventListener (line 13) | removeEventListener(t,e,i){}
    method getDevicePixelRatio (line 13) | getDevicePixelRatio(){return 1}
    method getMaximumSize (line 13) | getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,...
    method isAttached (line 13) | isAttached(t){return!0}
    method updateConfig (line 13) | updateConfig(t){}
  class ls (line 13) | class ls extends rs{acquireContext(t){return t&&t.getContext&&t.getConte...
    method acquireContext (line 13) | acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}
    method updateConfig (line 13) | updateConfig(t){t.options.animation=!1}
  function fs (line 13) | function fs(t,e,i){t.canvas.removeEventListener(e,i,us)}
  function gs (line 13) | function gs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}
  function ps (line 13) | function ps(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1...
  function ms (line 13) | function ms(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1...
  function _s (line 13) | function _s(){const t=window.devicePixelRatio;t!==xs&&(xs=t,bs.forEach((...
  function ys (line 13) | function ys(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct((...
  function vs (line 13) | function vs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){bs.delete...
  function Ms (line 13) | function Ms(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t...
  class ws (line 13) | class ws extends rs{acquireContext(t,e){const i=t&&t.getContext&&t.getCo...
    method acquireContext (line 13) | acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return...
    method releaseContext (line 13) | releaseContext(t){const e=t.canvas;if(!e[hs])return!1;const i=e[hs].in...
    method addEventListener (line 13) | addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxi...
    method removeEventListener (line 13) | removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if...
    method getDevicePixelRatio (line 13) | getDevicePixelRatio(){return window.devicePixelRatio}
    method getMaximumSize (line 13) | getMaximumSize(t,e,i,s){return we(t,e,i,s)}
    method isAttached (line 13) | isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}
  function ks (line 13) | function ks(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t insta...
  method color (line 13) | color(t,e,i){const s=Qt(t||Ps),n=s.valid&&Qt(e||Ps);return n&&n.valid?n....
  class Cs (line 13) | class Cs{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const...
    method constructor (line 13) | constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([...
    method active (line 13) | active(){return this._active}
    method update (line 13) | update(t,e,i){if(this._active){this._notify(!1);const s=this._target[t...
    method cancel (line 13) | cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._no...
    method tick (line 13) | tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._fr...
    method wait (line 13) | wait(){const t=this._promises||(this._promises=[]);return new Promise(...
    method _notify (line 13) | _notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i....
  class Os (line 13) | class Os{constructor(t,e){this._chart=t,this._properties=new Map,this.co...
    method constructor (line 13) | constructor(t,e){this._chart=t,this._properties=new Map,this.configure...
    method configure (line 13) | configure(t){if(!o(t))return;const e=Object.keys(ue.animation),i=this....
    method _animateOptions (line 13) | _animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;le...
    method _createAnimations (line 13) | _createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||...
    method update (line 13) | update(t,e){if(0===this._properties.size)return void Object.assign(t,e...
  function As (line 13) | function As(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e...
  function Ts (line 13) | function Ts(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=...
  function Ls (line 13) | function Ls(t,e,i,s={}){const n=t.keys,o="single"===s.mode;let r,l,h,c;i...
  function Es (line 13) | function Es(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void...
  function Rs (line 13) | function Rs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}
  function Is (line 13) | function Is(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse...
  function zs (line 13) | function zs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks=...
  function Fs (line 13) | function Fs(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t]....
  function Vs (line 13) | function Vs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if...
  class Ws (line 13) | class Ws{static defaults={};static datasetElementType=null;static dataEl...
    method constructor (line 13) | constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cache...
    method initialize (line 13) | initialize(){const t=this._cachedMeta;this.configure(),this.linkScales...
    method updateIndex (line 13) | updateIndex(t){this.index!==t&&Vs(this._cachedMeta),this.index=t}
    method linkScales (line 13) | linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset()...
    method getDataset (line 13) | getDataset(){return this.chart.data.datasets[this.index]}
    method getMeta (line 13) | getMeta(){return this.chart.getDatasetMeta(this.index)}
    method getScaleForId (line 13) | getScaleForId(t){return this.chart.scales[t]}
    method _getOtherScale (line 13) | _getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScal...
    method reset (line 13) | reset(){this._update("reset")}
    method _destroy (line 13) | _destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t....
    method _dataCheck (line 13) | _dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._d...
    method addElements (line 13) | addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetE...
    method buildOrUpdateElements (line 13) | buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();...
    method configure (line 13) | configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type)...
    method parse (line 13) | parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:a,_stacked:r}=i,l...
    method parsePrimitiveData (line 13) | parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.ax...
    method parseArrayData (line 13) | parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let ...
    method parseObjectData (line 13) | parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yA...
    method getParsed (line 13) | getParsed(t){return this._cachedMeta._parsed[t]}
    method getDataElement (line 13) | getDataElement(t){return this._cachedMeta.data[t]}
    method applyStack (line 13) | applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];re...
    method updateRangeFromParsed (line 13) | updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;...
    method getMinMax (line 13) | getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i...
    method getAllParsedValues (line 13) | getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;...
    method getMaxOverflow (line 13) | getMaxOverflow(){return!1}
    method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=t...
    method _update (line 13) | _update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=...
    method update (line 13) | update(t){}
    method draw (line 13) | draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],...
    method getStyle (line 13) | getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._ca...
    method getContext (line 13) | getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cac...
    method resolveDatasetElementOptions (line 13) | resolveDatasetElementOptions(t){return this._resolveElementOptions(thi...
    method resolveDataElementOptions (line 13) | resolveDataElementOptions(t,e){return this._resolveElementOptions(this...
    method _resolveElementOptions (line 13) | _resolveElementOptions(t,e="default",i){const s="active"===e,n=this._c...
    method _resolveAnimations (line 13) | _resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=...
    method getSharedOptions (line 13) | getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sh...
    method includeOptions (line 13) | includeOptions(t,e){return!e||Bs(t)||this.chart._animationsDisabled}
    method _getSharedOptions (line 13) | _getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=t...
    method updateElement (line 13) | updateElement(t,e,i,s){Bs(s)?Object.assign(t,i):this._resolveAnimation...
    method updateSharedOptions (line 13) | updateSharedOptions(t,e,i){t&&!Bs(e)&&this._resolveAnimations(void 0,e...
    method _setStyle (line 13) | _setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolve...
    method removeHoverStyle (line 13) | removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}
    method setHoverStyle (line 13) | setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}
    method _removeDatasetHoverStyle (line 13) | _removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._s...
    method _setDatasetHoverStyle (line 13) | _setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setS...
    method _resyncElements (line 13) | _resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(cons...
    method _insertElements (line 13) | _insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let ...
    method updateElements (line 13) | updateElements(t,e,i,s){}
    method _removeElements (line 13) | _removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const ...
    method _sync (line 13) | _sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;t...
    method _onDataPush (line 13) | _onDataPush(){const t=arguments.length;this._sync(["_insertElements",t...
    method _onDataPop (line 13) | _onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.lengt...
    method _onDataShift (line 13) | _onDataShift(){this._sync(["_removeElements",0,1])}
    method _onDataSplice (line 13) | _onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=argu...
    method _onDataUnshift (line 13) | _onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}
  class Hs (line 13) | class Hs{static defaults={};static defaultRoutes=void 0;x;y;active=!1;op...
    method tooltipPosition (line 13) | tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:...
    method hasValue (line 13) | hasValue(){return W(this.x)&&W(this.y)}
    method getProps (line 13) | getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={...
  function js (line 13) | function js(t,e){const i=t.options.ticks,n=function(t){const e=t.options...
  function $s (line 13) | function $s(t,e,i,s,n){const o=l(s,0),a=Math.min(l(n,t.length),t.length)...
  function Xs (line 13) | function Xs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=...
  function qs (line 13) | function qs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPi...
  function Ks (line 13) | function Ks(t){return t.drawTicks?t.tickLength:0}
  function Gs (line 13) | function Gs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padd...
  function Zs (line 13) | function Zs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&...
  class Js (line 13) | class Js extends Hs{constructor(t){super(),this.id=t.id,this.type=t.type...
    method constructor (line 13) | constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void...
    method init (line 13) | init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,...
    method parse (line 13) | parse(t,e){return t}
    method getUserBounds (line 13) | getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMa...
    method getMinMax (line 13) | getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUse...
    method getPadding (line 13) | getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,ri...
    method getTicks (line 13) | getTicks(){return this.ticks}
    method getLabels (line 13) | getLabels(){const t=this.chart.data;return this.options.labels||(this....
    method getLabelItems (line 13) | getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._...
    method beforeLayout (line 13) | beforeLayout(){this._cache={},this._dataLimitsCached=!1}
    method beforeUpdate (line 13) | beforeUpdate(){d(this.options.beforeUpdate,[this])}
    method update (line 13) | update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sa...
    method configure (line 13) | configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this...
    method afterUpdate (line 13) | afterUpdate(){d(this.options.afterUpdate,[this])}
    method beforeSetDimensions (line 13) | beforeSetDimensions(){d(this.options.beforeSetDimensions,[this])}
    method setDimensions (line 13) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method afterSetDimensions (line 13) | afterSetDimensions(){d(this.options.afterSetDimensions,[this])}
    method _callHooks (line 13) | _callHooks(t){this.chart.notifyPlugins(t,this.getContext()),d(this.opt...
    method beforeDataLimits (line 13) | beforeDataLimits(){this._callHooks("beforeDataLimits")}
    method determineDataLimits (line 13) | determineDataLimits(){}
    method afterDataLimits (line 13) | afterDataLimits(){this._callHooks("afterDataLimits")}
    method beforeBuildTicks (line 13) | beforeBuildTicks(){this._callHooks("beforeBuildTicks")}
    method buildTicks (line 13) | buildTicks(){return[]}
    method afterBuildTicks (line 13) | afterBuildTicks(){this._callHooks("afterBuildTicks")}
    method beforeTickToLabelConversion (line 13) | beforeTickToLabelConversion(){d(this.options.beforeTickToLabelConversi...
    method generateTickLabels (line 13) | generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t...
    method afterTickToLabelConversion (line 13) | afterTickToLabelConversion(){d(this.options.afterTickToLabelConversion...
    method beforeCalculateLabelRotation (line 13) | beforeCalculateLabelRotation(){d(this.options.beforeCalculateLabelRota...
    method calculateLabelRotation (line 13) | calculateLabelRotation(){const t=this.options,e=t.ticks,i=Us(this.tick...
    method afterCalculateLabelRotation (line 13) | afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotati...
    method afterAutoSkip (line 13) | afterAutoSkip(){}
    method beforeFit (line 13) | beforeFit(){d(this.options.beforeFit,[this])}
    method fit (line 13) | fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,gri...
    method _calculatePadding (line 13) | _calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}...
    method _handleMargins (line 13) | _handleMargins(){this._margins&&(this._margins.left=Math.max(this.padd...
    method afterFit (line 13) | afterFit(){d(this.options.afterFit,[this])}
    method isHorizontal (line 13) | isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||...
    method isFullSize (line 13) | isFullSize(){return this.options.fullSize}
    method _convertTicksToLabels (line 13) | _convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(...
    method _getLabelSizes (line 13) | _getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ti...
    method _computeLabelSizes (line 13) | _computeLabelSizes(t,e,i){const{ctx:o,_longestTextCache:a}=this,r=[],l...
    method getLabelForValue (line 13) | getLabelForValue(t){return t}
    method getPixelForValue (line 13) | getPixelForValue(t,e){return NaN}
    method getValueForPixel (line 13) | getValueForPixel(t){}
    method getPixelForTick (line 13) | getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:th...
    method getPixelForDecimal (line 13) | getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._start...
    method getDecimalForPixel (line 13) | getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return...
    method getBasePixel (line 13) | getBasePixel(){return this.getPixelForValue(this.getBaseValue())}
    method getBaseValue (line 13) | getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}
    method getContext (line 13) | getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t]...
    method _tickSize (line 13) | _tickSize(){const t=this.options.ticks,e=$(this.labelRotation),i=Math....
    method _isVisible (line 13) | _isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.ge...
    method _computeGridLineItems (line 13) | _computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options...
    method _computeLabelItems (line 13) | _computeLabelItems(t){const e=this.axis,i=this.options,{position:s,tic...
    method _getXAxisLabelAlignment (line 13) | _getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$...
    method _getYAxisLabelAlignment (line 13) | _getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror...
    method _computeLabelArea (line 13) | _computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.c...
    method drawBackground (line 13) | drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,...
    method getLineWidthForValue (line 13) | getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible(...
    method drawGrid (line 13) | drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems...
    method drawBorder (line 13) | drawBorder(){const{chart:t,ctx:e,options:{border:i,grid:s}}=this,n=i.s...
    method drawLabels (line 13) | drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i...
    method drawTitle (line 13) | drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;i...
    method draw (line 13) | draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),thi...
    method _layers (line 13) | _layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=l(t.grid&&t.g...
    method getMatchingVisibleMetas (line 13) | getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetM...
    method _resolveTickFontOptions (line 13) | _resolveTickFontOptions(t){return Si(this.options.ticks.setContext(thi...
    method _maxDigits (line 13) | _maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return...
  class Qs (line 13) | class Qs{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,thi...
    method constructor (line 13) | constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items...
    method isForType (line 13) | isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prot...
    method register (line 13) | register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return...
    method get (line 13) | get(t){return this.items[t]}
    method unregister (line 13) | unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[...
  class tn (line 13) | class tn{constructor(){this.controllers=new Qs(Ws,"datasets",!0),this.el...
    method constructor (line 13) | constructor(){this.controllers=new Qs(Ws,"datasets",!0),this.elements=...
    method add (line 13) | add(...t){this._each("register",t)}
    method remove (line 13) | remove(...t){this._each("unregister",t)}
    method addControllers (line 13) | addControllers(...t){this._each("register",t,this.controllers)}
    method addElements (line 13) | addElements(...t){this._each("register",t,this.elements)}
    method addPlugins (line 13) | addPlugins(...t){this._each("register",t,this.plugins)}
    method addScales (line 13) | addScales(...t){this._each("register",t,this.scales)}
    method getController (line 13) | getController(t){return this._get(t,this.controllers,"controller")}
    method getElement (line 13) | getElement(t){return this._get(t,this.elements,"element")}
    method getPlugin (line 13) | getPlugin(t){return this._get(t,this.plugins,"plugin")}
    method getScale (line 13) | getScale(t){return this._get(t,this.scales,"scale")}
    method removeControllers (line 13) | removeControllers(...t){this._each("unregister",t,this.controllers)}
    method removeElements (line 13) | removeElements(...t){this._each("unregister",t,this.elements)}
    method removePlugins (line 13) | removePlugins(...t){this._each("unregister",t,this.plugins)}
    method removeScales (line 13) | removeScales(...t){this._each("unregister",t,this.scales)}
    method _each (line 13) | _each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e...
    method _exec (line 13) | _exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s]...
    method _getRegistryForType (line 13) | _getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++)...
    method _get (line 13) | _get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is...
  class sn (line 13) | class sn{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(...
    method constructor (line 13) | constructor(){this._init=[]}
    method notify (line 13) | notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(...
    method _notify (line 13) | _notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===d(...
    method invalidate (line 13) | invalidate(){s(this._cache)||(this._oldCache=this._cache,this._cache=v...
    method _descriptors (line 13) | _descriptors(t){if(this._cache)return this._cache;const e=this._cache=...
    method _createDescriptors (line 13) | _createDescriptors(t,e){const i=t&&t.config,s=l(i.options&&i.options.p...
    method _notifyStateChanges (line 13) | _notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e...
  function nn (line 13) | function nn(t,e){return e||!1!==t?!0===t?{}:t:null}
  function on (line 13) | function on(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.g...
  function an (line 13) | function an(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||...
  function rn (line 13) | function rn(t){if("x"===t||"y"===t||"r"===t)return t}
  function ln (line 13) | function ln(t,...e){if(rn(t))return t;for(const s of e){const e=s.axis||...
  function hn (line 13) | function hn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}
  function cn (line 13) | function cn(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=an(t.t...
  function dn (line 13) | function dn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{...
  function un (line 13) | function un(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels...
  function pn (line 13) | function pn(t,e){let i=fn.get(t);return i||(i=e(),fn.set(t,i),gn.add(i)),i}
  class bn (line 13) | class bn{constructor(t){this._config=function(t){return(t=t||{}).data=un...
    method constructor (line 13) | constructor(t){this._config=function(t){return(t=t||{}).data=un(t.data...
    method platform (line 13) | get platform(){return this._config.platform}
    method type (line 13) | get type(){return this._config.type}
    method type (line 13) | set type(t){this._config.type=t}
    method data (line 13) | get data(){return this._config.data}
    method data (line 13) | set data(t){this._config.data=un(t)}
    method options (line 13) | get options(){return this._config.options}
    method options (line 13) | set options(t){this._config.options=t}
    method plugins (line 13) | get plugins(){return this._config.plugins}
    method update (line 13) | update(){const t=this._config;this.clearCache(),dn(t)}
    method clearCache (line 13) | clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}
    method datasetScopeKeys (line 13) | datasetScopeKeys(t){return pn(t,(()=>[[`datasets.${t}`,""]]))}
    method datasetAnimationScopeKeys (line 13) | datasetAnimationScopeKeys(t,e){return pn(`${t}.transition.${e}`,(()=>[...
    method datasetElementScopeKeys (line 13) | datasetElementScopeKeys(t,e){return pn(`${t}-${e}`,(()=>[[`datasets.${...
    method pluginScopeKeys (line 13) | pluginScopeKeys(t){const e=t.id;return pn(`${this.type}-plugin-${e}`,(...
    method _cachedScopes (line 13) | _cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!...
    method getOptionScopes (line 13) | getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScop...
    method chartOptionScopes (line 13) | chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue...
    method resolveNamedOptions (line 13) | resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,sub...
    method createResolver (line 13) | createResolver(t,e,i=[""],s){const{resolver:n}=xn(this._resolverCache,...
  function xn (line 13) | function xn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.jo...
  function vn (line 13) | function vn(t,e){return"top"===t||"bottom"===t||-1===yn.indexOf(t)&&"x"=...
  function Mn (line 13) | function Mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-...
  function wn (line 13) | function wn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("af...
  function kn (line 13) | function kn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[...
  function Sn (line 13) | function Sn(t){return fe()&&"string"==typeof t?t=document.getElementById...
  function Cn (line 13) | function Cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;i...
  class On (line 13) | class On{static defaults=ue;static instances=Pn;static overrides=re;stat...
    method register (line 13) | static register(...t){en.add(...t),An()}
    method unregister (line 13) | static unregister(...t){en.remove(...t),An()}
    method constructor (line 13) | constructor(t,e){const s=this.config=new bn(e),n=Sn(t),o=Dn(n);if(o)th...
    method aspectRatio (line 13) | get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},...
    method data (line 13) | get data(){return this.config.data}
    method data (line 13) | set data(t){this.config.data=t}
    method options (line 13) | get options(){return this._options}
    method options (line 13) | set options(t){this.config.options=t}
    method registry (line 13) | get registry(){return en}
    method _initialize (line 13) | _initialize(){return this.notifyPlugins("beforeInit"),this.options.res...
    method clear (line 13) | clear(){return Te(this.canvas,this.ctx),this}
    method stop (line 13) | stop(){return xt.stop(this),this}
    method resize (line 13) | resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}...
    method _resize (line 13) | _resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRati...
    method ensureScalesHaveIDs (line 13) | ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}
    method buildOrUpdateScales (line 13) | buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=...
    method _updateMetasets (line 13) | _updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i...
    method _removeUnreferencedMetasets (line 13) | _removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=thi...
    method buildOrUpdateControllers (line 13) | buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for...
    method _resetElements (line 13) | _resetElements(){u(this.data.datasets,((t,e)=>{this.getDatasetMeta(e)....
    method reset (line 13) | reset(){this._resetElements(),this.notifyPlugins("reset")}
    method update (line 13) | update(t){const e=this.config;e.update();const i=this._options=e.creat...
    method _updateScales (line 13) | _updateScales(){u(this.scales,(t=>{as.removeBox(this,t)})),this.ensure...
    method _checkEventBindings (line 13) | _checkEventBindings(){const t=this.options,e=new Set(Object.keys(this....
    method _updateHiddenIndices (line 13) | _updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniform...
    method _getUniformDataChanges (line 13) | _getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)re...
    method _updateLayout (line 13) | _updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable...
    method _updateDatasets (line 13) | _updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{...
    method _updateDataset (line 13) | _updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,m...
    method render (line 13) | render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(xt....
    method draw (line 13) | draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._...
    method _getSortedDatasetMetas (line 13) | _getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;fo...
    method getSortedVisibleDatasetMetas (line 13) | getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}
    method _drawDatasets (line 13) | _drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cance...
    method _drawDataset (line 13) | _drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t)...
    method isPointInArea (line 13) | isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}
    method getElementsAtEventForMode (line 13) | getElementsAtEventForMode(t,e,i,s){const n=Xi.modes[e];return"function...
    method getDatasetMeta (line 13) | getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s...
    method getContext (line 13) | getContext(){return this.$context||(this.$context=Ci(null,{chart:this,...
    method getVisibleDatasetCount (line 13) | getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().le...
    method isDatasetVisible (line 13) | isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const...
    method setDatasetVisibility (line 13) | setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}
    method toggleDataVisibility (line 13) | toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}
    method getDataVisibility (line 13) | getDataVisibility(t){return!this._hiddenIndices[t]}
    method _updateVisibility (line 13) | _updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta...
    method hide (line 13) | hide(t,e){this._updateVisibility(t,e,!1)}
    method show (line 13) | show(t,e){this._updateVisibility(t,e,!0)}
    method _destroyDatasetMeta (line 13) | _destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.co...
    method _stop (line 13) | _stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datase...
    method destroy (line 13) | destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=th...
    method toBase64Image (line 13) | toBase64Image(...t){return this.canvas.toDataURL(...t)}
    method bindEvents (line 13) | bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindRe...
    method bindUserEvents (line 13) | bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.a...
    method bindResponsiveEvents (line 13) | bindResponsiveEvents(){this._responsiveListeners||(this._responsiveLis...
    method unbindEvents (line 13) | unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventLis...
    method updateHoverStyle (line 13) | updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("data...
    method getActiveElements (line 13) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 13) | setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:...
    method notifyPlugins (line 13) | notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}
    method isPluginEnabled (line 13) | isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin...
    method _updateHoverStyles (line 13) | _updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter...
    method _eventHandler (line 13) | _eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea...
    method _handleEvent (line 13) | _handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._get...
    method _getActiveElements (line 13) | _getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)retu...
  function An (line 13) | function An(){return u(On.instances,(t=>t._plugins.invalidate()))}
  function Tn (line 13) | function Tn(){throw new Error("This method is not implemented: Check tha...
  class Ln (line 13) | class Ln{static override(t){Object.assign(Ln.prototype,t)}options;constr...
    method override (line 13) | static override(t){Object.assign(Ln.prototype,t)}
    method constructor (line 13) | constructor(t){this.options=t||{}}
    method init (line 13) | init(){}
    method formats (line 13) | formats(){return Tn()}
    method parse (line 13) | parse(){return Tn()}
    method format (line 13) | format(){return Tn()}
    method add (line 13) | add(){return Tn()}
    method diff (line 13) | diff(){return Tn()}
    method startOf (line 13) | startOf(){return Tn()}
    method endOf (line 13) | endOf(){return Tn()}
  function Rn (line 13) | function Rn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const...
  function In (line 13) | function In(t,e,i,s){return n(t)?function(t,e,i,s){const n=i.parse(t[0],...
  function zn (line 13) | function zn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o...
  function Fn (line 13) | function Fn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}
  function Vn (line 13) | function Vn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(...
  function Bn (line 13) | function Bn(t,e,i,s){var n,o,a;return s?(a=i,t=Nn(t=(n=t)===(o=e)?a:n===...
  function Nn (line 13) | function Nn(t,e,i){return"start"===t?e:"end"===t?i:t}
  function Wn (line 13) | function Wn(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:...
  class Hn (line 13) | class Hn extends Ws{static id="doughnut";static defaults={datasetElement...
    method generateLabels (line 13) | generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length...
    method onClick (line 13) | onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}
    method constructor (line 13) | constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadi...
    method linkScales (line 13) | linkScales(){}
    method parse (line 13) | parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===t...
    method _getRotation (line 13) | _getRotation(){return $(this.options.rotation-90)}
    method _getCircumference (line 13) | _getCircumference(){return $(this.options.circumference)}
    method _getRotationExtents (line 13) | _getRotationExtents(){let t=O,e=-O;for(let i=0;i<this.chart.data.datas...
    method update (line 13) | update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.da...
    method _circumference (line 13) | _circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._ge...
    method updateElements (line 13) | updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea...
    method calculateTotal (line 13) | calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i...
    method calculateCircumference (line 13) | calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!...
    method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.lab...
    method getMaxBorderWidth (line 13) | getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)fo...
    method getMaxOffset (line 13) | getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.r...
    method _getRingWeightOffset (line 13) | _getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatas...
    method _getRingWeight (line 13) | _getRingWeight(t){return Math.max(l(this.chart.data.datasets[t].weight...
    method _getVisibleDatasetWeightTotal (line 13) | _getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this....
  class jn (line 13) | class jn extends Ws{static id="polarArea";static defaults={dataElementTy...
    method generateLabels (line 13) | generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length...
    method onClick (line 13) | onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}
    method constructor (line 13) | constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=v...
    method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.lab...
    method parseObjectData (line 13) | parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}
    method update (line 13) | update(t){const e=this._cachedMeta.data;this._updateRadius(),this.upda...
    method getMinMax (line 13) | getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,m...
    method _updateRadius (line 13) | _updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.mi...
    method updateElements (line 13) | updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.a...
    method countVisibleElements (line 13) | countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data....
    method _computeAngle (line 13) | _computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.res...
  method parsePrimitiveData (line 13) | parsePrimitiveData(t,e,i,s){return zn(t,e,i,s)}
  method parseArrayData (line 13) | parseArrayData(t,e,i,s){return zn(t,e,i,s)}
  method parseObjectData (line 13) | parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxi...
  method updateRangeFromParsed (line 13) | updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);cons...
  method getMaxOverflow (line 13) | getMaxOverflow(){return 0}
  method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=thi...
  method initialize (line 13) | initialize(){this.enableOptionSharing=!0,super.initialize();this._cached...
  method update (line 13) | update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.l...
  method updateElements (line 13) | updateElements(t,e,i,n){const o="reset"===n,{index:a,_cachedMeta:{vScale...
  method _getStacks (line 13) | _getStacks(t,e){const{iScale:i}=this._cachedMeta,n=i.getMatchingVisibleM...
  method _getStackCount (line 13) | _getStackCount(t){return this._getStacks(void 0,t).length}
  method _getStackIndex (line 13) | _getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexO...
  method _getRuler (line 13) | _getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let ...
  method _calculateBarValuePixels (line 13) | _calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i,index...
  method _calculateBarIndexPixels (line 13) | _calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNul...
  method draw (line 13) | draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;f...
  method initialize (line 13) | initialize(){this.enableOptionSharing=!0,super.initialize()}
  method parsePrimitiveData (line 13) | parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);fo...
  method parseArrayData (line 13) | parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=...
  method parseObjectData (line 13) | parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let ...
  method getMaxOverflow (line 13) | getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.lengt...
  method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[...
  method update (line 13) | update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length...
  method updateElements (line 13) | updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._ca...
  method resolveDataElementOptions (line 13) | resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.res...
  method initialize (line 13) | initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,supe...
  method update (line 13) | update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=...
  method updateElements (line 13) | updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:...
  method getMaxOverflow (line 13) | getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.opt...
  method draw (line 13) | draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart...
  method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);...
  method parseObjectData (line 13) | parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}
  method update (line 13) | update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.g...
  method updateElements (line 13) | updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;fo...
  method getLabelAndValue (line 13) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[...
  method update (line 13) | update(t){const e=this._cachedMeta,{data:i=[]}=e,s=this.chart._animation...
  method addElements (line 13) | addElements(){const{showLine:t}=this.options;!this.datasetElementType&&t...
  method updateElements (line 13) | updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:...
  method getMaxOverflow (line 13) | getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options....
  function Yn (line 13) | function Yn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","ou...
  function Un (line 13) | function Un(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}
  function Xn (line 13) | function Xn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerR...
  function qn (line 13) | function qn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,...
  function Kn (line 13) | function Kn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.se...
  function Gn (line 13) | function Gn(t,e,i){t.lineTo(i.x,i.y)}
  function Zn (line 13) | function Zn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,...
  function Jn (line 13) | function Jn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l...
  function Qn (line 13) | function Qn(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=Zn(n,i,s)...
  function to (line 13) | function to(t){const e=t.options,i=e.borderDash&&e.borderDash.length;ret...
  function io (line 13) | function io(t,e,i,s){eo&&!e.options.segment?function(t,e,i,s){let n=e._p...
  class so (line 13) | class so extends Hs{static id="line";static defaults={borderCapStyle:"bu...
    method constructor (line 13) | constructor(t){super(),this.animated=!0,this.options=void 0,this._char...
    method updateControlPoints (line 13) | updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone...
    method points (line 13) | set points(t){this._points=t,delete this._segments,delete this._path,t...
    method points (line 13) | get points(){return this._points}
    method segments (line 13) | get segments(){return this._segments||(this._segments=zi(this,this.opt...
    method first (line 13) | first(){const t=this.segments,e=this.points;return t.length&&e[t[0].st...
    method last (line 13) | last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-...
    method interpolate (line 13) | interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{...
    method pathSegment (line 13) | pathSegment(t,e,i){return to(this)(t,this,e,i)}
    method path (line 13) | path(t,e,i){const s=this.segments,n=to(this);let o=this._loop;e=e||0,i...
    method draw (line 13) | draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.bor...
  function no (line 13) | function no(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return ...
  function oo (line 13) | function oo(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x",...
  function ao (line 13) | function ao(t,e,i,s){return t?0:J(e,i,s)}
  function ro (line 13) | function ro(t){const e=oo(t),i=e.right-e.left,s=e.bottom-e.top,n=functio...
  function lo (line 13) | function lo(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&oo(t,s);r...
  function ho (line 13) | function ho(t,e){t.rect(e.x,e.y,e.w,e.h)}
  function co (line 13) | function co(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w...
  method constructor (line 13) | constructor(t){super(),this.options=void 0,this.circumference=void 0,thi...
  method inRange (line 13) | inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X...
  method getCenterPoint (line 13) | getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,ou...
  method tooltipPosition (line 13) | tooltipPosition(t){return this.getCenterPoint(t)}
  method draw (line 13) | draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spa...
  method constructor (line 13) | constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.b...
  method draw (line 13) | draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}...
  method inRange (line 13) | inRange(t,e,i){return lo(this,t,e,i)}
  method inXRange (line 13) | inXRange(t,e){return lo(this,t,null,e)}
  method inYRange (line 13) | inYRange(t,e){return lo(this,null,t,e)}
  method getCenterPoint (line 13) | getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x",...
  method getRange (line 13) | getRange(t){return"x"===t?this.width/2:this.height/2}
  method constructor (line 13) | constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=...
  method inRange (line 13) | inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i)...
  method inXRange (line 13) | inXRange(t,e){return no(this,t,"x",e)}
  method inYRange (line 13) | inYRange(t,e){return no(this,t,"y",e)}
  method getCenterPoint (line 13) | getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y...
  method size (line 13) | size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverR...
  method draw (line 13) | draw(t,e){const i=this.options;this.skip||i.radius<.1||!Re(this,e,this.s...
  method getRange (line 13) | getRange(){const t=this.options||{};return t.radius+t.hitRadius}
  function fo (line 13) | function fo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("...
  function go (line 13) | function go(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}
  function po (line 13) | function po(t,e,{horizontal:i,minRotation:s}){const n=$(s),o=(i?Math.sin...
  class mo (line 13) | class mo extends Js{constructor(t){super(t),this.start=void 0,this.end=v...
    method constructor (line 13) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 13) | parse(t,e){return s(t)||("number"==typeof t||t instanceof Number)&&!is...
    method handleTickRangeOptions (line 13) | handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined...
    method getTickLimit (line 13) | getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepS...
    method computeTickLimit (line 13) | computeTickLimit(){return Number.POSITIVE_INFINITY}
    method buildTicks (line 13) | buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();...
    method configure (line 13) | configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.conf...
    method getLabelForValue (line 13) | getLabelForValue(t){return ne(t,this.chart.options.locale,this.options...
  class bo (line 13) | class bo extends mo{static id="linear";static defaults={ticks:{callback:...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a...
    method computeTickLimit (line 13) | computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.hei...
    method getPixelForValue (line 13) | getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-thi...
    method getValueForPixel (line 13) | getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)...
  function yo (line 13) | function yo(t){return 1===t/Math.pow(10,xo(t))}
  function vo (line 13) | function vo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math....
  function Mo (line 13) | function Mo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=xo(e);let o=funct...
  class wo (line 13) | class wo extends Js{static id="logarithmic";static defaults={ticks:{call...
    method constructor (line 13) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 13) | parse(t,e){const i=mo.prototype.parse.apply(this,[t,e]);if(0!==i)retur...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a...
    method handleTickRangeOptions (line 13) | handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUser...
    method buildTicks (line 13) | buildTicks(){const t=this.options,e=Mo({min:this._userMin,max:this._us...
    method getLabelForValue (line 13) | getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.loca...
    method configure (line 13) | configure(){const t=this.min;super.configure(),this._startValue=z(t),t...
    method getPixelForValue (line 13) | getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||i...
    method getValueForPixel (line 13) | getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow...
  function ko (line 13) | function ko(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.bac...
  function So (line 13) | function So(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||...
  function Po (line 13) | function Po(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.ri...
  function Do (line 13) | function Do(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos...
  function Co (line 13) | function Co(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padd...
  function Oo (line 13) | function Oo(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;r...
  function Ao (line 13) | function Ao(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor...
  function To (line 13) | function To(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O...
  class Lo (line 13) | class Lo extends mo{static id="radialLinear";static defaults={display:!0...
    method constructor (line 13) | constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.d...
    method setDimensions (line 13) | setDimensions(){const t=this._padding=ki(ko(this.options)/2),e=this.wi...
    method determineDataLimits (line 13) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a...
    method computeTickLimit (line 13) | computeTickLimit(){return Math.ceil(this.drawingArea/ko(this.options))}
    method generateTickLabels (line 13) | generateTickLabels(t){mo.prototype.generateTickLabels.call(this,t),thi...
    method fit (line 13) | fit(){const t=this.options;t.display&&t.pointLabels.display?Po(this):t...
    method setCenterPoint (line 13) | setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter...
    method getIndexAngle (line 13) | getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.o...
    method getDistanceFromCenterForValue (line 13) | getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawi...
    method getValueForDistanceFromCenter (line 13) | getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.dr...
    method getPointLabelContext (line 13) | getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.len...
    method getPointPosition (line 13) | getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-E+i;return{x:M...
    method getPointPositionForValue (line 13) | getPointPositionForValue(t,e){return this.getPointPosition(t,this.getD...
    method getBasePosition (line 13) | getBasePosition(t){return this.getPointPositionForValue(t||0,this.getB...
    method getPointLabelPosition (line 13) | getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._po...
    method drawBackground (line 13) | drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.optio...
    method drawGrid (line 13) | drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s,border...
    method drawBorder (line 13) | drawBorder(){}
    method drawLabels (line 13) | drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)r...
    method drawTitle (line 13) | drawTitle(){}
  function Io (line 13) | function Io(t,e){return t-e}
  function zo (line 13) | function zo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:...
  function Fo (line 13) | function Fo(t,e,i,s){const n=Ro.length;for(let o=Ro.indexOf(t);o<n-1;++o...
  function Vo (line 13) | function Vo(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=et(i,e);t[i[s]>=e...
  function Bo (line 13) | function Bo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=...
  class No (line 13) | class No extends Js{static id="time";static defaults={bounds:"data",adap...
    method constructor (line 13) | constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._u...
    method init (line 13) | init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new En._date(...
    method parse (line 13) | parse(t,e){return void 0===t?null:zo(this,t)}
    method beforeLayout (line 13) | beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all...
    method determineDataLimits (line 13) | determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.un...
    method _getLabelBounds (line 13) | _getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSIT...
    method buildTicks (line 13) | buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.so...
    method afterAutoSkip (line 13) | afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(thi...
    method initOffsets (line 13) | initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=th...
    method _generate (line 13) | _generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options...
    method getLabelForValue (line 13) | getLabelForValue(t){const e=this._adapter,i=this.options.time;return i...
    method format (line 13) | format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e|...
    method _tickFormatFunction (line 13) | _tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;i...
    method generateTickLabels (line 13) | generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.la...
    method getDecimalForValue (line 13) | getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this....
    method getPixelForValue (line 13) | getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t)...
    method getValueForPixel (line 13) | getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)...
    method _getLabelSize (line 13) | _getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t)....
    method _getLabelCapacity (line 13) | _getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[...
    method getDataTimestamps (line 13) | getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return ...
    method getLabelTimestamps (line 13) | getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.lengt...
    method normalize (line 13) | normalize(t){return lt(t.sort(Io))}
  function Wo (line 13) | function Wo(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l]....
  method constructor (line 13) | constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this....
  method init (line 13) | init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();...
  method parse (line 13) | parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>nu...
  method determineDataLimits (line 13) | determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBound...
  method buildTicks (line 13) | buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let ...
  method getLabelForValue (line 13) | getLabelForValue(t){return go.call(this,t)}
  method configure (line 13) | configure(){super.configure(),this.isHorizontal()||(this._reversePixels=...
  method getPixelForValue (line 13) | getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t...
  method getPixelForTick (line 13) | getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this...
  method getValueForPixel (line 13) | getValueForPixel(t){return Math.round(this._startValue+this.getDecimalFo...
  method getBasePixel (line 13) | getBasePixel(){return this.bottom}
  method constructor (line 13) | constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRa...
  method initOffsets (line 13) | initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.b...
  method buildLookupTable (line 13) | buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(...
  method _getTimestampsForTable (line 13) | _getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;...
  method getDecimalForValue (line 13) | getDecimalForValue(t){return(Wo(this._table,t)-this._minPos)/this._table...
  method getValueForPixel (line 13) | getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e...
  function Yo (line 13) | function Yo(t){return jo[t%jo.length]}
  function Uo (line 13) | function Uo(t){return $o[t%$o.length]}
  function Xo (line 13) | function Xo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).control...
  function qo (line 13) | function qo(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColo...
  method beforeLayout (line 13) | beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options...
  function Go (line 13) | function Go(t){if(t._decimated){const e=t._data;delete t._decimated,dele...
  function Zo (line 13) | function Zo(t){t.data.datasets.forEach((t=>{Go(t)}))}
  method destroy (line 13) | destroy(t){Zo(t)}
  function Qo (line 13) | function Qo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n...
  function ta (line 13) | function ta(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y...
  function ea (line 13) | function ea(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}
  function ia (line 13) | function ia(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){co...
  function sa (line 13) | function sa(t){return t&&!1!==t.fill}
  function na (line 13) | function na(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(...
  function oa (line 13) | function oa(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=...
  function aa (line 13) | function aa(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{...
  function ra (line 13) | function ra(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i...
  class la (line 13) | class la{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathS...
    method constructor (line 13) | constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}
    method pathSegment (line 13) | pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,e...
    method interpolate (line 13) | interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math....
  function ha (line 13) | function ha(t){const{chart:e,fill:i,line:s}=t;if(a(i))return function(t,...
  function ca (line 13) | function ca(t,e,i){const s=ha(e),{line:n,scale:o,axis:a}=e,r=n.options,l...
  function da (line 13) | function da(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPat...
  function ua (line 13) | function ua(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=f...
  function fa (line 13) | function fa(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,s...
  function ga (line 13) | function ga(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}
  method afterDatasetsUpdate (line 13) | afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let...
  method beforeDraw (line 13) | beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisible...
  method beforeDatasetsDraw (line 13) | beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;co...
  method beforeDatasetDraw (line 13) | beforeDatasetDraw(t,e,i){const s=e.meta.$filler;sa(s)&&"beforeDatasetDra...
  class ba (line 13) | class ba extends Hs{constructor(t){super(),this._added=!1,this.legendHit...
    method constructor (line 13) | constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hov...
    method update (line 13) | update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.se...
    method setDimensions (line 13) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method buildLabels (line 13) | buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels...
    method fit (line 13) | fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width...
    method _fitRows (line 13) | _fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}...
    method _fitCols (line 13) | _fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}...
    method adjustHitBoxes (line 13) | adjustHitBoxes(){if(!this.options.display)return;const t=this._compute...
    method isHorizontal (line 13) | isHorizontal(){return"top"===this.options.position||"bottom"===this.op...
    method draw (line 13) | draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw...
    method _draw (line 13) | _draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:...
    method drawTitle (line 13) | drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding...
    method _computeTitleHeight (line 13) | _computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.p...
    method _getLegendItemAt (line 13) | _getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,th...
    method handleEvent (line 13) | handleEvent(t){const e=this.options;if(!function(t,e){if(("mousemove"=...
  function xa (line 13) | function xa(t,e){return e*(t.text?t.text.length+.5:0)}
  method start (line 13) | start(t,e,i){const s=t.legend=new ba({ctx:t.ctx,options:i,chart:t});as.c...
  method stop (line 13) | stop(t){as.removeBox(t,t.legend),delete t.legend}
  method beforeUpdate (line 13) | beforeUpdate(t,e,i){const s=t.legend;as.configure(t,s,i),s.options=i}
  method afterUpdate (line 13) | afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()}
  method afterEvent (line 13) | afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)}
  method onClick (line 13) | onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n...
  method generateLabels (line 13) | generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,point...
  class ya (line 13) | class ya extends Hs{constructor(t){super(),this.chart=t.chart,this.optio...
    method constructor (line 13) | constructor(t){super(),this.chart=t.chart,this.options=t.options,this....
    method update (line 13) | update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)...
    method isHorizontal (line 13) | isHorizontal(){const t=this.options.position;return"top"===t||"bottom"...
    method _drawArgs (line 13) | _drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.a...
    method draw (line 13) | draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si...
  method start (line 13) | start(t,e,i){!function(t,e){const i=new ya({ctx:t.ctx,options:e,chart:t}...
  method stop (line 13) | stop(t){const e=t.titleBlock;as.removeBox(t,e),delete t.titleBlock}
  method beforeUpdate (line 13) | beforeUpdate(t,e,i){const s=t.titleBlock;as.configure(t,s,i),s.options=i}
  method start (line 13) | start(t,e,i){const s=new ya({ctx:t.ctx,options:i,chart:t});as.configure(...
  method stop (line 13) | stop(t){as.removeBox(t,Ma.get(t)),Ma.delete(t)}
  method beforeUpdate (line 13) | beforeUpdate(t,e,i){const s=Ma.get(t);as.configure(t,s,i),s.options=i}
  method average (line 13) | average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;...
  method nearest (line 13) | nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITI...
  function Sa (line 13) | function Sa(t,e){return e&&(n(e)?Array.prototype.push.apply(t,e):t.push(...
  function Pa (line 13) | function Pa(t){return("string"==typeof t||t instanceof String)&&t.indexO...
  function Da (line 13) | function Da(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatase...
  function Ca (line 13) | function Ca(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWid...
  function Oa (line 13) | function Oa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,rig...
  function Aa (line 13) | function Aa(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,h...
  function Ta (line 13) | function Ta(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,...
  function La (line 13) | function La(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/...
  function Ea (line 13) | function Ea(t){return Sa([],Pa(t))}
  function Ra (line 13) | function Ra(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tool...
  method title (line 13) | title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:...
  method label (line 13) | label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.l...
  method labelColor (line 13) | labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller....
  method labelTextColor (line 13) | labelTextColor(){return this.options.bodyColor}
  method labelPointStyle (line 13) | labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).contro...
  function za (line 13) | function za(t,e,i,s){const n=t[e].call(i,s);return void 0===n?Ia[e].call...
  class Fa (line 13) | class Fa extends Hs{static positioners=ka;constructor(t){super(),this.op...
    method constructor (line 13) | constructor(t){super(),this.opacity=0,this._active=[],this._eventPosit...
    method initialize (line 13) | initialize(t){this.options=t,this._cachedAnimations=void 0,this.$conte...
    method _resolveAnimations (line 13) | _resolveAnimations(){const t=this._cachedAnimations;if(t)return t;cons...
    method getContext (line 13) | getContext(){return this.$context||(this.$context=(t=this.chart.getCon...
    method getTitle (line 13) | getTitle(t,e){const{callbacks:i}=e,s=za(i,"beforeTitle",this,t),n=za(i...
    method getBeforeBody (line 13) | getBeforeBody(t,e){return Ea(za(e.callbacks,"beforeBody",this,t))}
    method getBody (line 13) | getBody(t,e){const{callbacks:i}=e,s=[];return u(t,(t=>{const e={before...
    method getAfterBody (line 13) | getAfterBody(t,e){return Ea(za(e.callbacks,"afterBody",this,t))}
    method getFooter (line 13) | getFooter(t,e){const{callbacks:i}=e,s=za(i,"beforeFooter",this,t),n=za...
    method _createItems (line 13) | _createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];...
    method update (line 13) | update(t,e){const i=this.options.setContext(this.getContext()),s=this....
    method drawCaret (line 13) | drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,...
    method getCaretPosition (line 13) | getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cor...
    method drawTitle (line 13) | drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l...
    method _drawColorBox (line 13) | _drawColorBox(t,e,i,s,n){const a=this.labelColors[i],r=this.labelPoint...
    method drawBody (line 13) | drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayC...
    method drawFooter (line 13) | drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r...
    method drawBackground (line 13) | drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{wid...
    method _updateAnimationTarget (line 13) | _updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i...
    method _willRender (line 13) | _willRender(){return!!this.opacity}
    method draw (line 13) | draw(t){const e=this.options.setContext(this.getContext());let i=this....
    method getActiveElements (line 13) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 13) | setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,...
    method handleEvent (line 13) | handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ig...
    method _getActiveElements (line 13) | _getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.typ...
    method _positionChanged (line 13) | _positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=ka[n.p...
  method afterInit (line 13) | afterInit(t,e,i){i&&(t.tooltip=new Fa({chart:t,options:i}))}
  method beforeUpdate (line 13) | beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)}
  method reset (line 13) | reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)}
  method afterDraw (line 13) | afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e...
  method afterEvent (line 13) | afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.e...

FILE: dashboard/src/utils/assert.js
  function assertExistence (line 1) | function assertExistence(value, error) {

FILE: dashboard/src/utils/queue.js
  class Queue (line 1) | class Queue {
    method constructor (line 2) | constructor() {
    method enqueue (line 7) | enqueue(task) {
    method #dequeue (line 12) | async #dequeue() {

FILE: dashboard/src/utils/utils.js
  function toAsyncAndWaitAfter (line 1) | function toAsyncAndWaitAfter(task, delay = 0) {
  function fetchData (line 22) | async function fetchData(endpoint, opts = {}) {
  function toTimeString (line 41) | function toTimeString(date = new Date()) {
  function timeStringToTimestamp (line 51) | function timeStringToTimestamp(timeString) {
  function prettifyNumber (line 72) | function prettifyNumber(number) {
  function secondsToIntervalString (line 92) | function secondsToIntervalString(number) {
  function copyToClipboard (line 147) | async function copyToClipboard(textToCopy) {
  function isMobile (line 168) | function isMobile() {
  function registerAbortController (line 172) | function registerAbortController(abortController) {

FILE: deps/picohttpparser/picohttpparser.c
  type phr_header (line 295) | struct phr_header
  type phr_header (line 353) | struct phr_header
  function phr_parse_request (line 398) | int phr_parse_request(const char *buf_start, size_t len, const char **me...
  type phr_header (line 427) | struct phr_header
  function phr_parse_response (line 471) | int phr_parse_response(const char *buf_start, size_t len, int *minor_ver...
  function phr_parse_headers (line 497) | int phr_parse_headers(const char *buf_start, size_t len, struct phr_head...
  function decode_hex (line 527) | static int decode_hex(int ch)
  function phr_decode_chunked (line 540) | ssize_t phr_decode_chunked(struct phr_chunked_decoder *decoder, char *bu...
  function phr_decode_chunked_is_in_data (line 655) | int phr_decode_chunked_is_in_data(struct phr_chunked_decoder *decoder)

FILE: deps/picohttpparser/picohttpparser.h
  type phr_header (line 42) | struct phr_header {
  type phr_header (line 52) | struct phr_header
  type phr_header (line 56) | struct phr_header
  type phr_header (line 59) | struct phr_header
  type phr_chunked_decoder (line 62) | struct phr_chunked_decoder {
  type phr_chunked_decoder (line 78) | struct phr_chunked_decoder
  type phr_chunked_decoder (line 81) | struct phr_chunked_decoder

FILE: deps/uthash.h
  type UT_hash_bucket (line 1096) | typedef struct UT_hash_bucket {
  type UT_hash_table (line 1120) | typedef struct UT_hash_table {
  type UT_hash_handle (line 1153) | typedef struct UT_hash_handle {

FILE: examples/mysql_log/mysql_log.c
  function handle_signal (line 30) | void handle_signal(int s)
  function connect_callback (line 36) | void connect_callback(struct mosquitto *mosq, void *obj, int result)
  function message_callback (line 41) | void message_callback(struct mosquitto *mosq, void *obj, const struct mo...
  function main (line 62) | int main(int argc, char *argv[])

FILE: examples/publish/basic-1.c
  function on_connect (line 17) | void on_connect(struct mosquitto *mosq, void *obj, int reason_code)
  function on_publish (line 43) | void on_publish(struct mosquitto *mosq, void *obj, int mid)
  function get_temperature (line 52) | int get_temperature(void)
  function publish_sensor_data (line 60) | void publish_sensor_data(struct mosquitto *mosq)
  function main (line 88) | int main(int argc, char *argv[])

FILE: examples/publish/basic-websockets-1.c
  function on_connect (line 19) | void on_connect(struct mosquitto *mosq, void *obj, int reason_code)
  function on_publish (line 45) | void on_publish(struct mosquitto *mosq, void *obj, int mid)
  function get_temperature (line 54) | int get_temperature(void)
  function publish_sensor_data (line 62) | void publish_sensor_data(struct mosquitto *mosq)
  function main (line 90) | int main(int argc, char *argv[])

FILE: examples/subscribe/basic-1.c
  function on_connect (line 14) | void on_connect(struct mosquitto *mosq, void *obj, int reason_code)
  function on_subscribe (line 42) | void on_subscribe(struct mosquitto *mosq, void *obj, int mid, int qos_co...
  function on_message (line 66) | void on_message(struct mosquitto *mosq, void *obj, const struct mosquitt...
  function main (line 73) | int main(int argc, char *argv[])

FILE: examples/subscribe_simple/callback.c
  function on_message (line 6) | int on_message(struct mosquitto *mosq, void *userdata, const struct mosq...
  function main (line 13) | int main(int argc, char *argv[])

FILE: examples/subscribe_simple/multiple.c
  function main (line 8) | int main(int argc, char *argv[])

FILE: examples/subscribe_simple/single.c
  function main (line 6) | int main(int argc, char *argv[])

FILE: examples/temperature_conversion/main.cpp
  function main (line 4) | int main(int argc, char *argv[])

FILE: examples/temperature_conversion/temperature_conversion.cpp
  type mosquitto_message (line 31) | struct mosquitto_message

FILE: examples/temperature_conversion/temperature_conversion.h
  function class (line 6) | class mqtt_tempconv : public mosqpp::mosquittopp

FILE: fuzzing/apps/db_dump/db_dump_fuzz_load.cpp
  function run_db_dump (line 35) | void run_db_dump(char *filename)
  function LLVMFuzzerTestOneInput (line 49) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/apps/db_dump/db_dump_fuzz_load_client_stats.cpp
  function run_db_dump (line 35) | void run_db_dump(char *filename)
  function LLVMFuzzerTestOneInput (line 51) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/apps/db_dump/db_dump_fuzz_load_stats.cpp
  function run_db_dump (line 35) | void run_db_dump(char *filename)
  function LLVMFuzzerTestOneInput (line 51) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/apps/mosquitto_passwd/mosquitto_passwd_fuzz_load.cpp
  function run_mosquitto_passwd (line 35) | void run_mosquitto_passwd(char *filename)
  function LLVMFuzzerTestOneInput (line 55) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz.cpp
  function recv_timeout (line 60) | void recv_timeout(int sock, void *buf, size_t len, int timeout_us)
  function connect_retrying (line 69) | int connect_retrying(int port)
  function LLVMFuzzerTestOneInput (line 97) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz.h
  type fuzz_data (line 24) | struct fuzz_data {
  type fuzz_data (line 33) | struct fuzz_data

FILE: fuzzing/broker/broker_fuzz_acl_file.cpp
  function LLVMFuzzerTestOneInput (line 34) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_handle_auth.cpp
  function fuzz_packet_read_init (line 23) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 31) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 38) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_handle_connect.cpp
  function fuzz_basic_auth (line 23) | int fuzz_basic_auth(int event, void *event_data, void *userdata)
  function fuzz_packet_read_init (line 38) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 51) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 61) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_handle_publish.cpp
  function fuzz_acl_check (line 22) | int fuzz_acl_check(int event, void *event_data, void *userdata)
  function fuzz_packet_read_init (line 37) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 50) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 60) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_handle_subscribe.cpp
  function fuzz_acl_check (line 23) | int fuzz_acl_check(int event, void *event_data, void *userdata)
  function fuzz_packet_read_init (line 38) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 51) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 61) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_handle_unsubscribe.cpp
  function fuzz_acl_check (line 23) | int fuzz_acl_check(int event, void *event_data, void *userdata)
  function fuzz_packet_read_init (line 38) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 51) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 61) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_password_file.cpp
  function LLVMFuzzerTestOneInput (line 34) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_proxy_v1.cpp
  function net__read (line 34) | ssize_t net__read(struct mosquitto *mosq, void *buf, size_t count)
  function net__socket_get_address (line 43) | int net__socket_get_address(mosq_sock_t sock, char *buf, size_t len, uin...
  function http__context_init (line 51) | int http__context_init(struct mosquitto *context)
  function log__printf (line 59) | int log__printf(struct mosquitto *mosq, unsigned int priority, const cha...
  function LLVMFuzzerTestOneInput (line 67) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_proxy_v2.cpp
  function net__read (line 34) | ssize_t net__read(struct mosquitto *mosq, void *buf, size_t count)
  function http__context_init (line 43) | int http__context_init(struct mosquitto *context)
  function log__printf (line 51) | int log__printf(struct mosquitto *mosq, unsigned int priority, const cha...
  function LLVMFuzzerTestOneInput (line 59) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_psk_file.cpp
  function LLVMFuzzerTestOneInput (line 34) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_queue_msg.cpp
  function LLVMFuzzerTestOneInput (line 37) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_read_handle.cpp
  function fuzz_packet_read_init (line 22) | int fuzz_packet_read_init(struct mosquitto *context)
  function fuzz_packet_read_cleanup (line 28) | void fuzz_packet_read_cleanup(struct mosquitto *context)
  function LLVMFuzzerTestOneInput (line 33) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_test_config.cpp
  function run_broker (line 36) | void run_broker(char *filename)
  function LLVMFuzzerTestOneInput (line 55) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/broker_fuzz_with_init.cpp
  function recv_timeout (line 60) | void recv_timeout(int sock, void *buf, size_t len, int timeout_us)
  function connect_retrying (line 69) | int connect_retrying(int port)
  function initialise (line 97) | static bool initialise(pthread_t *thread)
  function deinitialise (line 120) | void deinitialise(pthread_t *thread)
  function LLVMFuzzerTestOneInput (line 127) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/broker/fuzz_packet_read_base.c
  function fuzz_packet_read_base (line 31) | int fuzz_packet_read_base(const uint8_t *data, size_t size, int (*packet...

FILE: fuzzing/broker/fuzz_packet_read_base.h
  type mosquitto (line 35) | struct mosquitto
  type mosquitto (line 36) | struct mosquitto
  type mosquitto (line 37) | struct mosquitto

FILE: fuzzing/generate_packet_corpora.py
  function gen_packet_corpus (line 22) | def gen_packet_corpus(packet_type, input_path):

FILE: fuzzing/libcommon/libcommon_fuzz_property.cpp
  function DEFINE_PROTO_FUZZER (line 6) | DEFINE_PROTO_FUZZER(const fuzz_property::FuzzerInput& fuzzer_input)

FILE: fuzzing/libcommon/libcommon_fuzz_pub_topic_check2.cpp
  function LLVMFuzzerTestOneInput (line 21) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/libcommon/libcommon_fuzz_sub_topic_check2.cpp
  function LLVMFuzzerTestOneInput (line 21) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/libcommon/libcommon_fuzz_topic_matching.cpp
  function DEFINE_PROTO_FUZZER (line 6) | DEFINE_PROTO_FUZZER(const fuzz_topic_matches_sub::FuzzerInput& fuzzer_in...

FILE: fuzzing/libcommon/libcommon_fuzz_topic_tokenise.cpp
  function LLVMFuzzerTestOneInput (line 23) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/libcommon/libcommon_fuzz_utf8.cpp
  function LLVMFuzzerTestOneInput (line 21) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: fuzzing/plugins/dynamic-security/dynsec_fuzz_load.cpp
  type mosquitto_db (line 41) | struct mosquitto_db
  function run_dynsec (line 44) | void run_dynsec(char *filename)
  function LLVMFuzzerTestOneInput (line 68) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)

FILE: include/mosquitto/broker.h
  type mosquitto_protocol (line 45) | enum mosquitto_protocol {
  type mosquitto_broker_msg_direction (line 52) | enum mosquitto_broker_msg_direction {
  type mosquitto_client (line 65) | struct mosquitto_client {
  type mosquitto_subscription (line 80) | struct mosquitto_subscription {
  type mosquitto_base_msg (line 90) | struct mosquitto_base_msg {
  type mosquitto_client_msg (line 107) | struct mosquitto_client_msg {
  type mosquitto_will_msg (line 122) | struct mosquitto_will_msg {
  type mosquitto_plugin_event (line 139) | enum mosquitto_plugin_event {
  type mosquitto_evt_reload (line 174) | struct mosquitto_evt_reload {
  type mosquitto_evt_acl_check (line 182) | struct mosquitto_evt_acl_check {
  type mosquitto_evt_basic_auth (line 196) | struct mosquitto_evt_basic_auth {
  type mosquitto_evt_psk_key (line 210) | struct mosquitto_evt_psk_key {
  type mosquitto_evt_extended_auth (line 221) | struct mosquitto_evt_extended_auth {
  type mosquitto_evt_control (line 233) | struct mosquitto_evt_control {
  type mosquitto_evt_message (line 249) | struct mosquitto_evt_message {
  type mosquitto_evt_tick (line 266) | struct mosquitto_evt_tick {
  type mosquitto_evt_connect (line 276) | struct mosquitto_evt_connect {
  type mosquitto_evt_disconnect (line 283) | struct mosquitto_evt_disconnect {
  type mosquitto_evt_client_offline (line 291) | struct mosquitto_evt_client_offline {
  type mosquitto_evt_subscribe (line 299) | struct mosquitto_evt_subscribe {
  type mosquitto_evt_unsubscribe (line 308) | struct mosquitto_evt_unsubscribe {
  type mosquitto_evt_persist_restore (line 319) | struct mosquitto_evt_persist_restore {
  type mosquitto_evt_persist_client (line 327) | struct mosquitto_evt_persist_client {
  type mosquitto_evt_persist_subscription (line 337) | struct mosquitto_evt_persist_subscription {
  type mosquitto_evt_persist_client_msg (line 347) | struct mosquitto_evt_persist_client_msg {
  type mosquitto_evt_persist_base_msg (line 357) | struct mosquitto_evt_persist_base_msg {
  type mosquitto_evt_persist_retain_msg (line 367) | struct mosquitto_evt_persist_retain_msg {
  type mosquitto_evt_persist_will_msg (line 377) | struct mosquitto_evt_persist_will_msg {
  type mosquitto_plugin_id_t (line 387) | typedef struct mosquitto_plugin_id_t mosquitto_plugin_id_t;
  type mosquitto (line 619) | struct mosquitto
  type mosquitto (line 627) | struct mosquitto
  type mosquitto (line 635) | struct mosquitto
  type mosquitto (line 643) | struct mosquitto
  type mosquitto (line 651) | struct mosquitto
  type mosquitto (line 659) | struct mosquitto
  type mosquitto (line 675) | struct mosquitto
  type mosquitto (line 687) | struct mosquitto
  type mosquitto (line 700) | struct mosquitto
  type mosquitto (line 708) | struct mosquitto
  type mosquitto (line 716) | struct mosquitto
  type mosquitto (line 736) | struct mosquitto
  type mosquitto (line 751) | struct mosquitto
  type mosquitto (line 798) | struct mosquitto
  type mosquitto_client (line 977) | struct mosquitto_client
  type mosquitto_client (line 1010) | struct mosquitto_client
  type mosquitto_client_msg (line 1055) | struct mosquitto_client_msg
  type mosquitto_client_msg (line 1078) | struct mosquitto_client_msg
  type mosquitto_client_msg (line 1102) | struct mosquitto_client_msg
  type mosquitto_client_msg (line 1122) | struct mosquitto_client_msg
  type mosquitto_base_msg (line 1160) | struct mosquitto_base_msg
  type mosquitto_subscription (line 1192) | struct mosquitto_subscription

FILE: include/mosquitto/broker_control.h
  type mosquitto_control_cmd (line 44) | struct mosquitto_control_cmd {
  type mosquitto_control_cmd (line 52) | struct mosquitto_control_cmd
  type mosquitto_evt_control (line 54) | struct mosquitto_evt_control
  type mosquitto_control_cmd (line 55) | struct mosquitto_control_cmd

FILE: include/mosquitto/broker_plugin.h
  type mosquitto (line 50) | struct mosquitto
  type mosquitto_opt (line 52) | struct mosquitto_opt {
  type mosquitto_auth_opt (line 57) | struct mosquitto_auth_opt {
  type mosquitto_acl_msg (line 62) | struct mosquitto_acl_msg {
  type mosquitto_opt (line 170) | struct mosquitto_opt
  type mosquitto_opt (line 193) | struct mosquitto_opt
  type mosquitto_opt (line 255) | struct mosquitto_opt
  type mosquitto_opt (line 277) | struct mosquitto_opt
  type mosquitto_opt (line 305) | struct mosquitto_opt
  type mosquitto_opt (line 333) | struct mosquitto_opt
  type mosquitto (line 360) | struct mosquitto
  type mosquitto_acl_msg (line 360) | struct mosquitto_acl_msg
  type mosquitto (line 377) | struct mosquitto
  type mosquitto (line 405) | struct mosquitto
  type mosquitto (line 432) | struct mosquitto
  type mosquitto (line 434) | struct mosquitto

FILE: include/mosquitto/defs.h
  type mosq_err_t (line 49) | enum mosq_err_t {
  type mosq_transport_t (line 126) | enum mosq_transport_t {
  type mosquitto (line 138) | struct mosquitto
  type mosquitto_property (line 139) | typedef struct mqtt5__property mosquitto_property;

FILE: include/mosquitto/libcommon_password.h
  type mosquitto_pwhash_type (line 29) | enum mosquitto_pwhash_type {
  type mosquitto_pw_params (line 36) | enum mosquitto_pw_params {
  type mosquitto_pw (line 40) | struct mosquitto_pw
  type mosquitto_pw (line 42) | struct mosquitto_pw
  type mosquitto_pw (line 43) | struct mosquitto_pw
  type mosquitto_pw (line 45) | struct mosquitto_pw
  type mosquitto_pwhash_type (line 45) | enum mosquitto_pwhash_type
  type mosquitto_pw (line 46) | struct mosquitto_pw
  type mosquitto_pw (line 47) | struct mosquitto_pw
  type mosquitto_pw (line 48) | struct mosquitto_pw
  type mosquitto_pw (line 49) | struct mosquitto_pw
  type mosquitto_pw (line 50) | struct mosquitto_pw
  type mosquitto_pw (line 51) | struct mosquitto_pw

FILE: include/mosquitto/libmosquitto.h
  type mosq_opt_t (line 76) | enum mosq_opt_t {
  type mosquitto_message (line 114) | struct mosquitto_message {
  type mosquitto_message_v5 (line 123) | struct mosquitto_message_v5 {

FILE: include/mosquitto/libmosquitto_auth.h
  type mosquitto (line 57) | struct mosquitto
  type mosquitto (line 77) | struct mosquitto

FILE: include/mosquitto/libmosquitto_callbacks.h
  type mosquitto (line 64) | struct mosquitto
  type mosquitto (line 65) | struct mosquitto
  type mosquitto (line 90) | struct mosquitto
  type mosquitto (line 91) | struct mosquitto
  type mosquitto (line 121) | struct mosquitto
  type mosquitto (line 122) | struct mosquitto
  type mosquitto (line 141) | struct mosquitto
  type mosquitto (line 142) | struct mosquitto
  type mosquitto (line 162) | struct mosquitto
  type mosquitto (line 163) | struct mosquitto
  type mosquitto (line 188) | struct mosquitto
  type mosquitto (line 189) | struct mosquitto
  type mosquitto (line 215) | struct mosquitto
  type mosquitto (line 216) | struct mosquitto
  type mosquitto (line 251) | struct mosquitto
  type mosquitto (line 252) | struct mosquitto
  type mosquitto (line 275) | struct mosquitto
  type mosquitto_message (line 275) | struct mosquitto_message
  type mosquitto (line 276) | struct mosquitto
  type mosquitto (line 304) | struct mosquitto
  type mosquitto_message (line 304) | struct mosquitto_message
  type mosquitto (line 305) | struct mosquitto
  type mosquitto (line 326) | struct mosquitto
  type mosquitto (line 327) | struct mosquitto
  type mosquitto (line 353) | struct mosquitto
  type mosquitto (line 354) | struct mosquitto
  type mosquitto (line 372) | struct mosquitto
  type mosquitto (line 373) | struct mosquitto
  type mosquitto (line 396) | struct mosquitto
  type mosquitto (line 397) | struct mosquitto
  type mosquitto (line 425) | struct mosquitto
  type mosquitto (line 426) | struct mosquitto
  type mosquitto (line 458) | struct mosquitto
  type mosquitto (line 459) | struct mosquitto
  type mosquitto (line 482) | struct mosquitto
  type mosquitto (line 483) | struct mosquitto

FILE: include/mosquitto/libmosquitto_connect.h
  type mosquitto (line 68) | struct mosquitto
  type mosquitto (line 99) | struct mosquitto
  type mosquitto (line 150) | struct mosquitto
  type mosquitto (line 181) | struct mosquitto
  type mosquitto (line 223) | struct mosquitto
  type mosquitto (line 262) | struct mosquitto
  type mosquitto (line 289) | struct mosquitto
  type mosquitto (line 316) | struct mosquitto
  type mosquitto (line 335) | struct mosquitto
  type mosquitto (line 366) | struct mosquitto

FILE: include/mosquitto/libmosquitto_create_delete.h
  type mosquitto (line 78) | struct mosquitto
  type mosquitto (line 108) | struct mosquitto

FILE: include/mosquitto/libmosquitto_helpers.h
  type libmosquitto_will (line 36) | struct libmosquitto_will {
  type libmosquitto_auth (line 44) | struct libmosquitto_auth {
  type libmosquitto_tls (line 49) | struct libmosquitto_tls {
  type mosquitto_message (line 98) | struct mosquitto_message
  type libmosquitto_will (line 110) | struct libmosquitto_will
  type libmosquitto_tls (line 111) | struct libmosquitto_tls
  type mosquitto (line 151) | struct mosquitto
  type mosquitto_message (line 151) | struct mosquitto_message
  type libmosquitto_will (line 162) | struct libmosquitto_will
  type libmosquitto_tls (line 163) | struct libmosquitto_tls

FILE: include/mosquitto/libmosquitto_loop.h
  type mosquitto (line 86) | struct mosquitto
  type mosquitto (line 106) | struct mosquitto
  type mosquitto (line 130) | struct mosquitto
  type mosquitto (line 177) | struct mosquitto
  type mosquitto (line 212) | struct mosquitto
  type mosquitto (line 242) | struct mosquitto
  type mosquitto (line 266) | struct mosquitto
  type mosquitto (line 286) | struct mosquitto
  type mosquitto (line 299) | struct mosquitto
  type mosquitto (line 316) | struct mosquitto

FILE: include/mosquitto/libmosquitto_message.h
  type mosquitto_message (line 54) | struct mosquitto_message
  type mosquitto_message (line 54) | struct mosquitto_message
  type mosquitto_message (line 67) | struct mosquitto_message
  type mosquitto_message (line 80) | struct mosquitto_message

FILE: include/mosquitto/libmosquitto_options.h
  type mosquitto (line 74) | struct mosquitto
  type mosq_opt_t (line 74) | enum mosq_opt_t
  type mosquitto (line 151) | struct mosquitto
  type mosq_opt_t (line 151) | enum mosq_opt_t
  type mosquitto (line 192) | struct mosquitto
  type mosq_opt_t (line 192) | enum mosq_opt_t
  type mosquitto (line 215) | struct mosquitto
  type mosq_opt_t (line 215) | enum mosq_opt_t
  type mosquitto (line 252) | struct mosquitto
  type mosquitto (line 280) | struct mosquitto
  type mosquitto (line 287) | struct mosquitto
  type mosquitto (line 303) | struct mosquitto
  type mosquitto (line 315) | struct mosquitto

FILE: include/mosquitto/libmosquitto_publish.h
  type mosquitto (line 75) | struct mosquitto
  type mosquitto (line 131) | struct mosquitto

FILE: include/mosquitto/libmosquitto_socks.h
  type mosquitto (line 53) | struct mosquitto

FILE: include/mosquitto/libmosquitto_subscribe.h
  type mosquitto (line 58) | struct mosquitto
  type mosquitto (line 100) | struct mosquitto
  type mosquitto (line 136) | struct mosquitto

FILE: include/mosquitto/libmosquitto_tls.h
  type mosquitto (line 84) | struct mosquitto
  type mosquitto (line 114) | struct mosquitto
  type mosquitto (line 147) | struct mosquitto
  type mosquitto (line 174) | struct mosquitto
  type mosquitto (line 191) | struct mosquitto

FILE: include/mosquitto/libmosquitto_unsubscribe.h
  type mosquitto (line 53) | struct mosquitto
  type mosquitto (line 97) | struct mosquitto
  type mosquitto (line 129) | struct mosquitto

FILE: include/mosquitto/libmosquitto_will.h
  type mosquitto (line 63) | struct mosquitto
  type mosquitto (line 106) | struct mosquitto
  type mosquitto (line 121) | struct mosquitto

FILE: include/mosquitto/libmosquittopp.h
  function namespace (line 34) | namespace mosqpp{

FILE: include/mosquitto/mqtt_protocol.h
  type mqtt311_connack_codes (line 71) | enum mqtt311_connack_codes {
  type mqtt5_return_codes (line 130) | enum mqtt5_return_codes {
  type mqtt5_property (line 211) | enum mqtt5_property {
  type mqtt5_property_type (line 241) | enum mqtt5_property_type {
  type mqtt5_sub_options (line 275) | enum mqtt5_sub_options {

FILE: lib/actions_publish.c
  function mosquitto_publish (line 34) | int mosquitto_publish(struct mosquitto *mosq, int *mid, const char *topi...
  function mosquitto_publish_v5 (line 40) | int mosquitto_publish_v5(struct mosquitto *mosq, int *mid, const char *t...

FILE: lib/actions_subscribe.c
  function mosquitto_subscribe (line 30) | int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const char *su...
  function mosquitto_subscribe_v5 (line 36) | int mosquitto_subscribe_v5(struct mosquitto *mosq, int *mid, const char ...
  function mosquitto_subscribe_multiple (line 42) | int mosquitto_subscribe_multiple(struct mosquitto *mosq, int *mid, int s...

FILE: lib/actions_unsubscribe.c
  function mosquitto_unsubscribe (line 32) | int mosquitto_unsubscribe(struct mosquitto *mosq, int *mid, const char *...
  function mosquitto_unsubscribe_v5 (line 38) | int mosquitto_unsubscribe_v5(struct mosquitto *mosq, int *mid, const cha...
  function mosquitto_unsubscribe_multiple (line 44) | int mosquitto_unsubscribe_multiple(struct mosquitto *mosq, int *mid, int...

FILE: lib/alias_mosq.c
  type mosquitto (line 26) | struct mosquitto
  type mosquitto (line 27) | struct mosquitto
  function alias__add_l2r (line 30) | int alias__add_l2r(struct mosquitto *mosq, const char *topic, uint16_t *...
  function alias__add_r2l (line 58) | int alias__add_r2l(struct mosquitto *mosq, const char *topic, uint16_t a...
  function alias__find_by_alias (line 94) | int alias__find_by_alias(struct mosquitto *mosq, int direction, uint16_t...
  function alias__find_by_topic (line 122) | int alias__find_by_topic(struct mosquitto *mosq, int direction, const ch...
  function alias__free_r2l (line 146) | static void alias__free_r2l(struct mosquitto *mosq)
  function alias__free_l2r (line 158) | static void alias__free_l2r(struct mosquitto *mosq)
  function alias__free_all (line 170) | void alias__free_all(struct mosquitto *mosq)

FILE: lib/alias_mosq.h
  type mosquitto (line 24) | struct mosquitto
  type mosquitto (line 25) | struct mosquitto
  type mosquitto (line 26) | struct mosquitto
  type mosquitto (line 27) | struct mosquitto
  type mosquitto (line 28) | struct mosquitto

FILE: lib/callbacks.c
  function mosquitto_connect_callback_set (line 26) | void mosquitto_connect_callback_set(struct mosquitto *mosq, LIBMOSQ_CB_c...
  function mosquitto_connect_with_flags_callback_set (line 34) | void mosquitto_connect_with_flags_callback_set(struct mosquitto *mosq, L...
  function mosquitto_connect_v5_callback_set (line 42) | void mosquitto_connect_v5_callback_set(struct mosquitto *mosq, LIBMOSQ_C...
  function mosquitto_pre_connect_callback_set (line 50) | void mosquitto_pre_connect_callback_set(struct mosquitto *mosq, LIBMOSQ_...
  function mosquitto_disconnect_callback_set (line 58) | void mosquitto_disconnect_callback_set(struct mosquitto *mosq, LIBMOSQ_C...
  function mosquitto_disconnect_v5_callback_set (line 66) | void mosquitto_disconnect_v5_callback_set(struct mosquitto *mosq, LIBMOS...
  function mosquitto_publish_callback_set (line 74) | void mosquitto_publish_callback_set(struct mosquitto *mosq, LIBMOSQ_CB_p...
  function mosquitto_publish_v5_callback_set (line 82) | void mosquitto_publish_v5_callback_set(struct mosquitto *mosq, LIBMOSQ_C...
  function mosquitto_message_callback_set (line 90) | void mosquitto_message_callback_set(struct mosquitto *mosq, LIBMOSQ_CB_m...
  function mosquitto_message_v5_callback_set (line 98) | void mosquitto_message_v5_callback_set(struct mosquitto *mosq, LIBMOSQ_C...
  function mosquitto_subscribe_callback_set (line 106) | void mosquitto_subscribe_callback_set(struct mosquitto *mosq, LIBMOSQ_CB...
  function mosquitto_subscribe_v5_callback_set (line 114) | void mosquitto_subscribe_v5_callback_set(struct mosquitto *mosq, LIBMOSQ...
  function mosquitto_unsubscribe_callback_set (line 122) | void mosquitto_unsubscribe_callback_set(struct mosquitto *mosq, LIBMOSQ_...
  function mosquitto_unsubscribe_v5_callback_set (line 130) | void mosquitto_unsubscribe_v5_callback_set(struct mosquitto *mosq, LIBMO...
  function mosquitto_unsubscribe2_v5_callback_set (line 138) | void mosquitto_unsubscribe2_v5_callback_set(struct mosquitto *mosq, LIBM...
  function mosquitto_log_callback_set (line 146) | void mosquitto_log_callback_set(struct mosquitto *mosq, LIBMOSQ_CB_log o...
  function mosquitto_ext_auth_callback_set (line 154) | void mosquitto_ext_auth_callback_set(struct mosquitto *mosq, LIBMOSQ_CB_...
  function callback__on_pre_connect (line 162) | void callback__on_pre_connect(struct mosquitto *mosq)
  function callback__on_connect (line 178) | void callback__on_connect(struct mosquitto *mosq, uint8_t reason_code, u...
  function callback__on_publish (line 204) | void callback__on_publish(struct mosquitto *mosq, int mid, int reason_co...
  function callback__on_message (line 225) | void callback__on_message(struct mosquitto *mosq, const struct mosquitto...
  function callback__on_subscribe (line 246) | void callback__on_subscribe(struct mosquitto *mosq, int mid, int qos_cou...
  function callback__on_unsubscribe (line 267) | void callback__on_unsubscribe(struct mosquitto *mosq, int mid, int reaso...
  function callback__on_disconnect (line 293) | void callback__on_disconnect(struct mosquitto *mosq, int rc, const mosqu...
  function callback__on_ext_auth (line 314) | int callback__on_ext_auth(struct mosquitto *mosq, const char *auth_metho...

FILE: lib/callbacks.h
  type mosquitto (line 23) | struct mosquitto
  type mosquitto (line 24) | struct mosquitto
  type mosquitto (line 25) | struct mosquitto
  type mosquitto (line 26) | struct mosquitto
  type mosquitto_message (line 26) | struct mosquitto_message
  type mosquitto (line 27) | struct mosquitto
  type mosquitto (line 28) | struct mosquitto
  type mosquitto (line 29) | struct mosquitto
  type mosquitto (line 30) | struct mosquitto

FILE: lib/connect.c
  type mosquitto (line 46) | struct mosquitto
  type mosquitto (line 47) | struct mosquitto
  function mosquitto__connect_init (line 50) | static int mosquitto__connect_init(struct mosquitto *mosq, const char *h...
  function mosquitto_connect (line 104) | int mosquitto_connect(struct mosquitto *mosq, const char *host, int port...
  function mosquitto_connect_bind (line 110) | int mosquitto_connect_bind(struct mosquitto *mosq, const char *host, int...
  function mosquitto_connect_bind_v5 (line 116) | int mosquitto_connect_bind_v5(struct mosquitto *mosq, const char *host, ...
  function mosquitto_connect_async (line 152) | int mosquitto_connect_async(struct mosquitto *mosq, const char *host, in...
  function mosquitto_connect_bind_async (line 158) | int mosquitto_connect_bind_async(struct mosquitto *mosq, const char *hos...
  function mosquitto_reconnect_async (line 178) | int mosquitto_reconnect_async(struct mosquitto *mosq)
  function mosquitto_reconnect (line 184) | int mosquitto_reconnect(struct mosquitto *mosq)
  function get_address (line 190) | int get_address(mosq_sock_t sock, char *buf, size_t len, uint16_t *remot...
  function mosquitto__reconnect (line 218) | static int mosquitto__reconnect(struct mosquitto *mosq, bool blocking)
  function mosquitto_disconnect (line 310) | int mosquitto_disconnect(struct mosquitto *mosq)
  function mosquitto_disconnect_v5 (line 316) | int mosquitto_disconnect_v5(struct mosquitto *mosq, int reason_code, con...
  function do_client_disconnect (line 356) | void do_client_disconnect(struct mosquitto *mosq, int reason_code, const...

FILE: lib/cpp/mosquittopp.cpp
  type mosqpp (line 23) | namespace mosqpp{
    function on_pre_connect_wrapper (line 26) | static void on_pre_connect_wrapper(struct mosquitto *mosq, void *userd...
    function on_connect_wrapper (line 36) | static void on_connect_wrapper(struct mosquitto *mosq, void *userdata,...
    function on_connect_with_flags_wrapper (line 46) | static void on_connect_with_flags_wrapper(struct mosquitto *mosq, void...
    function on_connect_v5_wrapper (line 54) | static void on_connect_v5_wrapper(struct mosquitto *mosq, void *userda...
    function on_disconnect_wrapper (line 62) | static void on_disconnect_wrapper(struct mosquitto *mosq, void *userda...
    function on_disconnect_v5_wrapper (line 70) | static void on_disconnect_v5_wrapper(struct mosquitto *mosq, void *use...
    function on_publish_wrapper (line 78) | static void on_publish_wrapper(struct mosquitto *mosq, void *userdata,...
    function on_publish_v5_wrapper (line 86) | static void on_publish_v5_wrapper(struct mosquitto *mosq, void *userda...
    function on_message_wrapper (line 94) | static void on_message_wrapper(struct mosquitto *mosq, void *userdata,...
    function on_message_v5_wrapper (line 102) | static void on_message_v5_wrapper(struct mosquitto *mosq, void *userda...
    function on_subscribe_wrapper (line 110) | static void on_subscribe_wrapper(struct mosquitto *mosq, void *userdat...
    function on_subscribe_v5_wrapper (line 118) | static void on_subscribe_v5_wrapper(struct mosquitto *mosq, void *user...
    function on_unsubscribe_wrapper (line 126) | static void on_unsubscribe_wrapper(struct mosquitto *mosq, void *userd...
    function on_unsubscribe_v5_wrapper (line 134) | static void on_unsubscribe_v5_wrapper(struct mosquitto *mosq, void *us...
    function on_ext_auth_wrapper (line 142) | static int on_ext_auth_wrapper(struct mosquitto *mosq, void *userdata,...
    function on_log_wrapper (line 150) | static void on_log_wrapper(struct mosquitto *mosq, void *userdata, int...
    function lib_version (line 158) | int lib_version(int *major, int *minor, int *revision)
    function lib_init (line 173) | int lib_init()
    function lib_cleanup (line 179) | int lib_cleanup()
    function property_check_command (line 197) | int property_check_command(int command, int identifier)
    function property_check_all (line 203) | int property_check_all(int command, const mosquitto_property *properties)
    function sub_topic_tokenise (line 215) | int sub_topic_tokenise(const char *subtopic, char ***topics, int *count)
    function sub_topic_tokens_free (line 221) | int sub_topic_tokens_free(char ***topics, int count)
    function topic_matches_sub (line 227) | int topic_matches_sub(const char *sub, const char *topic, bool *result)
    function topic_matches_sub_with_pattern (line 233) | int topic_matches_sub_with_pattern(const char *sub, const char *topic,...
    function sub_matches_acl (line 239) | int sub_matches_acl(const char *acl, const char *sub, bool *result)
    function sub_matches_acl_with_pattern (line 245) | int sub_matches_acl_with_pattern(const char *acl, const char *sub, con...
    function validate_utf8 (line 251) | int validate_utf8(const char *str, int len)
    function subscribe_simple (line 257) | int subscribe_simple(
    function mosqpp_EXPORT (line 282) | mosqpp_EXPORT int subscribe_callback(
    function mosquitto_callbacks_set (line 308) | void mosquitto_callbacks_set(struct mosquitto *mosq)
    type mosq_opt_t (line 546) | enum mosq_opt_t
    type mosq_opt_t (line 552) | enum mosq_opt_t
    type mosq_opt_t (line 558) | enum mosq_opt_t
    type mosq_opt_t (line 564) | enum mosq_opt_t

FILE: lib/extended_auth.c
  function mosquitto_ext_auth_continue (line 27) | int mosquitto_ext_auth_continue(struct mosquitto *context, const char *a...

FILE: lib/handle_auth.c
  function handle__auth (line 33) | int handle__auth(struct mosquitto *mosq)

FILE: lib/handle_connack.c
  function handle__connack (line 34) | int handle__connack(struct mosquitto *mosq)

FILE: lib/handle_disconnect.c
  function handle__disconnect (line 34) | int handle__disconnect(struct mosquitto *mosq)

FILE: lib/handle_ping.c
  function handle__pingreq (line 40) | int handle__pingreq(struct mosquitto *mosq)
  function handle__pingresp (line 63) | int handle__pingresp(struct mosquitto *mosq)

FILE: lib/handle_pubackcomp.c
  function handle__pubackcomp (line 41) | int handle__pubackcomp(struct mosquitto *mosq, const char *type)

FILE: lib/handle_publish.c
  function property__process_publish (line 38) | static int property__process_publish(struct mosquitto *mosq, mosquitto_p...
  function handle__publish (line 89) | int handle__publish(struct mosquitto *mosq)

FILE: lib/handle_pubrec.c
  function handle__pubrec (line 41) | int handle__pubrec(struct mosquitto *mosq)

FILE: lib/handle_pubrel.c
  function handle__pubrel (line 41) | int handle__pubrel(struct mosquitto *mosq)

FILE: lib/handle_suback.c
  function handle__suback (line 38) | int handle__suback(struct mosquitto *mosq)

FILE: lib/handle_unsuback.c
  function handle__unsuback (line 42) | int handle__unsuback(struct mosquitto *mosq)

FILE: lib/helpers.c
  type userdata__callback (line 27) | struct userdata__callback {
  type userdata__simple (line 34) | struct userdata__simple {
  function on_connect (line 42) | static void on_connect(struct mosquitto *mosq, void *obj, int rc)
  function on_message_callback (line 52) | static void on_message_callback(struct mosquitto *mosq, void *obj, const...
  function on_message_simple (line 64) | static int on_message_simple(struct mosquitto *mosq, void *obj, const st...
  function libmosq_EXPORT (line 92) | libmosq_EXPORT int mosquitto_subscribe_simple(
  function libmosq_EXPORT (line 147) | libmosq_EXPORT int mosquitto_subscribe_callback(

FILE: lib/http_client.c
  function create_request_key (line 38) | static int create_request_key(char **encoded)
  function http_c__context_init (line 46) | int http_c__context_init(struct mosquitto *context)
  function http_c__context_cleanup (line 89) | int http_c__context_cleanup(struct mosquitto *context)
  function http_c__read (line 97) | int http_c__read(struct mosquitto *mosq)

FILE: lib/http_client.h
  type mosquitto (line 29) | struct mosquitto
  type mosquitto (line 30) | struct mosquitto
  type mosquitto (line 31) | struct mosquitto

FILE: lib/libmosquitto.c
  type mosquitto (line 44) | struct mosquitto
  function mosquitto_lib_version (line 47) | int mosquitto_lib_version(int *major, int *minor, int *revision)
  function mosquitto_lib_init (line 62) | int mosquitto_lib_init(void)
  function mosquitto_lib_cleanup (line 80) | int mosquitto_lib_cleanup(void)
  function alloc_packet_buffer (line 94) | static int alloc_packet_buffer(struct mosquitto *mosq)
  type mosquitto (line 101) | struct mosquitto
  type mosquitto (line 103) | struct mosquitto
  type mosquitto (line 111) | struct mosquitto
  type mosquitto (line 111) | struct mosquitto
  function mosquitto_reinitialise (line 139) | int mosquitto_reinitialise(struct mosquitto *mosq, const char *id, bool ...
  function mosquitto__destroy (line 250) | void mosquitto__destroy(struct mosquitto *mosq)
  function mosquitto_destroy (line 334) | void mosquitto_destroy(struct mosquitto *mosq)
  function mosquitto_socket (line 345) | int mosquitto_socket(struct mosquitto *mosq)
  function mosquitto_want_write (line 354) | bool mosquitto_want_write(struct mosquitto *mosq)

FILE: lib/logging_mosq.c
  function log__printf (line 31) | int log__printf(struct mosquitto *mosq, unsigned int priority, const cha...

FILE: lib/logging_mosq.h
  type mosquitto (line 27) | struct mosquitto

FILE: lib/loop.c
  function mosquitto_loop (line 42) | int mosquitto_loop(struct mosquitto *mosq, int timeout, int max_packets)
  function interruptible_sleep (line 186) | static int interruptible_sleep(struct mosquitto *mosq, time_t reconnect_...
  function mosquitto_loop_forever (line 244) | int mosquitto_loop_forever(struct mosquitto *mosq, int timeout, int max_...
  function mosquitto_loop_misc (line 325) | int mosquitto_loop_misc(struct mosquitto *mosq)
  function mosquitto__loop_rc_handle (line 338) | static int mosquitto__loop_rc_handle(struct mosquitto *mosq, int rc)
  function mosquitto_loop_read (line 354) | int mosquitto_loop_read(struct mosquitto *mosq, int max_packets)
  function mosquitto_loop_write (line 405) | int mosquitto_loop_write(struct mosquitto *mosq, int max_packets)

FILE: lib/messages_mosq.c
  function message__cleanup (line 33) | void message__cleanup(struct mosquitto_message_all **message)
  function message__cleanup_all (line 50) | void message__cleanup_all(struct mosquitto *mosq)
  function mosquitto_message_copy (line 67) | int mosquitto_message_copy(struct mosquitto_message *dst, const struct m...
  function message__delete (line 96) | int message__delete(struct mosquitto *mosq, uint16_t mid, enum mosquitto...
  function mosquitto_message_free (line 110) | void mosquitto_message_free(struct mosquitto_message **message)
  function mosquitto_message_free_contents (line 126) | void mosquitto_message_free_contents(struct mosquitto_message *message)
  function message__queue (line 137) | int message__queue(struct mosquitto *mosq, struct mosquitto_message_all ...
  function message__reconnect_reset (line 156) | void message__reconnect_reset(struct mosquitto *mosq, bool update_quota_...
  function message__release_to_inflight (line 206) | int message__release_to_inflight(struct mosquitto *mosq, enum mosquitto_...
  function message__remove (line 237) | int message__remove(struct mosquitto *mosq, uint16_t mid, enum mosquitto...
  function message__retry_check (line 293) | void message__retry_check(struct mosquitto *mosq)
  function mosquitto_message_retry_set (line 328) | void mosquitto_message_retry_set(struct mosquitto *mosq, unsigned int me...
  function message__out_update (line 335) | int message__out_update(struct mosquitto *mosq, uint16_t mid, enum mosqu...
  function mosquitto_max_inflight_messages_set (line 357) | int mosquitto_max_inflight_messages_set(struct mosquitto *mosq, unsigned...

FILE: lib/messages_mosq.h
  type mosquitto (line 24) | struct mosquitto
  type mosquitto_message_all (line 25) | struct mosquitto_message_all
  type mosquitto (line 26) | struct mosquitto
  type mosquitto_msg_direction (line 26) | enum mosquitto_msg_direction
  type mosquitto (line 27) | struct mosquitto
  type mosquitto_message_all (line 27) | struct mosquitto_message_all
  type mosquitto_msg_direction (line 27) | enum mosquitto_msg_direction
  type mosquitto (line 28) | struct mosquitto
  type mosquitto (line 29) | struct mosquitto
  type mosquitto_msg_direction (line 29) | enum mosquitto_msg_direction
  type mosquitto (line 30) | struct mosquitto
  type mosquitto_msg_direction (line 30) | enum mosquitto_msg_direction
  type mosquitto_message_all (line 30) | struct mosquitto_message_all
  type mosquitto (line 31) | struct mosquitto
  type mosquitto (line 32) | struct mosquitto
  type mosquitto_msg_state (line 32) | enum mosquitto_msg_state

FILE: lib/mosquitto_internal.h
  type mosquitto__client_msg (line 62) | struct mosquitto__client_msg
  type SOCKET (line 73) | typedef SOCKET mosq_sock_t;
  type mosq_sock_t (line 75) | typedef int mosq_sock_t;
  type mosquitto_msg_direction (line 97) | enum mosquitto_msg_direction {
  type mosquitto_msg_state (line 102) | enum mosquitto_msg_state {
  type mosquitto_client_state (line 120) | enum mosquitto_client_state {
  type mosquitto__protocol (line 145) | enum mosquitto__protocol {
  type mosquitto__threaded_state (line 153) | enum mosquitto__threaded_state {
  type mosquitto__transport (line 159) | enum mosquitto__transport {
  type mosquitto__alias (line 173) | struct mosquitto__alias {
  type session_expiry_list (line 178) | struct session_expiry_list {
  type mosquitto__packet (line 184) | struct mosquitto__packet {
  type mosquitto__packet_in (line 196) | struct mosquitto__packet_in {
  type mosquitto_message_all (line 211) | struct mosquitto_message_all {
  type mosquitto__keyform (line 222) | enum mosquitto__keyform {
  type will_delay_list (line 228) | struct will_delay_list {
  type mosquitto_msg_data (line 234) | struct mosquitto_msg_data {
  type ws_data (line 266) | struct ws_data {
  type proxy_data (line 283) | struct proxy_data {
  type client_stats (line 294) | struct client_stats {
  type mosquitto (line 300) | struct mosquitto {
  type mosquitto (line 485) | struct mosquitto

FILE: lib/net_mosq.c
  function ui_open (line 91) | static int ui_open(UI *ui)
  function ui_read (line 97) | static int ui_read(UI *ui, UI_STRING *uis)
  function ui_write (line 103) | static int ui_write(UI *ui, UI_STRING *uis)
  function ui_close (line 109) | static int ui_close(UI *ui)
  function setup_ui_method (line 115) | static void setup_ui_method(void)
  function cleanup_ui_method (line 125) | static void cleanup_ui_method(void)
  function UI_METHOD (line 134) | UI_METHOD *net__get_ui_method(void)
  function net__init (line 145) | int net__init(void)
  function net__cleanup (line 162) | void net__cleanup(void)
  function net__init_tls (line 183) | void net__init_tls(void)
  function net__is_connected (line 201) | bool net__is_connected(struct mosquitto *mosq)
  function net__socket_close (line 215) | int net__socket_close(struct mosquitto *mosq)
  function net__socket_shutdown (line 273) | int net__socket_shutdown(struct mosquitto *mosq)
  function psk_client_callback (line 290) | static unsigned int psk_client_callback(SSL *ssl, const char *hint,
  function net__try_connect_step1 (line 318) | int net__try_connect_step1(struct mosquitto *mosq, const char *host)
  function net__try_connect_step2 (line 365) | int net__try_connect_step2(struct mosquitto *mosq, uint16_t port, mosq_s...
  function net__try_connect_tcp (line 428) | static int net__try_connect_tcp(const char *host, uint16_t port, mosq_so...
  function net__try_connect_unix (line 527) | static int net__try_connect_unix(const char *host, mosq_sock_t *sock)
  function net__try_connect (line 565) | int net__try_connect(const char *host, uint16_t port, mosq_sock_t *sock,...
  function net__print_ssl_error (line 582) | void net__print_ssl_error(struct mosquitto *mosq, const char *msg)
  function net__socket_connect_tls (line 597) | int net__socket_connect_tls(struct mosquitto *mosq)
  function net__tls_load_ca (line 626) | static int net__tls_load_ca(struct mosquitto *mosq)
  function net__init_ssl_ctx (line 685) | static int net__init_ssl_ctx(struct mosquitto *mosq)
  function net__socket_connect_step3 (line 909) | int net__socket_connect_step3(struct mosquitto *mosq, const char *host)
  function net__socket_connect (line 970) | int net__socket_connect(struct mosquitto *mosq, const char *host, uint16...
  function net__handle_ssl (line 1007) | static void net__handle_ssl(struct mosquitto *mosq, int ret)
  function net__read (line 1034) | ssize_t net__read(struct mosquitto *mosq, void *buf, size_t count)
  function net__write (line 1063) | ssize_t net__write(struct mosquitto *mosq, const void *buf, size_t count)
  function net__socket_nonblock (line 1089) | int net__socket_nonblock(mosq_sock_t *sock)
  function net__socketpair (line 1121) | int net__socketpair(mosq_sock_t *pairR, mosq_sock_t *pairW)
  type mosquitto (line 1250) | struct mosquitto

FILE: lib/net_mosq.h
  type SSIZE_T (line 27) | typedef SSIZE_T ssize_t;
  type mosquitto (line 72) | struct mosquitto
  type mosquitto (line 73) | struct mosquitto
  type mosquitto (line 74) | struct mosquitto
  type mosquitto (line 76) | struct mosquitto
  type mosquitto (line 77) | struct mosquitto
  type mosquitto (line 78) | struct mosquitto
  type mosquitto (line 81) | struct mosquitto
  type mosquitto (line 83) | struct mosquitto
  type mosquitto (line 84) | struct mosquitto
  type mosquitto (line 85) | struct mosquitto
  type mosquitto (line 88) | struct mosquitto
  type mosquitto (line 89) | struct mosquitto
  type mosquitto (line 90) | struct mosquitto
  type mosquitto (line 100) | struct mosquitto
  type mosquitto (line 101) | struct mosquitto
  type mosquitto__packet (line 101) | struct mosquitto__packet

FILE: lib/net_mosq_ocsp.c
  function mosquitto__verify_ocsp_status_cb (line 58) | int mosquitto__verify_ocsp_status_cb(SSL *ssl, void *arg)

FILE: lib/net_ws.c
  function ws__context_init (line 37) | void ws__context_init(struct mosquitto *mosq)
  function ws__prepare_packet (line 44) | void ws__prepare_packet(struct mosquitto *mosq, struct mosquitto__packet...
  function read_ws_opcode (line 109) | static ssize_t read_ws_opcode(struct mosquitto *mosq)
  function read_ws_payloadlen_short (line 164) | static ssize_t read_ws_payloadlen_short(struct mosquitto *mosq)
  function read_ws_payloadlen_extended (line 193) | static ssize_t read_ws_payloadlen_extended(struct mosquitto *mosq)
  function read_ws_mask (line 211) | static ssize_t read_ws_mask(struct mosquitto *mosq)
  function net__read_ws (line 229) | ssize_t net__read_ws(struct mosquitto *mosq, void *buf, size_t count)
  function ws__create_accept_key (line 349) | int ws__create_accept_key(const char *client_key, size_t client_key_len,...

FILE: lib/options.c
  function mosquitto_will_set (line 41) | int mosquitto_will_set(struct mosquitto *mosq, const char *topic, int pa...
  function mosquitto_will_set_v5 (line 47) | int mosquitto_will_set_v5(struct mosquitto *mosq, const char *topic, int...
  function mosquitto_will_clear (line 66) | int mosquitto_will_clear(struct mosquitto *mosq)
  function mosquitto_username_pw_set (line 75) | int mosquitto_username_pw_set(struct mosquitto *mosq, const char *userna...
  function mosquitto_reconnect_delay_set (line 117) | int mosquitto_reconnect_delay_set(struct mosquitto *mosq, unsigned int r...
  function mosquitto_tls_set (line 135) | int mosquitto_tls_set(struct mosquitto *mosq, const char *cafile, const ...
  function mosquitto_tls_opts_set (line 225) | int mosquitto_tls_opts_set(struct mosquitto *mosq, int cert_reqs, const ...
  function mosquitto_tls_insecure_set (line 292) | int mosquitto_tls_insecure_set(struct mosquitto *mosq, bool value)
  function mosquitto_string_option (line 309) | int mosquitto_string_option(struct mosquitto *mosq, enum mosq_opt_t opti...
  function mosquitto_tls_psk_set (line 425) | int mosquitto_tls_psk_set(struct mosquitto *mosq, const char *psk, const...
  function mosquitto_opts_set (line 467) | int mosquitto_opts_set(struct mosquitto *mosq, enum mosq_opt_t option, v...
  function mosquitto_int_option (line 491) | int mosquitto_int_option(struct mosquitto *mosq, enum mosq_opt_t option,...
  function mosquitto_void_option (line 605) | int mosquitto_void_option(struct mosquitto *mosq, enum mosq_opt_t option...
  function mosquitto_user_data_set (line 630) | void mosquitto_user_data_set(struct mosquitto *mosq, void *userdata)
  type mosquitto (line 638) | struct mosquitto

FILE: lib/packet_datatypes.c
  function packet__read_byte (line 43) | int packet__read_byte(struct mosquitto__packet_in *packet, uint8_t *byte)
  function packet__write_byte (line 57) | void packet__write_byte(struct mosquitto__packet *packet, uint8_t byte)
  function packet__read_bytes (line 67) | int packet__read_bytes(struct mosquitto__packet_in *packet, void *bytes,...
  function packet__write_bytes (line 81) | void packet__write_bytes(struct mosquitto__packet *packet, const void *b...
  function packet__read_binary (line 93) | int packet__read_binary(struct mosquitto__packet_in *packet, uint8_t **d...
  function packet__read_string (line 128) | int packet__read_string(struct mosquitto__packet_in *packet, char **str,...
  function packet__write_string (line 150) | void packet__write_string(struct mosquitto__packet *packet, const char *...
  function packet__read_uint16 (line 158) | int packet__read_uint16(struct mosquitto__packet_in *packet, uint16_t *w...
  function packet__write_uint16 (line 176) | void packet__write_uint16(struct mosquitto__packet *packet, uint16_t word)
  function packet__read_uint32 (line 188) | int packet__read_uint32(struct mosquitto__packet_in *packet, uint32_t *w...
  function packet__write_uint32 (line 206) | void packet__write_uint32(struct mosquitto__packet *packet, uint32_t word)
  function packet__read_varint (line 218) | int packet__read_varint(struct mosquitto__packet_in *packet, uint32_t *w...
  function packet__write_varint (line 253) | int packet__write_varint(struct mosquitto__packet *packet, uint32_t word)

FILE: lib/packet_mosq.c
  function packet__alloc (line 49) | int packet__alloc(struct mosquitto__packet **packet, uint8_t command, ui...
  function packet__cleanup (line 99) | void packet__cleanup(struct mosquitto__packet_in *packet)
  function packet__cleanup_all_no_locks (line 116) | void packet__cleanup_all_no_locks(struct mosquitto *mosq)
  function packet__cleanup_all (line 138) | void packet__cleanup_all(struct mosquitto *mosq)
  function packet__queue_append (line 146) | static void packet__queue_append(struct mosquitto *mosq, struct mosquitt...
  function packet__queue (line 177) | int packet__queue(struct mosquitto *mosq, struct mosquitto__packet *packet)
  function packet__check_oversize (line 233) | int packet__check_oversize(struct mosquitto *mosq, uint32_t remaining_le...
  type mosquitto__packet (line 249) | struct mosquitto__packet
  type mosquitto (line 249) | struct mosquitto
  type mosquitto__packet (line 251) | struct mosquitto__packet
  function packet__write (line 272) | int packet__write(struct mosquitto *mosq)
  function read_header (line 363) | static int read_header(struct mosquitto *mosq, ssize_t (*func_read)(stru...
  function packet__check_in_packet_oversize (line 400) | static int packet__check_in_packet_oversize(struct mosquitto *mosq)
  function packet__read_single (line 473) | static int packet__read_single(struct mosquitto *mosq, enum mosquitto_cl...
  function packet__read (line 647) | int packet__read(struct mosquitto *mosq)

FILE: lib/packet_mosq.h
  type mosquitto__packet (line 24) | struct mosquitto__packet
  type mosquitto__packet_in (line 25) | struct mosquitto__packet_in
  type mosquitto (line 26) | struct mosquitto
  type mosquitto (line 27) | struct mosquitto
  type mosquitto (line 28) | struct mosquitto
  type mosquitto__packet (line 28) | struct mosquitto__packet
  type mosquitto__packet (line 29) | struct mosquitto__packet
  type mosquitto (line 29) | struct mosquitto
  type mosquitto (line 31) | struct mosquitto
  type mosquitto__packet_in (line 33) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 34) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 35) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 36) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 37) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 38) | struct mosquitto__packet_in
  type mosquitto__packet_in (line 39) | struct mosquitto__packet_in
  type mosquitto__packet (line 41) | struct mosquitto__packet
  type mosquitto__packet (line 42) | struct mosquitto__packet
  type mosquitto__packet (line 43) | struct mosquitto__packet
  type mosquitto__packet (line 44) | struct mosquitto__packet
  type mosquitto__packet (line 45) | struct mosquitto__packet
  type mosquitto__packet (line 46) | struct mosquitto__packet
  type mosquitto (line 48) | struct mosquitto
  type mosquitto (line 49) | struct mosquitto

FILE: lib/property_mosq.c
  function property__read (line 35) | static int property__read(struct mosquitto__packet_in *packet, uint32_t ...
  function property__read_all (line 176) | int property__read_all(int command, struct mosquitto__packet_in *packet,...
  function property__write (line 223) | static int property__write(struct mosquitto__packet *packet, const mosqu...
  function property__write_all (line 273) | int property__write_all(struct mosquitto__packet *packet, const mosquitt...

FILE: lib/property_mosq.h
  type mosquitto__packet_in (line 23) | struct mosquitto__packet_in
  type mosquitto__packet (line 24) | struct mosquitto__packet

FILE: lib/read_handle.c
  function handle__packet (line 36) | int handle__packet(struct mosquitto *mosq)

FILE: lib/read_handle.h
  type mosquitto_db (line 22) | struct mosquitto_db
  type mosquitto (line 24) | struct mosquitto
  type mosquitto (line 25) | struct mosquitto
  type mosquitto (line 27) | struct mosquitto
  type mosquitto (line 29) | struct mosquitto
  type mosquitto (line 30) | struct mosquitto
  type mosquitto (line 31) | struct mosquitto
  type mosquitto (line 32) | struct mosquitto
  type mosquitto (line 33) | struct mosquitto
  type mosquitto (line 34) | struct mosquitto
  type mosquitto (line 36) | struct mosquitto
  type mosquitto (line 37) | struct mosquitto
  type mosquitto (line 38) | struct mosquitto
  type mosquitto (line 39) | struct mosquitto

FILE: lib/send_connect.c
  type mosquitto (line 38) | struct mosquitto
  type mosquitto__packet (line 40) | struct mosquitto__packet

FILE: lib/send_disconnect.c
  function send__disconnect (line 37) | int send__disconnect(struct mosquitto *mosq, uint8_t reason_code, const ...

FILE: lib/send_mosq.c
  function send__pingreq (line 41) | int send__pingreq(struct mosquitto *mosq)
  function send__pingresp (line 61) | int send__pingresp(struct mosquitto *mosq)
  function send__puback (line 73) | int send__puback(struct mosquitto *mosq, uint16_t mid, uint8_t reason_co...
  function send__pubcomp (line 87) | int send__pubcomp(struct mosquitto *mosq, uint16_t mid, const mosquitto_...
  function send__pubrec (line 101) | int send__pubrec(struct mosquitto *mosq, uint16_t mid, uint8_t reason_co...
  function send__pubrel (line 117) | int send__pubrel(struct mosquitto *mosq, uint16_t mid, const mosquitto_p...
  function send__command_with_mid (line 131) | int send__command_with_mid(struct mosquitto *mosq, uint8_t command, uint...
  function send__simple_command (line 175) | int send__simple_command(struct mosquitto *mosq, uint8_t command)

FILE: lib/send_mosq.h
  type mosquitto (line 24) | struct mosquitto
  type mosquitto (line 25) | struct mosquitto
  type mosquitto (line 26) | struct mosquitto
  type mosquitto (line 28) | struct mosquitto
  type mosquitto (line 29) | struct mosquitto
  type mosquitto (line 30) | struct mosquitto
  type mosquitto (line 31) | struct mosquitto
  type mosquitto (line 32) | struct mosquitto
  type mosquitto (line 33) | struct mosquitto
  type mosquitto (line 34) | struct mosquitto
  type mosquitto (line 35) | struct mosquitto
  type mosquitto (line 36) | struct mosquitto
  type mosquitto (line 37) | struct mosquitto
  type mosquitto (line 38) | struct mosquitto

FILE: lib/send_publish.c
  function send__publish (line 44) | int send__publish(struct mosquitto *mosq, uint16_t mid, const char *topi...
  function send__real_publish (line 210) | int send__real_publish(struct mosquitto *mosq, uint16_t mid, const char ...

FILE: lib/send_subscribe.c
  function send__subscribe (line 39) | int send__subscribe(struct mosquitto *mosq, int *mid, int topic_count, c...

FILE: lib/send_unsubscribe.c
  function send__unsubscribe (line 38) | int send__unsubscribe(struct mosquitto *mosq, int *mid, int topic_count,...

FILE: lib/socks_mosq.c
  function socks5__network_error (line 65) | static inline int socks5__network_error(struct mosquitto *mosq)
  function socks5__connection_error (line 84) | static inline int socks5__connection_error(struct mosquitto *mosq)
  function mosquitto_socks5_set (line 110) | int mosquitto_socks5_set(struct mosquitto *mosq, const char *host, int p...
  function socks5__packet_alloc (line 170) | static void socks5__packet_alloc(struct mosquitto__packet **packet, uint...
  function socks5__send (line 182) | int socks5__send(struct mosquitto *mosq)
  function socks5__read (line 326) | int socks5__read(struct mosquitto *mosq)

FILE: lib/socks_mosq.h
  type mosquitto (line 22) | struct mosquitto
  type mosquitto (line 23) | struct mosquitto

FILE: lib/srv_mosq.c
  function srv_callback (line 38) | static void srv_callback(void *arg, int status, int timeouts, unsigned c...
  function mosquitto_connect_srv (line 60) | int mosquitto_connect_srv(struct mosquitto *mosq, const char *host, int ...

FILE: lib/thread_mosq.c
  function mosquitto_loop_start (line 44) | int mosquitto_loop_start(struct mosquitto *mosq)
  function mosquitto_loop_stop (line 71) | int mosquitto_loop_stop(struct mosquitto *mosq, bool force)
  type mosquitto (line 117) | struct mosquitto
  type timespec (line 119) | struct timespec
  function mosquitto_threaded_set (line 156) | int mosquitto_threaded_set(struct mosquitto *mosq, bool threaded)

FILE: lib/tls_mosq.c
  function mosquitto__server_certificate_verify (line 45) | int mosquitto__server_certificate_verify(int preverify_ok, X509_STORE_CT...
  function tls__set_verify_hostname (line 53) | int tls__set_verify_hostname(struct mosquitto *mosq, const char *hostname)

FILE: lib/tls_mosq.h
  type mosquitto (line 35) | struct mosquitto

FILE: lib/util_mosq.c
  function mosquitto__check_keepalive (line 55) | int mosquitto__check_keepalive(struct mosquitto *mosq)
  function mosquitto__mid_generate (line 124) | uint16_t mosquitto__mid_generate(struct mosquitto *mosq)
  function mosquitto__hex2bin_sha1 (line 151) | int mosquitto__hex2bin_sha1(const char *hex, unsigned char **bin)
  function mosquitto__hex2bin (line 169) | int mosquitto__hex2bin(const char *hex, unsigned char *bin, int bin_max_...
  function util__increment_receive_quota (line 208) | void util__increment_receive_quota(struct mosquitto *mosq)
  function util__increment_send_quota (line 216) | void util__increment_send_quota(struct mosquitto *mosq)
  function util__decrement_receive_quota (line 224) | void util__decrement_receive_quota(struct mosquitto *mosq)
  function util__decrement_send_quota (line 232) | void util__decrement_send_quota(struct mosquitto *mosq)
  function mosquitto__set_state (line 240) | int mosquitto__set_state(struct mosquitto *mosq, enum mosquitto_client_s...
  function mosquitto__get_state (line 254) | enum mosquitto_client_state mosquitto__get_state(struct mosquitto *mosq)
  function mosquitto__set_request_disconnect (line 268) | void mosquitto__set_request_disconnect(struct mosquitto *mosq, bool requ...
  function mosquitto__get_request_disconnect (line 276) | bool mosquitto__get_request_disconnect(struct mosquitto *mosq)

FILE: lib/util_mosq.h
  type mosquitto (line 30) | struct mosquitto
  type mosquitto (line 31) | struct mosquitto
  type mosquitto (line 33) | struct mosquitto
  type mosquitto_client_state (line 33) | enum mosquitto_client_state
  type mosquitto_client_state (line 34) | enum mosquitto_client_state
  type mosquitto (line 34) | struct mosquitto
  type mosquitto (line 36) | struct mosquitto
  type mosquitto (line 37) | struct mosquitto
  type mosquitto (line 45) | struct mosquitto
  type mosquitto (line 46) | struct mosquitto
  type mosquitto (line 47) | struct mosquitto
  type mosquitto (line 48) | struct mosquitto

FILE: lib/will_mosq.c
  function will__set (line 40) | int will__set(struct mosquitto *mosq, const char *topic, int payloadlen,...
  function will__clear (line 124) | int will__clear(struct mosquitto *mosq)

FILE: lib/will_mosq.h
  type mosquitto (line 25) | struct mosquitto
  type mosquitto (line 26) | struct mosquitto

FILE: libcommon/base64_common.c
  function mosquitto_base64_encode (line 33) | int mosquitto_base64_encode(const unsigned char *in, size_t in_len, char...
  function mosquitto_base64_decode (line 66) | int mosquitto_base64_decode(const char *in, unsigned char **decoded, uns...

FILE: libcommon/cjson_common.c
  function cJSON (line 33) | cJSON *mosquitto_properties_to_json(const mosquitto_property *properties)

FILE: libcommon/file_common.c
  function libcommon_printf (line 53) | void libcommon_printf(const char *fmt, ...)
  function FILE (line 69) | FILE *mosquitto_fopen(const char *path, const char *mode, bool restrict_...
  function mosquitto_write_file (line 336) | int mosquitto_write_file(const char *target_path, bool restrict_read, in...
  function mosquitto_read_file (line 450) | int mosquitto_read_file(const char *file, bool restrict_read, char **buf...

FILE: libcommon/memory_common.c
  function mosquitto_memory_set_limit (line 50) | void mosquitto_memory_set_limit(size_t lim)
  function mosquitto_memory_used (line 56) | unsigned long mosquitto_memory_used(void)
  function mosquitto_max_memory_used (line 62) | unsigned long mosquitto_max_memory_used(void)
  function mosq__get_dummy_counter (line 79) | unsigned long mosq__get_dummy_counter(void)
  function set_alloc_marker (line 85) | static void set_alloc_marker(char *mem, size_t size)
  function check_alloc_marker (line 91) | static bool check_alloc_marker(char *mem, size_t size)
  function trigger_alloc_mismatch (line 97) | static void trigger_alloc_mismatch(char *mem, size_t size)
  function free (line 119) | void free(void *ptr)
  function set_alloc_marker (line 142) | static void set_alloc_marker(char *mem, size_t size)
  function BROKER_EXPORT (line 155) | BROKER_EXPORT void *mosquitto_malloc(size_t size)
  function BROKER_EXPORT (line 176) | BROKER_EXPORT void *mosquitto_realloc(void *ptr, size_t size)
  function BROKER_EXPORT (line 216) | BROKER_EXPORT void mosquitto_free(void *mem)
  function BROKER_EXPORT (line 252) | BROKER_EXPORT void *mosquitto_malloc(size_t size)
  function BROKER_EXPORT (line 258) | BROKER_EXPORT void *mosquitto_realloc(void *ptr, size_t size)
  function BROKER_EXPORT (line 264) | BROKER_EXPORT void mosquitto_free(void *mem)
  function BROKER_EXPORT (l
Condensed preview — 1864 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,203K chars).
[
  {
    "path": ".editorconfig",
    "chars": 293,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.{c,h,c"
  },
  {
    "path": ".github/issue_template.md",
    "chars": 876,
    "preview": "<!--\n\nSTOP!  If you are reporting a security issue, which includes *anything* that\n       may cause the broker/client to"
  },
  {
    "path": ".github/labeler.yml",
    "chars": 32,
    "preview": "'Status: Available':\n  - '/.*/'\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 1186,
    "preview": "Thank you for contributing your time to the Mosquitto project!\n\nBefore you go any further, please note that we cannot ac"
  },
  {
    "path": ".github/workflows/build-variants.yml",
    "chars": 853,
    "preview": "name: Mosquitto - Build variants\n\non:\n  push:\n    branches:\n      - master\n      - develop\n      - fixes\n      - release"
  },
  {
    "path": ".github/workflows/cifuzz.yml",
    "chars": 1119,
    "preview": "name: CIFuzz\non:\n  workflow_dispatch:\n  pull_request:\n    branches:\n      - master\n      - develop\n    paths:\n      - '*"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 2572,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/coverage.yml",
    "chars": 1467,
    "preview": "name: Coverage\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - develop\n      - fixes\n      - rele"
  },
  {
    "path": ".github/workflows/coverity-scan-develop.yml",
    "chars": 1094,
    "preview": "name: Coverity Scan develop branch on a weekly basis\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: \"7 3 * * 0\"\n\njobs"
  },
  {
    "path": ".github/workflows/coverity-scan-fixes.yml",
    "chars": 1012,
    "preview": "name: Coverity Scan fixes branch on a weekly basis\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: \"7 3 * * 3\"\n\njobs:\n"
  },
  {
    "path": ".github/workflows/delete-old-workflow-runs.yml",
    "chars": 435,
    "preview": "name: Delete old workflow runs\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 0 1 * *'\n# Run monthly, at 00:00 on t"
  },
  {
    "path": ".github/workflows/issue-labler.yml",
    "chars": 371,
    "preview": "name: \"Issue Labeler\"\non:\n  issues:\n    types: [opened]\n\npermissions:\n  issues: write\n  contents: read\n\njobs:\n  triage:\n"
  },
  {
    "path": ".github/workflows/lock.yml",
    "chars": 315,
    "preview": "name: 'Lock Threads'\n\non:\n  schedule:\n    - cron: '0 0 * * 0'\n  workflow_dispatch:\n\npermissions:\n  issues: write\n  pull-"
  },
  {
    "path": ".github/workflows/macos.yml",
    "chars": 1952,
    "preview": "name: Mac OS build\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - fixes\n      - develop\n      - "
  },
  {
    "path": ".github/workflows/mosquitto-cmake.yml",
    "chars": 1194,
    "preview": "name: Mosquitto - CMake\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - fixes\n      - develop\n   "
  },
  {
    "path": ".github/workflows/mosquitto-make-asan.yml",
    "chars": 1047,
    "preview": "name: Mosquitto - Make ASAN\n\non:\n  push:\n    branches:\n      - master\n      - develop\n      - fixes\n      - release/*\n  "
  },
  {
    "path": ".github/workflows/mosquitto-make.yml",
    "chars": 1047,
    "preview": "name: Mosquitto - Make\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - fixes\n      - develop\n    "
  },
  {
    "path": ".github/workflows/windows-x86.yml",
    "chars": 1783,
    "preview": "name: Windows x86 build\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - fixes\n      - develop\n   "
  },
  {
    "path": ".github/workflows/windows.yml",
    "chars": 1963,
    "preview": "name: Windows build\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - master\n      - fixes\n      - develop\n      -"
  },
  {
    "path": ".gitignore",
    "chars": 4019,
    "preview": "# .gitignore\n*.a\n*.db\n*.gcda\n*.gcno\n*.exe\n*.o\n*.old\n*.pyc\n*.so\n*.vglog\ncallgrind.out.*\ncoverage.info\ndhat.out.*\nmassif.o"
  },
  {
    "path": ".uncrustify.cfg",
    "chars": 149743,
    "preview": "# Uncrustify_d-0.80.1-109-229eb1c05\n\n#\n# General options\n#\n\nset FOR HASH_ITER\nset FOR DL_FOREACH\nset FOR DL_FOREACH_SAFE"
  },
  {
    "path": "CITATION.cff",
    "chars": 665,
    "preview": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it as below.\"\nauthors:\n- family-names: \"Light\"\n  give"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 8610,
    "preview": "# This is a cmake script. Process it with the CMake gui or command line utility\n# to produce makefiles / Visual Studio p"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3914,
    "preview": "Contributing to Mosquitto\n=========================\n\nThank you for your interest in this project.\n\nProject description:\n"
  },
  {
    "path": "ChangeLog.txt",
    "chars": 161003,
    "preview": "2.1.3 - 2026-02-xx\n==================\n\n# Broker\n- Fix MOSQ_EVT_DISCONNECT being called before MOSQ_EVT_ACL_CHECK for the"
  },
  {
    "path": "LICENSE.txt",
    "chars": 204,
    "preview": "This project is dual licensed under the Eclipse Public License 2.0 OR the\nEclipse Distribution License 1.0 as described "
  },
  {
    "path": "Makefile",
    "chars": 5143,
    "preview": "include config.mk\n\nDIRS=libcommon lib apps client plugins src\nDOCDIRS=man\nDISTDIRS=man\nDISTFILES= \\\n\tapps/ \\\n\tclient/ \\\n"
  },
  {
    "path": "NOTICE.md",
    "chars": 2411,
    "preview": "# Notices for Mosquitto\n\nThis content is produced and maintained by the Eclipse Mosquitto project.\n\n * Project home: htt"
  },
  {
    "path": "README-compiling.md",
    "chars": 1651,
    "preview": "The following packages can be used to add features to mosquitto.\n\n* cJSON - required\n* c-ares (libc-ares-dev on Debian b"
  },
  {
    "path": "README-letsencrypt.md",
    "chars": 939,
    "preview": "# Using Lets Encrypt with Mosquitto\n\nOn Unix like operating systems, Mosquitto will attempt to drop root access as\nsoon "
  },
  {
    "path": "README-tests.md",
    "chars": 640,
    "preview": "# Tests\n\n## Running\n\nThe Mosquitto test suite can be invoked using either of\n\n```\nmake test\nmake check\n```\n\nThe tests ru"
  },
  {
    "path": "README-windows.txt",
    "chars": 2993,
    "preview": "Mosquitto for Windows\n=====================\n\nMosquitto for Windows comes in 64-bit and 32-bit flavours. All dependencies"
  },
  {
    "path": "README.md",
    "chars": 5319,
    "preview": "Eclipse Mosquitto\n=================\n\nMosquitto is an open source implementation of a server for version 5.0, 3.1.1,\nand "
  },
  {
    "path": "SECURITY.md",
    "chars": 216,
    "preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nIf you think you have found a security vulnerability in Mosquitto, plea"
  },
  {
    "path": "THANKS.txt",
    "chars": 1487,
    "preview": "These people have reported bugs / provided patches / done something else to aid\nthe mosquitto project. Thanks to you all"
  },
  {
    "path": "about.html",
    "chars": 2496,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
  },
  {
    "path": "aclfile.example",
    "chars": 363,
    "preview": "# This affects access control for clients with no username.\ntopic read $SYS/#\n\n# This only affects clients with username"
  },
  {
    "path": "apps/CMakeLists.txt",
    "chars": 129,
    "preview": "add_subdirectory(db_dump)\nadd_subdirectory(mosquitto_ctrl)\nadd_subdirectory(mosquitto_passwd)\nadd_subdirectory(mosquitto"
  },
  {
    "path": "apps/Makefile",
    "chars": 691,
    "preview": "R=..\ninclude ${R}/config.mk\n\nDIRS= \\\n\t\tmosquitto_ctrl \\\n\t\tmosquitto_passwd \\\n\t\tmosquitto_signal\n\nifeq ($(WITH_PERSISTENC"
  },
  {
    "path": "apps/db_dump/CMakeLists.txt",
    "chars": 960,
    "preview": "add_executable(mosquitto_db_dump\n\tdb_dump.c db_dump.h\n\tjson.c\n\tprint.c\n\tstubs.c\n\n\t../../common/json_help.c\n\t../../common"
  },
  {
    "path": "apps/db_dump/Makefile",
    "chars": 1651,
    "preview": "R=../..\ninclude ${R}/config.mk\n\nLOCAL_CFLAGS+=\nLOCAL_CPPFLAGS+=-I${R} -I${R}/lib -I${R}/src -I${R}/common -DWITH_BROKER\n"
  },
  {
    "path": "apps/db_dump/db_dump.c",
    "chars": 12841,
    "preview": "/*\nCopyright (c) 2010-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/db_dump/db_dump.h",
    "chars": 1219,
    "preview": "#ifndef DB_DUMP_H\n#define DB_DUMP_H\n/*\nCopyright (c) 2010-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This"
  },
  {
    "path": "apps/db_dump/json.c",
    "chars": 5537,
    "preview": "/*\nCopyright (c) 2010-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/db_dump/print.c",
    "chars": 4646,
    "preview": "/*\nCopyright (c) 2010-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/db_dump/stubs.c",
    "chars": 1574,
    "preview": "#include <stdlib.h>\n#include <string.h>\n\n#include \"mosquitto_broker_internal.h\"\n#include \"mosquitto_internal.h\"\n#include"
  },
  {
    "path": "apps/mosquitto_ctrl/CMakeLists.txt",
    "chars": 2822,
    "preview": "if(WITH_TLS)\n\tset(SRC\n\t\tmosquitto_ctrl.c mosquitto_ctrl.h\n\t\tbroker.c\n\t\tclient.c\n\t\tdynsec.c\n\t\tdynsec_client.c\n\t\tdynsec_gr"
  },
  {
    "path": "apps/mosquitto_ctrl/Makefile",
    "chars": 2380,
    "preview": "R=../..\ninclude ${R}/config.mk\n\n.PHONY: all install uninstall clean reallyclean\n\nLOCAL_CFLAGS+=\nLOCAL_CPPFLAGS+=-I${R}/l"
  },
  {
    "path": "apps/mosquitto_ctrl/broker.c",
    "chars": 7436,
    "preview": "/*\nCopyright (c) 2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/client.c",
    "chars": 4393,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell.c",
    "chars": 20403,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell.h",
    "chars": 4280,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_broker.c",
    "chars": 5680,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_client.c",
    "chars": 2849,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_completion_tree.c",
    "chars": 3453,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_dynsec.c",
    "chars": 40781,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_internal.h",
    "chars": 3145,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_io.c",
    "chars": 804,
    "preview": "/*\nCopyright (c) 2025 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_post_connect.c",
    "chars": 4250,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_pre_connect.c",
    "chars": 6185,
    "preview": "/*\nCopyright (c) 2023 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/ctrl_shell_printf.c",
    "chars": 942,
    "preview": "/*\nCopyright (c) 2025 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_ctrl/dynsec.c",
    "chars": 27751,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/dynsec_client.c",
    "chars": 10510,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/dynsec_group.c",
    "chars": 4638,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/dynsec_role.c",
    "chars": 4819,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/example.c",
    "chars": 1094,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/mosquitto_ctrl.c",
    "chars": 3264,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/mosquitto_ctrl.h",
    "chars": 4246,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/options.c",
    "chars": 23388,
    "preview": "/*\nCopyright (c) 2014-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_ctrl/test/Makefile",
    "chars": 3135,
    "preview": "R=../../..\ninclude ${R}/config.mk\n\n.PHONY: all check test-compile test test-broker test-lib clean coverage\n\nLOCAL_CPPFLA"
  },
  {
    "path": "apps/mosquitto_passwd/CMakeLists.txt",
    "chars": 530,
    "preview": "if(WITH_TLS)\n\tadd_executable(mosquitto_passwd\n\t\tmosquitto_passwd.c\n\t\tget_password.c get_password.h\n\t)\n\n\ttarget_include_d"
  },
  {
    "path": "apps/mosquitto_passwd/Makefile",
    "chars": 981,
    "preview": "R=../..\ninclude ${R}/config.mk\n\nLOCAL_CFLAGS+=\nLOCAL_CPPFLAGS+=-I${R}/lib\nLOCAL_LDFLAGS+=\nLOCAL_LDADD+=-lcrypto ${LIBMOS"
  },
  {
    "path": "apps/mosquitto_passwd/get_password.c",
    "chars": 2919,
    "preview": "/*\nCopyright (c) 2012-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_passwd/get_password.h",
    "chars": 803,
    "preview": "#ifndef GET_PASSWORD_H\n#define GET_PASSWORD_H\n/*\nCopyright (c) 2012-2021 Roger Light <roger@atchoo.org>\n\nAll rights rese"
  },
  {
    "path": "apps/mosquitto_passwd/mosquitto_passwd.c",
    "chars": 17412,
    "preview": "/*\nCopyright (c) 2012-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "apps/mosquitto_signal/CMakeLists.txt",
    "chars": 424,
    "preview": "set(SRC\n\tmosquitto_signal.c\n)\n\nif(WIN32)\n\tset(SRC ${SRC} signal_windows.c)\nelse()\n\tset(SRC ${SRC} signal_unix.c)\nendif()"
  },
  {
    "path": "apps/mosquitto_signal/Makefile",
    "chars": 756,
    "preview": "R=../..\ninclude ${R}/config.mk\n\nLOCAL_CFLAGS+=\nLOCAL_CPPFLAGS+=-I${R}/lib\nLOCAL_LDFLAGS+=\nLOCAL_LDADD+=\n\n.PHONY: all ins"
  },
  {
    "path": "apps/mosquitto_signal/mosquitto_signal.c",
    "chars": 3118,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_signal/mosquitto_signal.h",
    "chars": 251,
    "preview": "#ifndef MOSQUITTO_SIGNAL_H\n#define MOSQUITTO_SIGNAL_H\n\nenum mosq_signal {\n\tMSIG_CONFIG_RELOAD,\n\tMSIG_LOG_ROTATE,\n\tMSIG_S"
  },
  {
    "path": "apps/mosquitto_signal/signal_unix.c",
    "chars": 2226,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "apps/mosquitto_signal/signal_windows.c",
    "chars": 2267,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "buildtest.py",
    "chars": 1495,
    "preview": "#!/usr/bin/python3\n\nbuild_variants = [\n    'WITH_ARGON2',\n    'WITH_ASAN',\n    'WITH_BRIDGE',\n    'WITH_CONTROL',\n    'W"
  },
  {
    "path": "client/CMakeLists.txt",
    "chars": 1800,
    "preview": "set(shared_src client_shared.c client_shared.h client_props.c)\n\nadd_library(client-common INTERFACE)\ntarget_link_librari"
  },
  {
    "path": "client/Makefile",
    "chars": 3910,
    "preview": "R=..\ninclude ${R}/config.mk\n\n.PHONY: all install uninstall reallyclean clean static static_pub static_sub static_rr\n\nife"
  },
  {
    "path": "client/args.txt",
    "chars": 1223,
    "preview": "A - PUB,RR,SUB     (bind to address)\na\nB\nb\nC - SUB            (message count)\nc - PUB,RR,SUB     (clean session)\nD - PUB"
  },
  {
    "path": "client/client_props.c",
    "chars": 5847,
    "preview": "/*\nCopyright (c) 2018-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/client_shared.c",
    "chars": 48378,
    "preview": "/*\nCopyright (c) 2014-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/client_shared.h",
    "chars": 3830,
    "preview": "/*\nCopyright (c) 2014-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/pub_client.c",
    "chars": 20314,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/pub_shared.c",
    "chars": 2570,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/pub_shared.h",
    "chars": 1587,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/pub_test_properties",
    "chars": 866,
    "preview": "LD_LIBRARY_PATH=../lib ./mosquitto_pub \\\n\t\\\n\t-t asdf -V mqttv5 -m '{\"key\":\"value\"}' \\\n\t\\\n\t-D connect authentication-data"
  },
  {
    "path": "client/rr_client.c",
    "chars": 15386,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/sub_client.c",
    "chars": 17325,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/sub_client_output.c",
    "chars": 20609,
    "preview": "/*\nCopyright (c) 2009-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/sub_client_output.h",
    "chars": 868,
    "preview": "/*\nCopyright (c) 2019-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "client/sub_test_fixed_width",
    "chars": 1518,
    "preview": "LD_LIBRARY_PATH=../lib ./mosquitto_sub \\\n\t-h test.mosquitto.org \\\n\t--retained-only \\\n\t--remove-retained \\\n\t-t FW/# \\\n\t-W"
  },
  {
    "path": "client/sub_test_properties",
    "chars": 1041,
    "preview": "LD_LIBRARY_PATH=../lib ./mosquitto_sub \\\n\t\\\n\t-V mqttv5 -C 10 -t \\$SYS/# -v -U unsub --will-topic will --will-payload '{\""
  },
  {
    "path": "cmake/FindCUnit.cmake",
    "chars": 884,
    "preview": "find_package(PkgConfig)\npkg_check_modules(PC_CUnit QUIET cunit)\n\nfind_path(CUnit_INCLUDE_DIR\n  NAMES CUnit/CUnit.h\n  PAT"
  },
  {
    "path": "cmake/FindLineEditing.cmake",
    "chars": 1941,
    "preview": "include(FindPackageHandleStandardArgs)\n\nset(FIND_PATH_OPTS \"\")\nif(APPLE)\n\tlist(APPEND FIND_PATH_OPTS\n\t\tNO_CMAKE_SYSTEM_P"
  },
  {
    "path": "cmake/Findargon2.cmake",
    "chars": 1010,
    "preview": "INCLUDE( FindPackageHandleStandardArgs )\n\n# Checks an environment variable; note that the first check\n# does not require"
  },
  {
    "path": "cmake/FindcJSON.cmake",
    "chars": 988,
    "preview": "INCLUDE( FindPackageHandleStandardArgs )\n\n# Checks an environment variable; note that the first check\n# does not require"
  },
  {
    "path": "codecov.yml",
    "chars": 208,
    "preview": "codecov:\n  max_report_age: off\nignore:\n  - \"deps/picohttpparser\"\n  - \"deps/*.h\"\n  - \"plugins/examples\"\n  - \"test\"\n  - \"^"
  },
  {
    "path": "common/json_help.c",
    "chars": 2833,
    "preview": "/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "common/json_help.h",
    "chars": 1488,
    "preview": "#ifndef JSON_HELP_H\n#define JSON_HELP_H\n/*\nCopyright (c) 2020-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. "
  },
  {
    "path": "common/lib_load.h",
    "chars": 1095,
    "preview": "/*\nCopyright (c) 2012-2021 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materi"
  },
  {
    "path": "config.h",
    "chars": 2209,
    "preview": "#ifndef CONFIG_H\n#define CONFIG_H\n/* ============================================================\n * Platform options\n *"
  },
  {
    "path": "config.mk",
    "chars": 8556,
    "preview": "# =============================================================================\n# User configuration section.\n#\n# These "
  },
  {
    "path": "dashboard/README.md",
    "chars": 728,
    "preview": "### Simple web-based graphical user interface for Mosquitto\n\nTo develop UI locally.\n\n1) Install tailwind:\n```sh\nnpm -g i"
  },
  {
    "path": "dashboard/src/app/consts.js",
    "chars": 558,
    "preview": "const MAX_POINTS_IN_CHART = 5_000;\nconst KEEP_DATAPOINTS_FOR_INTERVAL =\n  1000 * // 1 sec\n  60 * // 1 minute\n  60 * // 1"
  },
  {
    "path": "dashboard/src/app/dashboard.js",
    "chars": 53765,
    "preview": "const MAIN_CHART_COLOR = \"#fd602e\";\nconst SUPPLEMENTARY_CHART_COLOR = \"#6366f1\";\n\nclass MosquittoDashboard {\n  construct"
  },
  {
    "path": "dashboard/src/app/index.js",
    "chars": 2831,
    "preview": "document.addEventListener(\"DOMContentLoaded\", () => {\n  new Sidebar();\n  new MosquittoDashboard();\n});\n\nfunction checkNo"
  },
  {
    "path": "dashboard/src/app/listeners.js",
    "chars": 9418,
    "preview": "class Listeners {\n  constructor() {\n    this.abort = new AbortController();\n    registerAbortController(this.abort, this"
  },
  {
    "path": "dashboard/src/app/sidebar.js",
    "chars": 2053,
    "preview": "class Sidebar {\n  constructor() {\n    this.menuToggle = document.getElementById(\"menu-toggle\");\n    this.menuClose = doc"
  },
  {
    "path": "dashboard/src/css/styles.css",
    "chars": 2552,
    "preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.bg-c-orange {\n  background-color: #fd602e;\n}\n\n.hover\\:bg-c-"
  },
  {
    "path": "dashboard/src/index.html",
    "chars": 81639,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width"
  },
  {
    "path": "dashboard/src/lib/chart.umd.js",
    "chars": 204509,
    "preview": "/*!\n * Chart.js v4.3.0\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n *"
  },
  {
    "path": "dashboard/src/listeners.html",
    "chars": 16112,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width"
  },
  {
    "path": "dashboard/src/tailwind/styles.css",
    "chars": 24675,
    "preview": "*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y"
  },
  {
    "path": "dashboard/src/tailwind.config.js",
    "chars": 148,
    "preview": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"./*.html\", \"./*.js\"],\n  theme: {\n    extend:"
  },
  {
    "path": "dashboard/src/utils/assert.js",
    "chars": 147,
    "preview": "function assertExistence(value, error) {\n  if (value === undefined) {\n    throw new Error(error);\n  }\n}\n\n// assertValue("
  },
  {
    "path": "dashboard/src/utils/queue.js",
    "chars": 488,
    "preview": "class Queue {\n  constructor() {\n    this.tasks = [];\n    this.active = false;\n  }\n\n  enqueue(task) {\n    this.tasks.push"
  },
  {
    "path": "dashboard/src/utils/utils.js",
    "chars": 4862,
    "preview": "function toAsyncAndWaitAfter(task, delay = 0) {\n  return () => {\n    const promise = new Promise((resolve, reject) => {\n"
  },
  {
    "path": "deps/picohttpparser/README.md",
    "chars": 4343,
    "preview": "PicoHTTPParser\n=============\n\nCopyright (c) 2009-2014 [Kazuho Oku](https://github.com/kazuho), [Tokuhiro Matsuno](https:"
  },
  {
    "path": "deps/picohttpparser/picohttpparser.c",
    "chars": 26550,
    "preview": "/*\n * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase,\n *                         Shigeo Mitsunari\n"
  },
  {
    "path": "deps/picohttpparser/picohttpparser.h",
    "chars": 3461,
    "preview": "/*\n * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase,\n *                         Shigeo Mitsunari\n"
  },
  {
    "path": "deps/uthash.h",
    "chars": 75990,
    "preview": "/*\nCopyright (c) 2003-2025, Troy D. Hanson  https://troydhanson.github.io/uthash/\nAll rights reserved.\n\nRedistribution a"
  },
  {
    "path": "deps/utlist.h",
    "chars": 81682,
    "preview": "/*\nCopyright (c) 2007-2025, Troy D. Hanson  https://troydhanson.github.io/uthash/\nAll rights reserved.\n\nRedistribution a"
  },
  {
    "path": "doc/historical/old-regex.txt",
    "chars": 1389,
    "preview": "This is the description of the regex used previously for topic/subscription\nmatching. It is reproduced here for posterit"
  },
  {
    "path": "doc/historical/topic-match.kds",
    "chars": 154,
    "preview": "S'^(?:(?:(a|\\\\+)(?!$))(?:(?:/(?:(b|\\\\+)(?!$)))(?:(?:/(?:c|\\\\+))|/#)?|/#)?|#)$'\np1\n.S'a/#\\na/b/c\\na/b/+\\na/b\\na/+\\n+\\n+/b"
  },
  {
    "path": "doc/joss-paper/codemeta.json",
    "chars": 676,
    "preview": "{\n  \"@context\": \"https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld\",\n  \"@type\": \"Code\",\n  \"auth"
  },
  {
    "path": "doc/joss-paper/paper.bib",
    "chars": 8001,
    "preview": "@inproceedings{Schulz_2014,\n\ttitle = {Real-time animation of equipment in a remote laboratory},\n\tdoi = {10.1109/REV.2014"
  },
  {
    "path": "doc/joss-paper/paper.md",
    "chars": 1986,
    "preview": "---\ntitle: 'Mosquitto: server and client implementation of the MQTT protocol'\ntags:\n  - Internet of Things\n  - MQTT\n  - "
  },
  {
    "path": "docker/1.6-openssl/Dockerfile",
    "chars": 3650,
    "preview": "FROM alpine:3.23\n\nENV VERSION=1.6.15 \\\n    DOWNLOAD_SHA256=5ff2271512f745bf1a451072cd3768a5daed71e90c5179fae12b049d6c02a"
  },
  {
    "path": "docker/1.6-openssl/README.md",
    "chars": 1542,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build as source from published tarballs.\n\n## Moun"
  },
  {
    "path": "docker/1.6-openssl/docker-entrypoint.sh",
    "chars": 166,
    "preview": "#!/bin/ash\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$user\" = '0' ]; then\n\t[ -d \"/mosquitto\" ] && chown -R mosquit"
  },
  {
    "path": "docker/2.0-openssl/Dockerfile",
    "chars": 3965,
    "preview": "FROM alpine:3.23\n\nENV VERSION=2.0.22 \\\n    DOWNLOAD_SHA256=2f752589ef7db40260b633fbdb536e9a04b446a315138d64a7ff3c14e2de6"
  },
  {
    "path": "docker/2.0-openssl/README.md",
    "chars": 3177,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build as source from published tarballs.\n\n## Moun"
  },
  {
    "path": "docker/2.0-openssl/docker-entrypoint.sh",
    "chars": 166,
    "preview": "#!/bin/ash\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$user\" = '0' ]; then\n\t[ -d \"/mosquitto\" ] && chown -R mosquit"
  },
  {
    "path": "docker/2.0-openssl/mosquitto-no-auth.conf",
    "chars": 152,
    "preview": "# This is a Mosquitto configuration file that creates a listener on port 1883\n# that allows unauthenticated access.\n\nlis"
  },
  {
    "path": "docker/2.1-alpine/Dockerfile",
    "chars": 4933,
    "preview": "FROM alpine:3.23\n\nENV VERSION=2.1.2 \\\n    DOWNLOAD_SHA256=fd905380691ac65ea5a93779e8214941829e3d6e038d5edff9eac5fd74cbed"
  },
  {
    "path": "docker/2.1-alpine/README.md",
    "chars": 2949,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build as source from published tarballs.\n\n## Moun"
  },
  {
    "path": "docker/2.1-alpine/docker-entrypoint.sh",
    "chars": 256,
    "preview": "#!/bin/ash\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$PUID\" = \"\" ]; then\n\tPUID=\"1883\"\nfi\nif [ \"$PGID\" = \"\" ]; then"
  },
  {
    "path": "docker/2.1-alpine/mosquitto.conf",
    "chars": 225,
    "preview": "# This is a Mosquitto configuration file that creates a listener on port 1883\n# that allows unauthenticated access.\n\nlis"
  },
  {
    "path": "docker/2.1-ubuntu/Dockerfile",
    "chars": 5066,
    "preview": "FROM ubuntu:24.04\n\nENV VERSION=2.1.2 \\\n    DOWNLOAD_SHA256=fd905380691ac65ea5a93779e8214941829e3d6e038d5edff9eac5fd74cbe"
  },
  {
    "path": "docker/2.1-ubuntu/README.md",
    "chars": 2949,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build as source from published tarballs.\n\n## Moun"
  },
  {
    "path": "docker/2.1-ubuntu/docker-entrypoint.sh",
    "chars": 255,
    "preview": "#!/bin/sh\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$PUID\" = \"\" ]; then\n\tPUID=\"1883\"\nfi\nif [ \"$PGID\" = \"\" ]; then\n"
  },
  {
    "path": "docker/2.1-ubuntu/mosquitto.conf",
    "chars": 225,
    "preview": "# This is a Mosquitto configuration file that creates a listener on port 1883\n# that allows unauthenticated access.\n\nlis"
  },
  {
    "path": "docker/README.md",
    "chars": 1187,
    "preview": "# Docker Images\n\nThis directory contains Docker files for Mosquitto.\n\nThe `2.0` directory contains the latest version of"
  },
  {
    "path": "docker/generic/Dockerfile",
    "chars": 5792,
    "preview": "FROM alpine:3.23\n\nLABEL maintainer=\"Roger Light <roger@atchoo.org>\" \\\n    description=\"Eclipse Mosquitto MQTT Broker\"\n\nA"
  },
  {
    "path": "docker/generic/README.md",
    "chars": 2852,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build as source from published tarballs.\n\n## Moun"
  },
  {
    "path": "docker/generic/docker-entrypoint.sh",
    "chars": 166,
    "preview": "#!/bin/ash\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$user\" = '0' ]; then\n\t[ -d \"/mosquitto\" ] && chown -R mosquit"
  },
  {
    "path": "docker/generic/mosquitto-no-auth.conf",
    "chars": 152,
    "preview": "# This is a Mosquitto configuration file that creates a listener on port 1883\n# that allows unauthenticated access.\n\nlis"
  },
  {
    "path": "docker/local/Dockerfile",
    "chars": 3837,
    "preview": "FROM alpine:3.23\n\nARG VERSION\n\nLABEL \\\n    org.opencontainers.image.authors=\"Roger Light <roger@atchoo.org>\" \\\n    org.o"
  },
  {
    "path": "docker/local/README.md",
    "chars": 1747,
    "preview": "# Eclipse Mosquitto Docker Image\nContainers built with this Dockerfile build from a source tarball \"mosq.tar.gz\"\nplaced "
  },
  {
    "path": "docker/local/docker-entrypoint.sh",
    "chars": 266,
    "preview": "#!/bin/ash\nset -e\n\n# Set permissions\nuser=\"$(id -u)\"\nif [ \"$PUID\" = \"\" ]; then\n\tPUID=\"mosquitto\"\nfi\nif [ \"$PGID\" = \"\" ];"
  },
  {
    "path": "docker/local/mosquitto.conf",
    "chars": 225,
    "preview": "# This is a Mosquitto configuration file that creates a listener on port 1883\n# that allows unauthenticated access.\n\nlis"
  },
  {
    "path": "edl-v10",
    "chars": 1568,
    "preview": "Eclipse Distribution License - v 1.0\n\nCopyright (c) 2007, Eclipse Foundation, Inc. and its licensors.\n\nAll rights reserv"
  },
  {
    "path": "epl-v20",
    "chars": 14197,
    "preview": "Eclipse Public License - v 2.0\n\n    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE\n    PUBLIC LICE"
  },
  {
    "path": "examples/mysql_log/Makefile",
    "chars": 300,
    "preview": "R=../..\nLOCAL_CFLAGS=-Wall -ggdb\nLOCAL_LDFLAGS=${LIBMOSQ} -lmysqlclient\n\n.PHONY: all clean\n\nall : mosquitto_mysql_log\n\nm"
  },
  {
    "path": "examples/mysql_log/mysql_log.c",
    "chars": 2752,
    "preview": "#include <signal.h>\n#include <stdio.h>\n#include <string.h>\n\n#ifndef WIN32\n#  include <unistd.h>\n#else\n#  include <proces"
  },
  {
    "path": "examples/publish/Makefile",
    "chars": 566,
    "preview": "R=../..\ninclude ${R}/config.mk\n\n.PHONY: all\n\nall : basic-1 basic-websockets-1\n\nbasic-1 : basic-1.o\n\t${CROSS_COMPILE}${CC"
  },
  {
    "path": "examples/publish/basic-1.c",
    "chars": 4618,
    "preview": "/*\n * This example shows how to publish messages from outside of the Mosquitto network loop.\n */\n\n#include <mosquitto.h>"
  },
  {
    "path": "examples/publish/basic-websockets-1.c",
    "chars": 4759,
    "preview": "/*\n * This example shows how to publish messages from outside of the Mosquitto network loop.\n *\n * This is identical to "
  },
  {
    "path": "examples/subscribe/basic-1.c",
    "chars": 4139,
    "preview": "/*\n * This example shows how to write a client that subscribes to a topic and does\n * not do anything other than handle "
  },
  {
    "path": "examples/subscribe_simple/Makefile",
    "chars": 663,
    "preview": "R=../..\ninclude ${R}/config.mk\n\n.PHONY: all\n\nall : sub_callback sub_single sub_multiple\n\nsub_callback : callback.o\n\t${CR"
  },
  {
    "path": "examples/subscribe_simple/callback.c",
    "chars": 582,
    "preview": "#include <stdlib.h>\n#include <stdio.h>\n#include \"mosquitto.h\"\n\n\nint on_message(struct mosquitto *mosq, void *userdata, c"
  },
  {
    "path": "examples/subscribe_simple/multiple.c",
    "chars": 630,
    "preview": "#include <stdlib.h>\n#include <stdio.h>\n#include \"mosquitto.h\"\n\n#define COUNT 3\n\n\nint main(int argc, char *argv[])\n{\n\tint"
  },
  {
    "path": "examples/subscribe_simple/single.c",
    "chars": 543,
    "preview": "#include <stdlib.h>\n#include <stdio.h>\n#include \"mosquitto.h\"\n\n\nint main(int argc, char *argv[])\n{\n\tint rc;\n\tstruct mosq"
  },
  {
    "path": "examples/temperature_conversion/Makefile",
    "chars": 474,
    "preview": "R=../..\nLOCAL_CFLAGS=-Wall -ggdb -I${R}/lib -I${R}/lib/cpp\nLOCAL_LDFLAGS=-L${R}/lib ${R}/lib/cpp/libmosquittopp.so.1 ${L"
  },
  {
    "path": "examples/temperature_conversion/main.cpp",
    "chars": 266,
    "preview": "#include \"temperature_conversion.h\"\n\n\nint main(int argc, char *argv[])\n{\n\tclass mqtt_tempconv *tempconv;\n\tint rc;\n\n\tmosq"
  },
  {
    "path": "examples/temperature_conversion/readme.txt",
    "chars": 304,
    "preview": "This is a simple example of the C++ library mosquittopp.\n\nIt is a client that subscribes to the topic temperature/celsiu"
  },
  {
    "path": "examples/temperature_conversion/temperature_conversion.cpp",
    "chars": 1222,
    "preview": "#include <cstdio>\n#include <cstring>\n\n#include \"temperature_conversion.h\"\n#include <mosquittopp.h>\n\nmqtt_tempconv::mqtt_"
  },
  {
    "path": "examples/temperature_conversion/temperature_conversion.h",
    "chars": 396,
    "preview": "#ifndef TEMPERATURE_CONVERSION_H\n#define TEMPERATURE_CONVERSION_H\n\n#include <mosquittopp.h>\n\nclass mqtt_tempconv : publi"
  },
  {
    "path": "format.sh",
    "chars": 414,
    "preview": "#!/bin/bash\n\nfind -name '*.c' -exec uncrustify -c .uncrustify.cfg --no-backup {} \\;\nfind -name '*.cpp' -exec uncrustify "
  },
  {
    "path": "fuzzing/Makefile",
    "chars": 472,
    "preview": ".PHONY: all clean\n\nall:\n\t./generate_packet_corpora.py\n\tzip -r corpora/db_dump_seed_corpus.zip ../test/apps/db_dump/data/"
  },
  {
    "path": "fuzzing/apps/Makefile",
    "chars": 142,
    "preview": ".PHONY: all clean\n\nall:\n\t$(MAKE) -C db_dump $@\n\t$(MAKE) -C mosquitto_passwd $@\n\nclean:\n\t$(MAKE) -C db_dump $@\n\t$(MAKE) -"
  },
  {
    "path": "fuzzing/apps/db_dump/Makefile",
    "chars": 1157,
    "preview": "R=../../..\ninclude ${R}/fuzzing/config.mk\n\n.PHONY: all clean\n\nFUZZERS:= \\\n\tdb_dump_fuzz_load \\\n\tdb_dump_fuzz_load_client"
  },
  {
    "path": "fuzzing/apps/db_dump/db_dump_fuzz_load.cpp",
    "chars": 1340,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/apps/db_dump/db_dump_fuzz_load_client_stats.cpp",
    "chars": 1425,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/apps/db_dump/db_dump_fuzz_load_stats.cpp",
    "chars": 1392,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/apps/mosquitto_passwd/Makefile",
    "chars": 639,
    "preview": "R=../../..\ninclude ${R}/fuzzing/config.mk\n\n.PHONY: all clean\n\nFUZZERS:= \\\n\tmosquitto_passwd_fuzz_load\n\nLOCAL_CPPFLAGS+=\n"
  },
  {
    "path": "fuzzing/apps/mosquitto_passwd/mosquitto_passwd_fuzz_load.cpp",
    "chars": 1516,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/Makefile",
    "chars": 3888,
    "preview": "R=../..\ninclude ${R}/fuzzing/config.mk\n\n.PHONY: all clean\n\nFUZZERS:= \\\n\tbroker_fuzz_acl_file \\\n\tbroker_fuzz_password_fil"
  },
  {
    "path": "fuzzing/broker/broker_fuzz.cpp",
    "chars": 2712,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz.h",
    "chars": 910,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_acl_file.cpp",
    "chars": 1414,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_handle_auth.cpp",
    "chars": 1085,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_handle_connect.cpp",
    "chars": 1876,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_handle_publish.cpp",
    "chars": 1828,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_handle_subscribe.cpp",
    "chars": 1861,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_handle_unsubscribe.cpp",
    "chars": 1863,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_password_file.cpp",
    "chars": 1434,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_proxy_v1.cpp",
    "chars": 2097,
    "preview": "/*\nCopyright (c) 2025 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_proxy_v2.cpp",
    "chars": 1917,
    "preview": "/*\nCopyright (c) 2025 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_psk_file.cpp",
    "chars": 1405,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_queue_msg.cpp",
    "chars": 1680,
    "preview": "/*\nCopyright (c) 2024 Roger Light <roger@atchoo.org>\n\nAll rights reserved. This program and the accompanying materials\na"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_read_handle.cpp",
    "chars": 888,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_test_config.cpp",
    "chars": 1577,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  },
  {
    "path": "fuzzing/broker/broker_fuzz_with_init.cpp",
    "chars": 2911,
    "preview": "/*\nCopyright (c) 2023 Cedalo GmbH\n\nAll rights reserved. This program and the accompanying materials\nare made available u"
  }
]

// ... and 1664 more files (download for full content)

About this extraction

This page contains the full source code of the eclipse-mosquitto/mosquitto GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1864 files (7.2 MB), approximately 2.0M tokens, and a symbol index with 6236 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!