From 9cd1c63d002beab47a5da278dfdf4c710c19540a Mon Sep 17 00:00:00 2001 From: nlohmann Date: Fri, 17 Jan 2025 05:54:35 +0000 Subject: [PATCH] deploy: 26cfec34be82ba31d59372b399d00618c8a64880 --- 404.html | 2 +- api/adl_serializer/from_json/index.html | 6 +- api/adl_serializer/index.html | 6 +- api/adl_serializer/to_json/index.html | 6 +- api/basic_json/accept/index.html | 6 +- api/basic_json/array/index.html | 6 +- api/basic_json/array_t/index.html | 8 +- api/basic_json/at/index.html | 10 +- api/basic_json/back/index.html | 8 +- api/basic_json/basic_json/index.html | 12 +- api/basic_json/begin/index.html | 4 +- api/basic_json/binary/index.html | 6 +- api/basic_json/binary_t/index.html | 6 +- api/basic_json/boolean_t/index.html | 6 +- api/basic_json/cbegin/index.html | 4 +- api/basic_json/cbor_tag_handler_t/index.html | 4 +- api/basic_json/cend/index.html | 4 +- api/basic_json/clear/index.html | 8 +- api/basic_json/contains/index.html | 8 +- api/basic_json/count/index.html | 6 +- api/basic_json/crbegin/index.html | 4 +- api/basic_json/crend/index.html | 4 +- .../default_object_comparator_t/index.html | 4 +- api/basic_json/diff/index.html | 8 +- api/basic_json/dump/index.html | 6 +- api/basic_json/emplace/index.html | 6 +- api/basic_json/emplace_back/index.html | 6 +- api/basic_json/empty/index.html | 8 +- api/basic_json/end/index.html | 4 +- api/basic_json/end_pos/index.html | 104 + api/basic_json/erase/index.html | 14 +- api/basic_json/error_handler_t/index.html | 6 +- api/basic_json/exception/index.html | 6 +- api/basic_json/find/index.html | 6 +- api/basic_json/flatten/index.html | 6 +- api/basic_json/from_bjdata/index.html | 6 +- api/basic_json/from_bson/index.html | 6 +- api/basic_json/from_cbor/index.html | 6 +- api/basic_json/from_msgpack/index.html | 6 +- api/basic_json/from_ubjson/index.html | 6 +- api/basic_json/front/index.html | 6 +- api/basic_json/get/index.html | 12 +- api/basic_json/get_allocator/index.html | 4 +- api/basic_json/get_binary/index.html | 4 +- api/basic_json/get_ptr/index.html | 8 +- api/basic_json/get_ref/index.html | 6 +- api/basic_json/get_to/index.html | 8 +- api/basic_json/index.html | 6 +- api/basic_json/input_format_t/index.html | 6 +- api/basic_json/insert/index.html | 6 +- api/basic_json/invalid_iterator/index.html | 4 +- api/basic_json/is_array/index.html | 6 +- api/basic_json/is_binary/index.html | 6 +- api/basic_json/is_boolean/index.html | 6 +- api/basic_json/is_discarded/index.html | 8 +- api/basic_json/is_null/index.html | 6 +- api/basic_json/is_number/index.html | 8 +- api/basic_json/is_number_float/index.html | 6 +- api/basic_json/is_number_integer/index.html | 6 +- api/basic_json/is_number_unsigned/index.html | 6 +- api/basic_json/is_object/index.html | 6 +- api/basic_json/is_primitive/index.html | 8 +- api/basic_json/is_string/index.html | 6 +- api/basic_json/is_structured/index.html | 8 +- api/basic_json/items/index.html | 10 +- api/basic_json/json_base_class_t/index.html | 6 +- api/basic_json/json_serializer/index.html | 6 +- api/basic_json/max_size/index.html | 6 +- api/basic_json/merge_patch/index.html | 8 +- api/basic_json/meta/index.html | 6 +- api/basic_json/number_float_t/index.html | 6 +- api/basic_json/number_integer_t/index.html | 6 +- api/basic_json/number_unsigned_t/index.html | 6 +- api/basic_json/object/index.html | 6 +- api/basic_json/object_comparator_t/index.html | 4 +- api/basic_json/object_t/index.html | 8 +- api/basic_json/operator+=/index.html | 8 +- api/basic_json/operator=/index.html | 6 +- api/basic_json/operator[]/index.html | 10 +- api/basic_json/operator_ValueType/index.html | 8 +- api/basic_json/operator_eq/index.html | 12 +- api/basic_json/operator_ge/index.html | 6 +- api/basic_json/operator_gt/index.html | 6 +- api/basic_json/operator_le/index.html | 6 +- api/basic_json/operator_lt/index.html | 6 +- api/basic_json/operator_ne/index.html | 8 +- api/basic_json/operator_spaceship/index.html | 8 +- api/basic_json/operator_value_t/index.html | 6 +- api/basic_json/other_error/index.html | 4 +- api/basic_json/out_of_range/index.html | 4 +- api/basic_json/parse/index.html | 6 +- api/basic_json/parse_error/index.html | 6 +- api/basic_json/parse_event_t/index.html | 4 +- api/basic_json/parser_callback_t/index.html | 6 +- api/basic_json/patch/index.html | 6 +- api/basic_json/patch_inplace/index.html | 6 +- api/basic_json/push_back/index.html | 8 +- api/basic_json/rbegin/index.html | 4 +- api/basic_json/rend/index.html | 4 +- api/basic_json/sax_parse/index.html | 6 +- api/basic_json/size/index.html | 6 +- api/basic_json/start_pos/index.html | 104 + api/basic_json/std_hash/index.html | 6 +- api/basic_json/std_swap/index.html | 6 +- api/basic_json/string_t/index.html | 6 +- api/basic_json/swap/index.html | 6 +- api/basic_json/to_bjdata/index.html | 6 +- api/basic_json/to_bson/index.html | 6 +- api/basic_json/to_cbor/index.html | 6 +- api/basic_json/to_msgpack/index.html | 6 +- api/basic_json/to_string/index.html | 6 +- api/basic_json/to_ubjson/index.html | 6 +- api/basic_json/type/index.html | 6 +- api/basic_json/type_error/index.html | 6 +- api/basic_json/type_name/index.html | 6 +- api/basic_json/unflatten/index.html | 6 +- api/basic_json/update/index.html | 6 +- api/basic_json/value/index.html | 10 +- api/basic_json/value_t/index.html | 6 +- api/basic_json/~basic_json/index.html | 4 +- .../byte_container_with_subtype/index.html | 4 +- .../clear_subtype/index.html | 4 +- .../has_subtype/index.html | 4 +- api/byte_container_with_subtype/index.html | 4 +- .../set_subtype/index.html | 6 +- .../subtype/index.html | 4 +- api/json/index.html | 4 +- api/json_pointer/back/index.html | 6 +- api/json_pointer/empty/index.html | 6 +- api/json_pointer/index.html | 4 +- api/json_pointer/json_pointer/index.html | 6 +- api/json_pointer/operator_eq/index.html | 8 +- api/json_pointer/operator_ne/index.html | 8 +- api/json_pointer/operator_slash/index.html | 6 +- api/json_pointer/operator_slasheq/index.html | 6 +- api/json_pointer/operator_string_t/index.html | 8 +- api/json_pointer/parent_pointer/index.html | 6 +- api/json_pointer/pop_back/index.html | 6 +- api/json_pointer/push_back/index.html | 6 +- api/json_pointer/string_t/index.html | 6 +- api/json_pointer/to_string/index.html | 6 +- api/json_sax/binary/index.html | 6 +- api/json_sax/boolean/index.html | 6 +- api/json_sax/end_array/index.html | 6 +- api/json_sax/end_object/index.html | 6 +- api/json_sax/index.html | 4 +- api/json_sax/key/index.html | 6 +- api/json_sax/null/index.html | 6 +- api/json_sax/number_float/index.html | 6 +- api/json_sax/number_integer/index.html | 6 +- api/json_sax/number_unsigned/index.html | 6 +- api/json_sax/parse_error/index.html | 6 +- api/json_sax/start_array/index.html | 6 +- api/json_sax/start_object/index.html | 6 +- api/json_sax/string/index.html | 6 +- api/macros/index.html | 2 +- api/macros/json_assert/index.html | 6 +- .../json_diagnostic_positions/index.html | 8 +- api/macros/json_diagnostics/index.html | 6 +- .../index.html | 4 +- api/macros/json_has_cpp_11/index.html | 4 +- api/macros/json_has_filesystem/index.html | 6 +- api/macros/json_has_ranges/index.html | 4 +- api/macros/json_has_static_rtti/index.html | 6 +- .../json_has_three_way_comparison/index.html | 4 +- api/macros/json_no_io/index.html | 4 +- api/macros/json_noexception/index.html | 6 +- .../index.html | 4 +- .../index.html | 4 +- api/macros/json_throw_user/index.html | 8 +- api/macros/json_use_global_udls/index.html | 4 +- .../json_use_implicit_conversions/index.html | 4 +- .../index.html | 6 +- .../nlohmann_define_derived_type/index.html | 76 +- .../nlohmann_define_type_intrusive/index.html | 6 +- .../index.html | 6 +- api/macros/nlohmann_json_namespace/index.html | 4 +- .../nlohmann_json_namespace_begin/index.html | 4 +- .../index.html | 4 +- .../nlohmann_json_serialize_enum/index.html | 8 +- .../nlohmann_json_version_major/index.html | 6 +- api/operator_gtgt/index.html | 6 +- api/operator_literal_json/index.html | 8 +- api/operator_literal_json_pointer/index.html | 8 +- api/operator_ltlt/index.html | 8 +- api/ordered_json/index.html | 4 +- api/ordered_map/index.html | 4 +- .../uploads/2009/06/OSIApproved_100X125.png | Bin 0 -> 12127 bytes ...39f17ca2b89bb88176370803ee69aeebcb5be4.png | Bin 0 -> 10845 bytes .../twemoji@15.1.0/assets/svg/1f41b.svg | 1 + .../twemoji@15.1.0/assets/svg/1f477.svg | 1 + .../twemoji@15.1.0/assets/svg/1f4a5.svg | 1 + .../twemoji@15.1.0/assets/svg/1f4c8.svg | 1 + .../twemoji@15.1.0/assets/svg/1f4dd.svg | 1 + .../twemoji@15.1.0/assets/svg/1f512.svg | 1 + .../twemoji@15.1.0/assets/svg/1f525.svg | 1 + .../twemoji@15.1.0/assets/svg/1f527.svg | 1 + .../twemoji@15.1.0/assets/svg/1f528.svg | 1 + .../twemoji@15.1.0/assets/svg/1f69a.svg | 1 + .../twemoji@15.1.0/assets/svg/1f6a8.svg | 1 + .../twemoji@15.1.0/assets/svg/26a1.svg | 1 + .../twemoji@15.1.0/assets/svg/2705.svg | 1 + .../twemoji@15.1.0/assets/svg/270f.svg | 1 + .../twemoji@15.1.0/assets/svg/2728.svg | 1 + .../twemoji@15.1.0/assets/svg/2795.svg | 1 + .../twemoji@15.1.0/assets/svg/2b06.svg | 1 + .../libs/mathjax/2.7.0/MathJax.39674748.js | 19 + .../aebe8f7a-e597-11e6-930f-7494ee615827.png | Bin 0 -> 323042 bytes .../d4d60d32-e597-11e6-8dcb-825abcf9ac2a.png | Bin 0 -> 276574 bytes .../fonts.googleapis.com/css.61a430c9.css | 756 ++++++ ...uZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2 | Bin 0 -> 33096 bytes ...JXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2 | Bin 0 -> 7124 bytes ...JXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2 | Bin 0 -> 9844 bytes ...JXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2 | Bin 0 -> 1744 bytes ...JXxfpAO-LfjGbsVNLG7DGdF6OZ1PszgMgo-8.woff2 | Bin 0 -> 12504 bytes ...JXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2 | Bin 0 -> 6284 bytes ...0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2 | Bin 0 -> 1640 bytes ...0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2 | Bin 0 -> 11624 bytes ...BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2 | Bin 0 -> 31432 bytes ...0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2 | Bin 0 -> 6836 bytes ...0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2 | Bin 0 -> 8872 bytes ...0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2 | Bin 0 -> 5888 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2 | Bin 0 -> 24576 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2 | Bin 0 -> 18800 bytes ...CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2 | Bin 0 -> 44192 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2 | Bin 0 -> 39456 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2 | Bin 0 -> 28536 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2 | Bin 0 -> 13888 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2 | Bin 0 -> 4468 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2 | Bin 0 -> 22288 bytes ...Eu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2 | Bin 0 -> 44336 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2 | Bin 0 -> 17628 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2 | Bin 0 -> 4340 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2 | Bin 0 -> 35568 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2 | Bin 0 -> 26428 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2 | Bin 0 -> 13004 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2 | Bin 0 -> 22796 bytes ...O7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2 | Bin 0 -> 40128 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2 | Bin 0 -> 40572 bytes ...CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2 | Bin 0 -> 20408 bytes .../cocoapods/v/nlohmann_json.svg | 1 + .../conda/v/conda-forge/nlohmann_json.svg | 1 + .../badge/tiny-repos/nlohmann-json.svg | 1 + .../conancenter/nlohmann-json.svg | 1 + .../homebrew/nlohmann-json.svg | 1 + .../macports/nlohmann-json.svg | 1 + .../msys2_clang64/nlohmann-json.svg | 1 + .../msys2_clangarm64/nlohmann-json.svg | 1 + .../msys2_mingw/nlohmann-json.svg | 1 + .../msys2_ucrt64/nlohmann-json.svg | 1 + .../version-for-repo/spack/nlohmann-json.svg | 1 + .../version-for-repo/vcpkg/nlohmann-json.svg | 1 + .../badge/vertical-allrepos/nlohmann-json.svg | 1 + .../unpkg.com/mermaid@11/dist/mermaid.min.js | 2314 +++++++++++++++++ ...8-8f5ba396-e287-11e7-9de7-8bc7482ac23c.png | Bin 0 -> 30561 bytes assets/javascripts/bundle.88dd0f4e.min.js | 2 +- community/code_of_conduct/index.html | 1 + community/contribution_guidelines/index.html | 8 + community/governance/index.html | 1 + community/index.html | 1 + community/quality_assurance/index.html | 525 ++++ community/security_policy/index.html | 1 + css/custom.css | 6 +- ...nn_define_derived_type_intrusive_macro.cpp | 37 + ...define_derived_type_intrusive_macro.output | 6 + examples/parse__iterator_pair.link | 1 + examples/parse__pointers.link | 1 + features/arbitrary_types/index.html | 12 +- features/assertions/index.html | 8 +- features/binary_formats/bjdata/index.html | 8 +- features/binary_formats/bson/index.html | 6 +- features/binary_formats/cbor/index.html | 6 +- features/binary_formats/index.html | 2 +- .../binary_formats/messagepack/index.html | 6 +- features/binary_formats/ubjson/index.html | 6 +- features/binary_values/index.html | 28 +- features/comments/index.html | 4 +- .../element_access/checked_access/index.html | 6 +- .../element_access/default_value/index.html | 4 +- features/element_access/index.html | 2 +- .../unchecked_access/index.html | 10 +- features/enum_conversion/index.html | 4 +- features/iterators/index.html | 12 +- features/json_patch/index.html | 8 +- features/json_pointer/index.html | 10 +- features/macros/index.html | 2 +- features/merge_patch/index.html | 4 +- features/namespace/index.html | 6 +- features/object_order/index.html | 8 +- features/parsing/index.html | 2 +- features/parsing/json_lines/index.html | 6 +- features/parsing/parse_exceptions/index.html | 8 +- features/parsing/parser_callbacks/index.html | 6 +- features/parsing/sax_interface/index.html | 4 +- features/types/index.html | 10 +- features/types/number_handling/index.html | 14 +- home/architecture/index.html | 55 + home/code_of_conduct/index.html | 15 +- home/customers/index.html | 2 +- home/design_goals/index.html | 2 +- home/exceptions/index.html | 107 +- home/faq/index.html | 10 +- home/license/index.html | 2 +- home/releases/index.html | 6 +- home/sponsors/index.html | 2 +- images/customers.png | Bin 1184114 -> 1014336 bytes images/package_managers/CPM.png | Bin 0 -> 15910 bytes images/package_managers/bazel.svg | 11 + images/package_managers/conan.svg | 16 + images/package_managers/conda.svg | 1 + images/package_managers/homebrew.svg | 22 + images/package_managers/macports.svg | 81 + images/package_managers/meson.svg | 2 + images/package_managers/nuget.svg | 21 + images/package_managers/spack.svg | 61 + images/package_managers/swift.svg | 1 + images/package_managers/vcpkg.png | Bin 0 -> 11393 bytes images/package_managers/xmake.svg | 60 + index.html | 2 +- integration/cmake/index.html | 8 +- integration/conda/example.cpp | 10 + integration/index.html | 4 +- integration/migration_guide/index.html | 8 +- integration/package_managers/index.html | 70 +- integration/pkg-config/index.html | 4 +- integration/xmake/example.cpp | 10 + integration/xmake/xmake.lua | 8 + search/search_index.json | 2 +- sitemap.xml | 488 ++-- sitemap.xml.gz | Bin 1645 -> 1726 bytes 330 files changed, 5398 insertions(+), 1012 deletions(-) create mode 100644 api/basic_json/end_pos/index.html create mode 100644 api/basic_json/start_pos/index.html create mode 100644 assets/external/149753425.v2.pressablecdn.com/wp-content/uploads/2009/06/OSIApproved_100X125.png create mode 100644 assets/external/bestpractices.coreinfrastructure.org/assets/questions_page_badge-17b338c0e8528d695d8676e23f39f17ca2b89bb88176370803ee69aeebcb5be4.png create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f41b.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4a5.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4c8.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4dd.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f512.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f525.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f527.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f528.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f69a.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f6a8.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a1.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2705.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/270f.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2728.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2795.svg create mode 100644 assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2b06.svg create mode 100644 assets/external/cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.39674748.js create mode 100644 assets/external/cloud.githubusercontent.com/assets/159488/22399173/aebe8f7a-e597-11e6-930f-7494ee615827.png create mode 100644 assets/external/cloud.githubusercontent.com/assets/159488/22399181/d4d60d32-e597-11e6-8dcb-825abcf9ac2a.png create mode 100644 assets/external/fonts.googleapis.com/css.61a430c9.css create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszgMgo-8.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2 create mode 100644 assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2 create mode 100644 assets/external/img.shields.io/cocoapods/v/nlohmann_json.svg create mode 100644 assets/external/img.shields.io/conda/v/conda-forge/nlohmann_json.svg create mode 100644 assets/external/repology.org/badge/tiny-repos/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/conancenter/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/homebrew/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/macports/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/msys2_clang64/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/msys2_clangarm64/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/msys2_mingw/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/msys2_ucrt64/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/spack/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/version-for-repo/vcpkg/nlohmann-json.svg create mode 100644 assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg create mode 100644 assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js create mode 100644 assets/external/user-images.githubusercontent.com/159488/34072418-8f5ba396-e287-11e7-9de7-8bc7482ac23c.png create mode 100644 community/code_of_conduct/index.html create mode 100644 community/contribution_guidelines/index.html create mode 100644 community/governance/index.html create mode 100644 community/index.html create mode 100644 community/quality_assurance/index.html create mode 100644 community/security_policy/index.html create mode 100644 examples/nlohmann_define_derived_type_intrusive_macro.cpp create mode 100644 examples/nlohmann_define_derived_type_intrusive_macro.output create mode 100644 examples/parse__iterator_pair.link create mode 100644 examples/parse__pointers.link create mode 100644 home/architecture/index.html create mode 100644 images/package_managers/CPM.png create mode 100644 images/package_managers/bazel.svg create mode 100644 images/package_managers/conan.svg create mode 100644 images/package_managers/conda.svg create mode 100644 images/package_managers/homebrew.svg create mode 100644 images/package_managers/macports.svg create mode 100644 images/package_managers/meson.svg create mode 100644 images/package_managers/nuget.svg create mode 100644 images/package_managers/spack.svg create mode 100644 images/package_managers/swift.svg create mode 100644 images/package_managers/vcpkg.png create mode 100644 images/package_managers/xmake.svg create mode 100644 integration/conda/example.cpp create mode 100644 integration/xmake/example.cpp create mode 100644 integration/xmake/xmake.lua diff --git a/404.html b/404.html index 300373962..3948a0dfe 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ - JSON for Modern C++

404 - Not found

\ No newline at end of file + JSON for Modern C++

404 - Not found

\ No newline at end of file diff --git a/api/adl_serializer/from_json/index.html b/api/adl_serializer/from_json/index.html index b421168dd..3f2a86c61 100644 --- a/api/adl_serializer/from_json/index.html +++ b/api/adl_serializer/from_json/index.html @@ -1,4 +1,4 @@ - from_json - JSON for Modern C++
Skip to content

nlohmann::adl_serializer::from_json

// (1)
+ from_json - JSON for Modern C++      

nlohmann::adl_serializer::from_json

// (1)
 template<typename BasicJsonType, typename TargetType = ValueType>
 static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
     noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
@@ -9,7 +9,7 @@
 static auto from_json(BasicJsonType && j) noexcept(
 noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))
 -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))
-

This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

  1. This function is chosen for default-constructible value types.
  2. This function is chosen for value types which are not default-constructible.

Parameters

j (in)
JSON value to read from
val (out)
value to write to

Return value

Copy of the JSON value, converted to ValueType

Examples

Example: (1) Default-constructible type

The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

#include <iostream>
+

This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

  1. This function is chosen for default-constructible value types.
  2. This function is chosen for value types which are not default-constructible.

Parameters

j (in)
JSON value to read from
val (out)
value to write to

Return value

Copy of the JSON value, converted to ValueType

Examples

Example: (1) Default-constructible type

The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -101,4 +101,4 @@
     std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl;
 }
 

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/adl_serializer/index.html b/api/adl_serializer/index.html index dc48a16bb..da8c0a72f 100644 --- a/api/adl_serializer/index.html +++ b/api/adl_serializer/index.html @@ -1,6 +1,6 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::adl_serializer

template<typename, typename>
+ Overview - JSON for Modern C++      

nlohmann::adl_serializer

template<typename, typename>
 struct adl_serializer;
-

Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

It is implemented similar to

template<typename ValueType>
+

Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

It is implemented similar to

template<typename ValueType>
 struct adl_serializer {
     template<typename BasicJsonType>
     static void to_json(BasicJsonType& j, const T& value) {
@@ -12,4 +12,4 @@
         // same thing, but with the "from_json" method
     }
 };
-

Member functions

  • from_json - convert a JSON value to any value type
  • to_json - convert any value type to a JSON value

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

Member functions

  • from_json - convert a JSON value to any value type
  • to_json - convert any value type to a JSON value

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/adl_serializer/to_json/index.html b/api/adl_serializer/to_json/index.html index 5fc059680..0c89f2570 100644 --- a/api/adl_serializer/to_json/index.html +++ b/api/adl_serializer/to_json/index.html @@ -1,8 +1,8 @@ - to_json - JSON for Modern C++
Skip to content

nlohmann::adl_serializer::to_json

template<typename BasicJsonType, typename TargetType = ValueType>
+ to_json - JSON for Modern C++      

nlohmann::adl_serializer::to_json

template<typename BasicJsonType, typename TargetType = ValueType>
 static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
     noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
 -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
-

This function is usually called by the constructors of the basic_json class.

Parameters

j (out)
JSON value to write to
val (in)
value to read from

Examples

Example

The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

#include <iostream>
+

This function is usually called by the constructors of the basic_json class.

Parameters

j (out)
JSON value to write to
val (in)
value to read from

Examples

Example

The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -35,4 +35,4 @@
     std::cout << j << std::endl;
 }
 

Output:

{"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
-

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/basic_json/accept/index.html b/api/basic_json/accept/index.html index 2ab7558e1..776f8a2b3 100644 --- a/api/basic_json/accept/index.html +++ b/api/basic_json/accept/index.html @@ -1,4 +1,4 @@ - accept - JSON for Modern C++
Skip to content

nlohmann::basic_json::accept

// (1)
+ accept - JSON for Modern C++      

nlohmann::basic_json::accept

// (1)
 template<typename InputType>
 static bool accept(InputType&& i,
                    const bool ignore_comments = false);
@@ -7,7 +7,7 @@
 template<typename IteratorType>
 static bool accept(IteratorType first, IteratorType last,
                    const bool ignore_comments = false);
-

Checks whether the input is valid JSON.

  1. Reads from a compatible input.
  2. Reads from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

Unlike the parse function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer (throws if null)
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters (throws if null)
  • a std::string
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType

a compatible iterator type, for instance.

  • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
  • a pair of pointers such as ptr and ptr + len

Parameters

i (in)
Input to parse from.
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

Whether the input is valid JSON.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Example

The example below demonstrates the accept() function reading from a string.

#include <iostream>
+

Checks whether the input is valid JSON.

  1. Reads from a compatible input.
  2. Reads from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer (throws if null)
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters (throws if null)
  • a std::string
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType

a compatible iterator type, for instance.

  • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
  • a pair of pointers such as ptr and ptr + len

Parameters

i (in)
Input to parse from.
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

Whether the input is valid JSON.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Example

The example below demonstrates the accept() function reading from a string.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -34,4 +34,4 @@
               << json::accept(invalid_text) << '\n';
 }
 

Output:

true false
-

See also

  • parse - deserialize from a compatible input
  • operator>> - deserialize from stream

Version history

  • Added in version 3.0.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

  • parse - deserialize from a compatible input
  • operator>> - deserialize from stream

Version history

  • Added in version 3.0.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

Deprecation

Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/array/index.html b/api/basic_json/array/index.html index 562219acf..6f5272144 100644 --- a/api/basic_json/array/index.html +++ b/api/basic_json/array/index.html @@ -1,5 +1,5 @@ - array - JSON for Modern C++
Skip to content

nlohmann::basic_json::array

static basic_json array(initializer_list_t init = {});
-

Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

Parameters

init (in)
initializer list with JSON values to create an array from (optional)

Return value

JSON array value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of init.

Notes

This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

  1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
  2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object

Examples

Example

The following code shows an example for the array function.

#include <iostream>
+ array - JSON for Modern C++      

nlohmann::basic_json::array

static basic_json array(initializer_list_t init = {});
+

Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

Parameters

init (in)
initializer list with JSON values to create an array from (optional)

Return value

JSON array value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of init.

Notes

This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

  1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
  2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object

Examples

Example

The following code shows an example for the array function.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -22,4 +22,4 @@
 []
 [1,2,3,4]
 [["one",1],["two",2]]
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/array_t/index.html b/api/basic_json/array_t/index.html index a48f67a79..547d3fb20 100644 --- a/api/basic_json/array_t/index.html +++ b/api/basic_json/array_t/index.html @@ -1,9 +1,9 @@ - array_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::array_t

using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
-

The type used to store JSON arrays.

RFC 8259 describes JSON arrays as follows:

An array is an ordered sequence of zero or more values.

To store objects in C++, a type is defined by the template parameters explained below.

Template parameters

ArrayType
container type to store arrays (e.g., std::vector or std::list)
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

std::vector<
+ array_t - JSON for Modern C++      

nlohmann::basic_json::array_t

using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
+

The type used to store JSON arrays.

RFC 8259 describes JSON arrays as follows:

An array is an ordered sequence of zero or more values.

To store objects in C++, a type is defined by the template parameters explained below.

Template parameters

ArrayType
container type to store arrays (e.g., std::vector or std::list)
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

std::vector<
   basic_json, // value_type
   std::allocator<basic_json> // allocator_type
 >
-

Limits

RFC 8259 specifies:

An implementation may set limits on the maximum depth of nesting.

In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

Storage

Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

Examples

Example

The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

#include <iostream>
+

Limits

RFC 8259 specifies:

An implementation may set limits on the maximum depth of nesting.

In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

Storage

Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

Examples

Example

The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -14,4 +14,4 @@
     std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/at/index.html b/api/basic_json/at/index.html index b258071b0..2017b7dc7 100644 --- a/api/basic_json/at/index.html +++ b/api/basic_json/at/index.html @@ -1,4 +1,4 @@ - at - JSON for Modern C++
Skip to content

nlohmann::basic_json::at

// (1)
+ at - JSON for Modern C++      

nlohmann::basic_json::at

// (1)
 reference at(size_type idx);
 const_reference at(size_type idx) const;
 
@@ -15,7 +15,7 @@
 // (4)
 reference at(const json_pointer& ptr);
 const_reference at(const json_pointer& ptr) const;
-
  1. Returns a reference to the array element at specified location idx, with bounds checking.
  2. Returns a reference to the object element with specified key key, with bounds checking.
  3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

idx (in)
index of the element to access
key (in)
object key of the elements to access
ptr (in)
JSON pointer to the desired element

Return value

  1. reference to the element at index idx
  2. reference to the element at key key
  3. reference to the element at key key
  4. reference to the element pointed to by ptr

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
    • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
  2. The function can throw the following exceptions:
    • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
    • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
  3. See 2.
  4. The function can throw the following exceptions:
    • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
    • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
    • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
    • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
    • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
    • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.

Complexity

  1. Constant.
  2. Logarithmic in the size of the container.
  3. Logarithmic in the size of the container.
  4. Logarithmic in the size of the container.

Examples

Example: (1) access specified array element with bounds checking

The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
+
  1. Returns a reference to the array element at specified location idx, with bounds checking.
  2. Returns a reference to the object element with specified key key, with bounds checking.
  3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

idx (in)
index of the element to access
key (in)
object key of the elements to access
ptr (in)
JSON pointer to the desired element

Return value

  1. reference to the element at index idx
  2. reference to the element at key key
  3. reference to the element at key key
  4. reference to the element pointed to by ptr

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
    • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
  2. The function can throw the following exceptions:
    • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
    • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
  3. See 2.
  4. The function can throw the following exceptions:
    • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
    • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
    • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
    • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
    • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
    • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.

Complexity

  1. Constant.
  2. Logarithmic in the size of the container.
  3. Logarithmic in the size of the container.
  4. Logarithmic in the size of the container.

Examples

Example: (1) access specified array element with bounds checking

The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -294,7 +294,7 @@
 

Output:

"il brutto"
 [json.exception.type_error.304] cannot use at() with string
 out of range
-
Example: (4) access specified element via JSON Pointer

The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
+
Example: (4) access specified element via JSON Pointer

The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -409,7 +409,7 @@
 [json.exception.out_of_range.402] array index '-' (2) is out of range
 [json.exception.out_of_range.403] key 'foo' not found
 [json.exception.out_of_range.404] unresolved reference token 'foo'
-
Example: (4) access specified element via JSON Pointer

The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
+
Example: (4) access specified element via JSON Pointer

The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -498,4 +498,4 @@
 [json.exception.out_of_range.402] array index '-' (2) is out of range
 [json.exception.out_of_range.403] key 'foo' not found
 [json.exception.out_of_range.404] unresolved reference token 'foo'
-

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/back/index.html b/api/basic_json/back/index.html index 513b87771..3ddfad2b4 100644 --- a/api/basic_json/back/index.html +++ b/api/basic_json/back/index.html @@ -1,10 +1,10 @@ - back - JSON for Modern C++
Skip to content

nlohmann::basic_json::back

reference back();
+ back - JSON for Modern C++      

nlohmann::basic_json::back

reference back();
 
 const_reference back() const;
-

Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

auto tmp = c.end();
+

Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

auto tmp = c.end();
 --tmp;
 return *tmp;
-

Return value

In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

If the JSON value is null, exception invalid_iterator.214 is thrown.

Complexity

Constant.

Notes

Precondition

The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

Examples

Example

The following code shows an example for back().

#include <iostream>
+

Return value

In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

If the JSON value is null, exception invalid_iterator.214 is thrown.

Complexity

Constant.

Notes

Precondition

The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

Examples

Example

The following code shows an example for back().

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -49,4 +49,4 @@
 16
 "Hello, world"
 [json.exception.invalid_iterator.214] cannot get value
-

See also

  • front to access the first element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file +

See also

  • front to access the first element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/basic_json/index.html b/api/basic_json/basic_json/index.html index 8ea3e3fd1..977f7805c 100644 --- a/api/basic_json/basic_json/index.html +++ b/api/basic_json/basic_json/index.html @@ -1,4 +1,4 @@ - (Constructor) - JSON for Modern C++
Skip to content

nlohmann::basic_json::basic_json

// (1)
+ (Constructor) - JSON for Modern C++      

nlohmann::basic_json::basic_json

// (1)
 basic_json(const value_t v);
 
 // (2)
@@ -31,7 +31,7 @@
 
 // (9)
 basic_json(basic_json&& other) noexcept;
-
  1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

    Value type initial value
    null null
    boolean false
    string ""
    number 0
    object {}
    array []
    binary empty array

    The postcondition of this constructor can be restored by calling clear().

  2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

  3. This is a "catch all" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

    Template type CompatibleType includes, but is not limited to, the following types:

    • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
    • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
    • strings: string_t, string literals, and all compatible string containers can be used.
    • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
    • boolean: boolean_t / bool can be used.
    • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

    See the examples below.

  4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

    The constructor tries to convert the internal m_value of the parameter.

  5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

    1. If the list is empty, an empty JSON object value {} is created.
    2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
    3. In all other cases, an array is created.

    The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

    1. The empty initializer list is written as {} which is exactly an empty JSON object.
    2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
    3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

    With the rules described above, the following JSON values cannot be expressed by an initializer list:

    • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
    • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

    Function array() and object() force array and object creation from initializer lists, respectively.

  6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

  7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

    • In case of a null type, invalid_iterator.206 is thrown.
    • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
    • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
  8. Creates a copy of a given JSON value.

  9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It "steals" the resources from other and leaves it as JSON null value.

Template parameters

CompatibleType

a type such that:

  • CompatibleType is not derived from std::istream,
  • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
  • CompatibleType is not a different basic_json type (i.e. with different template arguments)
  • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
  • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
BasicJsonType:

a type such that:

  • BasicJsonType is a basic_json type.
  • BasicJsonType has different template arguments than basic_json_t.
U:
uncvref_t<CompatibleType>

Parameters

v (in)
the type of the value to create
val (in)
the value to be forwarded to the respective constructor
init (in)
initializer list with JSON values
type_deduction (in)
internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t).
manual_type (in)
internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect
cnt (in)
the number of JSON copies of val to create
first (in)
begin of the range to copy from (included)
last (in)
end of the range to copy from (excluded)
other (in)
the JSON value to copy/move

Exception safety

  1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  2. No-throw guarantee: this constructor never throws exceptions.
  3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
  4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
  5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  9. No-throw guarantee: this constructor never throws exceptions.

Exceptions

  1. (none)
  2. The function does not throw exceptions.
  3. (none)
  4. (none)
  5. The function can throw the following exceptions:
    • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
  6. (none)
  7. The function can throw the following exceptions:
    • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
    • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
    • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
  8. (none)
  9. The function does not throw exceptions.

Complexity

  1. Constant.
  2. Constant.
  3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
  4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
  5. Linear in the size of the initializer list init.
  6. Linear in cnt.
  7. Linear in distance between first and last.
  8. Linear in the size of other.
  9. Constant.

Notes

  • Overload 5:

    Empty initializer list

    When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

  • Overload 7:

    Preconditions

    • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
    • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

    Runtime assertion

    A precondition is enforced with a runtime assertion.

  • Overload 8:

    Postcondition

    *this == other

  • Overload 9:

    Postconditions

    • `*this has the same value as other before the call.
    • other is a JSON null value

Examples

Example: (1) create an empty value with a given type

The following code shows the constructor for different value_t values.

#include <iostream>
+
  1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

    Value type initial value
    null null
    boolean false
    string ""
    number 0
    object {}
    array []
    binary empty array

    The postcondition of this constructor can be restored by calling clear().

  2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

  3. This is a "catch all" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

    Template type CompatibleType includes, but is not limited to, the following types:

    • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
    • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
    • strings: string_t, string literals, and all compatible string containers can be used.
    • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
    • boolean: boolean_t / bool can be used.
    • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

    See the examples below.

  4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

    The constructor tries to convert the internal m_value of the parameter.

  5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

    1. If the list is empty, an empty JSON object value {} is created.
    2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
    3. In all other cases, an array is created.

    The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

    1. The empty initializer list is written as {} which is exactly an empty JSON object.
    2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
    3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

    With the rules described above, the following JSON values cannot be expressed by an initializer list:

    • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
    • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

    Function array() and object() force array and object creation from initializer lists, respectively.

  6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

  7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

    • In case of a null type, invalid_iterator.206 is thrown.
    • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
    • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
  8. Creates a copy of a given JSON value.

  9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It "steals" the resources from other and leaves it as JSON null value.

Template parameters

CompatibleType

a type such that:

  • CompatibleType is not derived from std::istream,
  • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
  • CompatibleType is not a different basic_json type (i.e. with different template arguments)
  • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
  • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
BasicJsonType:

a type such that:

  • BasicJsonType is a basic_json type.
  • BasicJsonType has different template arguments than basic_json_t.
U:
uncvref_t<CompatibleType>

Parameters

v (in)
the type of the value to create
val (in)
the value to be forwarded to the respective constructor
init (in)
initializer list with JSON values
type_deduction (in)
internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t).
manual_type (in)
internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect
cnt (in)
the number of JSON copies of val to create
first (in)
begin of the range to copy from (included)
last (in)
end of the range to copy from (excluded)
other (in)
the JSON value to copy/move

Exception safety

  1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  2. No-throw guarantee: this constructor never throws exceptions.
  3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
  4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
  5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
  9. No-throw guarantee: this constructor never throws exceptions.

Exceptions

  1. (none)
  2. The function does not throw exceptions.
  3. (none)
  4. (none)
  5. The function can throw the following exceptions:
    • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
  6. (none)
  7. The function can throw the following exceptions:
    • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
    • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
    • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
  8. (none)
  9. The function does not throw exceptions.

Complexity

  1. Constant.
  2. Constant.
  3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
  4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
  5. Linear in the size of the initializer list init.
  6. Linear in cnt.
  7. Linear in distance between first and last.
  8. Linear in the size of other.
  9. Constant.

Notes

  • Overload 5:

    Empty initializer list

    When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

  • Overload 7:

    Preconditions

    • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
    • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

    Runtime assertion

    A precondition is enforced with a runtime assertion.

  • Overload 8:

    Postcondition

    *this == other

  • Overload 9:

    Postconditions

    • `*this has the same value as other before the call.
    • other is a JSON null value

Examples

Example: (1) create an empty value with a given type

The following code shows the constructor for different value_t values.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -81,7 +81,7 @@
 }
 

Output:

null
 null
-
Example: (3) create a JSON value from compatible types

The following code shows the constructor with several compatible types.

#include <iostream>
+
Example: (3) create a JSON value from compatible types

The following code shows the constructor with several compatible types.

#include <iostream>
 #include <deque>
 #include <list>
 #include <forward_list>
@@ -334,7 +334,7 @@
 
 true
 false
-

Note the output is platform-dependent.

Example: (5) create a container (array or object) from an initializer list

The example below shows how JSON values are created from initializer lists.

#include <iostream>
+

Note the output is platform-dependent.

Example: (5) create a container (array or object) from an initializer list

The example below shows how JSON values are created from initializer lists.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -381,7 +381,7 @@
 

Output:

[]
 ["Hello"]
 ["Hello","Hello","Hello","Hello","Hello"]
-
Example: (7) construct a JSON container given an iterator range

The example below shows several ways to create JSON values by specifying a subrange with iterators.

#include <iostream>
+
Example: (7) construct a JSON container given an iterator range

The example below shows several ways to create JSON values by specifying a subrange with iterators.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -455,4 +455,4 @@
 }
 

Output:

null
 23
-

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.1.0.
  4. Since version 3.2.0.
  5. Since version 1.0.0.
  6. Since version 1.0.0.
  7. Since version 1.0.0.
  8. Since version 1.0.0.
  9. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/begin/index.html b/api/basic_json/begin/index.html index 02badc947..697521212 100644 --- a/api/basic_json/begin/index.html +++ b/api/basic_json/begin/index.html @@ -1,4 +1,4 @@ - begin - JSON for Modern C++
Skip to content

nlohmann::basic_json::begin

iterator begin() noexcept;
+ begin - JSON for Modern C++      

nlohmann::basic_json::begin

iterator begin() noexcept;
 const_iterator begin() const noexcept;
 

Returns an iterator to the first element.

Illustration from cppreference.com

Return value

iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for begin().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -17,4 +17,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/binary/index.html b/api/basic_json/binary/index.html index eae11422e..16330f92a 100644 --- a/api/basic_json/binary/index.html +++ b/api/basic_json/binary/index.html @@ -1,4 +1,4 @@ - binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::binary

// (1)
+ binary - JSON for Modern C++      

nlohmann::basic_json::binary

// (1)
 static basic_json binary(const typename binary_t::container_type& init);
 static basic_json binary(typename binary_t::container_type&& init);
 
@@ -7,7 +7,7 @@
                          std::uint8_t subtype);
 static basic_json binary(typename binary_t::container_type&& init,
                          std::uint8_t subtype);
-
  1. Creates a JSON binary array value from a given binary container.
  2. Creates a JSON binary array value from a given binary container with subtype.

Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

Parameters

init (in)
container containing bytes to use as binary type
subtype (in)
subtype to use in CBOR, MessagePack, and BSON

Return value

JSON binary array value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of init; constant for typename binary_t::container_type&& init versions.

Notes

Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

Examples

Example

The following code shows how to create a binary value.

#include <iostream>
+
  1. Creates a JSON binary array value from a given binary container.
  2. Creates a JSON binary array value from a given binary container with subtype.

Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

Parameters

init (in)
container containing bytes to use as binary type
subtype (in)
subtype to use in CBOR, MessagePack, and BSON

Return value

JSON binary array value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of init; constant for typename binary_t::container_type&& init versions.

Notes

Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

Examples

Example

The following code shows how to create a binary value.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -24,4 +24,4 @@
     std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
 }
 

Output:

type: binary, subtype: 42
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/binary_t/index.html b/api/basic_json/binary_t/index.html index 396949322..0e5ffd4a6 100644 --- a/api/basic_json/binary_t/index.html +++ b/api/basic_json/binary_t/index.html @@ -1,5 +1,5 @@ - binary_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::binary_t

using binary_t = byte_container_with_subtype<BinaryType>;
-

This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

CBOR's RFC 7049 describes this type as:

Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

MessagePack's documentation on the bin type family describes this type as:

Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

Template parameters

BinaryType
container type to store arrays

Notes

Default type

The default values for BinaryType is std::vector<std::uint8_t>.

Storage

Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

Notes on subtypes

  • CBOR

    • Binary values are represented as byte strings. Subtypes are written as tags.
  • MessagePack

    • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
    • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
  • BSON

    • If a subtype is given, it is used and added as unsigned 8-bit integer.
    • If no subtype is given, the generic binary subtype 0x00 is used.

Examples

Example

The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

#include <iostream>
+ binary_t - JSON for Modern C++      

nlohmann::basic_json::binary_t

using binary_t = byte_container_with_subtype<BinaryType>;
+

This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

CBOR's RFC 7049 describes this type as:

Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

MessagePack's documentation on the bin type family describes this type as:

Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

Template parameters

BinaryType
container type to store arrays

Notes

Default type

The default values for BinaryType is std::vector<std::uint8_t>.

Storage

Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

Notes on subtypes

  • CBOR

    • Binary values are represented as byte strings. Subtypes are written as tags.
  • MessagePack

    • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
    • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
  • BSON

    • If a subtype is given, it is used and added as unsigned 8-bit integer.
    • If no subtype is given, the generic binary subtype 0x00 is used.

Examples

Example

The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;
 }
 

Output:

true
-

See also

Version history

  • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
\ No newline at end of file diff --git a/api/basic_json/boolean_t/index.html b/api/basic_json/boolean_t/index.html index 0f484988b..2ee11d680 100644 --- a/api/basic_json/boolean_t/index.html +++ b/api/basic_json/boolean_t/index.html @@ -1,5 +1,5 @@ - boolean_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::boolean_t

using boolean_t = BooleanType;
-

The type used to store JSON booleans.

RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

Notes

Default type

With the default values for BooleanType (bool), the default value for boolean_t is bool.

Storage

Boolean values are stored directly inside a basic_json type.

Examples

Example

The following code shows that boolean_t is by default, a typedef to bool.

#include <iostream>
+ boolean_t - JSON for Modern C++      

nlohmann::basic_json::boolean_t

using boolean_t = BooleanType;
+

The type used to store JSON booleans.

RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

Notes

Default type

With the default values for BooleanType (bool), the default value for boolean_t is bool.

Storage

Boolean values are stored directly inside a basic_json type.

Examples

Example

The following code shows that boolean_t is by default, a typedef to bool.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/cbegin/index.html b/api/basic_json/cbegin/index.html index 9e21092ca..975721ec5 100644 --- a/api/basic_json/cbegin/index.html +++ b/api/basic_json/cbegin/index.html @@ -1,4 +1,4 @@ - cbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::cbegin

const_iterator cbegin() const noexcept;
+ cbegin - JSON for Modern C++      

nlohmann::basic_json::cbegin

const_iterator cbegin() const noexcept;
 

Returns an iterator to the first element.

Illustration from cppreference.com

Return value

iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for cbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -16,4 +16,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/cbor_tag_handler_t/index.html b/api/basic_json/cbor_tag_handler_t/index.html index 1d3cbce5b..e0592e555 100644 --- a/api/basic_json/cbor_tag_handler_t/index.html +++ b/api/basic_json/cbor_tag_handler_t/index.html @@ -1,4 +1,4 @@ - cbor_tag_handler_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::cbor_tag_handler_t

enum class cbor_tag_handler_t
+ cbor_tag_handler_t - JSON for Modern C++      

nlohmann::basic_json::cbor_tag_handler_t

enum class cbor_tag_handler_t
 {
     error,
     ignore,
@@ -35,4 +35,4 @@
 

Output:

[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8
 {"bytes":[202,254,186,190],"subtype":null}
 {"bytes":[202,254,186,190],"subtype":66}
-

Version history

  • Added in version 3.9.0. Added value store in 3.10.0.
\ No newline at end of file +

Version history

  • Added in version 3.9.0. Added value store in 3.10.0.
\ No newline at end of file diff --git a/api/basic_json/cend/index.html b/api/basic_json/cend/index.html index bdc3e9917..7e63f3269 100644 --- a/api/basic_json/cend/index.html +++ b/api/basic_json/cend/index.html @@ -1,4 +1,4 @@ - cend - JSON for Modern C++
Skip to content

nlohmann::basic_json::cend

const_iterator cend() const noexcept;
+ cend - JSON for Modern C++      

nlohmann::basic_json::cend

const_iterator cend() const noexcept;
 

Returns an iterator to one past the last element.

Illustration from cppreference.com

Return value

iterator one past the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for cend().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -19,4 +19,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/clear/index.html b/api/basic_json/clear/index.html index c9de6ec3d..da59585ab 100644 --- a/api/basic_json/clear/index.html +++ b/api/basic_json/clear/index.html @@ -1,6 +1,6 @@ - clear - JSON for Modern C++
Skip to content

nlohmann::basic_json::clear

void clear() noexcept;
-

Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

Value type initial value
null null
boolean false
string ""
number 0
binary An empty byte vector
object {}
array []

Has the same effect as calling

*this = basic_json(type());
-

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear in the size of the JSON value.

Notes

All iterators, pointers and references related to this container are invalidated.

Examples

Example

The example below shows the effect of clear() to different JSON types.

#include <iostream>
+ clear - JSON for Modern C++      

nlohmann::basic_json::clear

void clear() noexcept;
+

Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

Value type initial value
null null
boolean false
string ""
number 0
binary An empty byte vector
object {}
array []

Has the same effect as calling

*this = basic_json(type());
+

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear in the size of the JSON value.

Notes

All iterators, pointers and references related to this container are invalidated.

Examples

Example

The example below shows the effect of clear() to different JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -41,4 +41,4 @@
 {}
 []
 ""
-

Version history

  • Added in version 1.0.0.
  • Added support for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added support for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/contains/index.html b/api/basic_json/contains/index.html index aff325696..ad7105cfa 100644 --- a/api/basic_json/contains/index.html +++ b/api/basic_json/contains/index.html @@ -1,4 +1,4 @@ - contains - JSON for Modern C++
Skip to content

nlohmann::basic_json::contains

// (1)
+ contains - JSON for Modern C++      

nlohmann::basic_json::contains

// (1)
 bool contains(const typename object_t::key_type& key) const;
 
 // (2)
@@ -7,7 +7,7 @@
 
 // (3)
 bool contains(const json_pointer& ptr) const;
-
  1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value to check its existence.
ptr (in)
JSON pointer to check its existence.

Return value

  1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
  2. See 1.
  3. true if the JSON pointer can be resolved to a stored value, false otherwise.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function does not throw exceptions.
  2. The function does not throw exceptions.
  3. The function can throw the following exceptions:

Complexity

Logarithmic in the size of the JSON object.

Notes

  • This method always returns false when executed on a JSON type that is not an object.
  • This method can be executed on any JSON value type.

Postconditions

If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

Examples

Example: (1) check with key

The example shows how contains() is used.

#include <iostream>
+
  1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value to check its existence.
ptr (in)
JSON pointer to check its existence.

Return value

  1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
  2. See 1.
  3. true if the JSON pointer can be resolved to a stored value, false otherwise.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function does not throw exceptions.
  2. The function does not throw exceptions.
  3. The function can throw the following exceptions:

Complexity

Logarithmic in the size of the JSON object.

Notes

  • This method always returns false when executed on a JSON type that is not an object.
  • This method can be executed on any JSON value type.

Postconditions

If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

Examples

Example: (1) check with key

The example shows how contains() is used.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -51,7 +51,7 @@
 

Output:

j_object contains 'key': true
 j_object contains 'another': false
 j_array contains 'key': false
-
Example: (3) check with JSON pointer

The example shows how contains() is used.

#include <iostream>
+
Example: (3) check with JSON pointer

The example shows how contains() is used.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -101,4 +101,4 @@
 false
 false
 false
-

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
  3. Added in version 3.7.0.
\ No newline at end of file diff --git a/api/basic_json/count/index.html b/api/basic_json/count/index.html index 90bb1d0f4..50c97d9db 100644 --- a/api/basic_json/count/index.html +++ b/api/basic_json/count/index.html @@ -1,10 +1,10 @@ - count - JSON for Modern C++
Skip to content

nlohmann::basic_json::count

// (1)
+ count - JSON for Modern C++      

nlohmann::basic_json::count

// (1)
 size_type count(const typename object_t::key_type& key) const;
 
 // (2)
 template<typename KeyType>
 size_type count(KeyType&& key) const;
-
  1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value of the element to count.

Return value

Number of elements with key key. If the JSON value is not an object, the return value will be 0.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Logarithmic in the size of the JSON object.

Notes

This method always returns 0 when executed on a JSON type that is not an object.

Examples

Example: (1) count number of elements

The example shows how count() is used.

#include <iostream>
+
  1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value of the element to count.

Return value

Number of elements with key key. If the JSON value is not an object, the return value will be 0.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Logarithmic in the size of the JSON object.

Notes

This method always returns 0 when executed on a JSON type that is not an object.

Examples

Example: (1) count number of elements

The example shows how count() is used.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -46,4 +46,4 @@
 }
 

Output:

number of elements with key "two": 1
 number of elements with key "three": 0
-

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/crbegin/index.html b/api/basic_json/crbegin/index.html index 941bd3e12..dd19b13de 100644 --- a/api/basic_json/crbegin/index.html +++ b/api/basic_json/crbegin/index.html @@ -1,4 +1,4 @@ - crbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::crbegin

const_reverse_iterator crbegin() const noexcept;
+ crbegin - JSON for Modern C++      

nlohmann::basic_json::crbegin

const_reverse_iterator crbegin() const noexcept;
 

Returns an iterator to the reverse-beginning; that is, the last element.

Illustration from cppreference.com

Return value

reverse iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for crbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -16,4 +16,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/crend/index.html b/api/basic_json/crend/index.html index c559d314b..1a7a194ef 100644 --- a/api/basic_json/crend/index.html +++ b/api/basic_json/crend/index.html @@ -1,4 +1,4 @@ - crend - JSON for Modern C++
Skip to content

nlohmann::basic_json::crend

const_reverse_iterator crend() const noexcept;
+ crend - JSON for Modern C++      

nlohmann::basic_json::crend

const_reverse_iterator crend() const noexcept;
 

Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

Illustration from cppreference.com

Return value

reverse iterator to the element following the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for eend().

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -19,4 +19,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/default_object_comparator_t/index.html b/api/basic_json/default_object_comparator_t/index.html index 873bbcd52..252bb4cda 100644 --- a/api/basic_json/default_object_comparator_t/index.html +++ b/api/basic_json/default_object_comparator_t/index.html @@ -1,4 +1,4 @@ - default_object_comparator_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::default_object_comparator_t

using default_object_comparator_t = std::less<StringType>;  // until C++14
+ default_object_comparator_t - JSON for Modern C++      

nlohmann::basic_json::default_object_comparator_t

using default_object_comparator_t = std::less<StringType>;  // until C++14
 
 using default_object_comparator_t = std::less<>;            // since C++14
 

The default comparator used by object_t.

Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

The actual comparator used depends on object_t and can be obtained via object_comparator_t.

Examples

Example

The example below demonstrates the default comparator.

#include <iostream>
@@ -14,4 +14,4 @@
 }
 

Output:

one < two : true
 three < four : false
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/diff/index.html b/api/basic_json/diff/index.html index abe44d7ac..b55b0d64b 100644 --- a/api/basic_json/diff/index.html +++ b/api/basic_json/diff/index.html @@ -1,7 +1,7 @@ - diff - JSON for Modern C++
Skip to content

nlohmann::basic_json::diff

static basic_json diff(const basic_json& source,
+ diff - JSON for Modern C++      

nlohmann::basic_json::diff

static basic_json diff(const basic_json& source,
                        const basic_json& target);
-

Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

For two JSON values source and target, the following code yields always true:

source.patch(diff(source, target)) == target;
-

Parameters

source (in)
JSON value to compare from
target (in)
JSON value to compare against

Return value

a JSON patch to convert the source to target

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the lengths of source and target.

Notes

Currently, only remove, add, and replace operations are generated.

Examples

Example

The following code shows how a JSON patch is created as a diff for two JSON values.

#include <iostream>
+

Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

For two JSON values source and target, the following code yields always true:

source.patch(diff(source, target)) == target;
+

Parameters

source (in)
JSON value to compare from
target (in)
JSON value to compare against

Return value

a JSON patch to convert the source to target

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the lengths of source and target.

Notes

Currently, only remove, add, and replace operations are generated.

Examples

Example

The following code shows how a JSON patch is created as a diff for two JSON values.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -63,4 +63,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/dump/index.html b/api/basic_json/dump/index.html index 6b0d9ce13..c8c1866d1 100644 --- a/api/basic_json/dump/index.html +++ b/api/basic_json/dump/index.html @@ -1,8 +1,8 @@ - dump - JSON for Modern C++
Skip to content

nlohmann::basic_json::dump

string_t dump(const int indent = -1,
+ dump - JSON for Modern C++      

nlohmann::basic_json::dump

string_t dump(const int indent = -1,
               const char indent_char = ' ',
               const bool ensure_ascii = false,
               const error_handler_t error_handler = error_handler_t::strict) const;
-

Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

Parameters

indent (in)
If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation.
indent_char (in)
The character to use for indentation if indent is greater than 0. The default is (space).
ensure_ascii (in)
If ensure_ascii is true, all non-ASCII characters in the output are escaped with \uXXXX sequences, and the result consists of ASCII characters only.
error_handler (in)
how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged)).

Return value

string containing the serialization of the JSON value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Exceptions

Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

Complexity

Linear.

Notes

Binary values are serialized as object containing two keys:

  • "bytes": an array of bytes as integers
  • "subtype": the subtype as integer or null if the binary has no subtype

Examples

Example

The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

#include <iostream>
+

Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

Parameters

indent (in)
If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation.
indent_char (in)
The character to use for indentation if indent is greater than 0. The default is (space).
ensure_ascii (in)
If ensure_ascii is true, all non-ASCII characters in the output are escaped with \uXXXX sequences, and the result consists of ASCII characters only.
error_handler (in)
how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged)).

Return value

string containing the serialization of the JSON value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Exceptions

Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

Complexity

Linear.

Notes

Binary values are serialized as object containing two keys:

  • "bytes": an array of bytes as integers
  • "subtype": the subtype as integer or null if the binary has no subtype

Examples

Example

The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -105,4 +105,4 @@
 [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9
 string with replaced invalid characters: "ä�ü"
 string with ignored invalid characters: "äü"
-

Version history

  • Added in version 1.0.0.
  • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
  • Error handlers added in version 3.4.0.
  • Serialization of binary values added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
  • Error handlers added in version 3.4.0.
  • Serialization of binary values added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/emplace/index.html b/api/basic_json/emplace/index.html index bd0d59542..4a1aa78d2 100644 --- a/api/basic_json/emplace/index.html +++ b/api/basic_json/emplace/index.html @@ -1,6 +1,6 @@ - emplace - JSON for Modern C++
Skip to content

nlohmann::basic_json::emplace

template<class... Args>
+ emplace - JSON for Modern C++      

nlohmann::basic_json::emplace

template<class... Args>
 std::pair<iterator, bool> emplace(Args&& ... args);
-

Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

Exceptions

Throws type_error.311 when called on a type other than JSON object or null; example: "cannot use emplace() with number"

Complexity

Logarithmic in the size of the container, O(log(size())).

Examples

Example

The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

#include <iostream>
+

Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

Exceptions

Throws type_error.311 when called on a type other than JSON object or null; example: "cannot use emplace() with number"

Complexity

Logarithmic in the size of the container, O(log(size())).

Examples

Example

The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -37,4 +37,4 @@
 3 true
 {"A":"a","B":"b"}
 "b" false
-

Version history

  • Since version 2.0.8.
\ No newline at end of file +

Version history

  • Since version 2.0.8.
\ No newline at end of file diff --git a/api/basic_json/emplace_back/index.html b/api/basic_json/emplace_back/index.html index 954274726..75e648e15 100644 --- a/api/basic_json/emplace_back/index.html +++ b/api/basic_json/emplace_back/index.html @@ -1,6 +1,6 @@ - emplace_back - JSON for Modern C++
Skip to content

nlohmann::basic_json::emplace_back

template<class... Args>
+ emplace_back - JSON for Modern C++      

nlohmann::basic_json::emplace_back

template<class... Args>
 reference emplace_back(Args&& ... args);
-

Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

reference to the inserted element

Exceptions

Throws type_error.311 when called on a type other than JSON array or null; example: "cannot use emplace_back() with number"

Complexity

Amortized constant.

Examples

Example

The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
+

Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

Template parameters

Args
compatible types to create a basic_json object

Iterator invalidation

By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

Parameters

args (in)
arguments to forward to a constructor of basic_json

Return value

reference to the inserted element

Exceptions

Throws type_error.311 when called on a type other than JSON array or null; example: "cannot use emplace_back() with number"

Complexity

Amortized constant.

Examples

Example

The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -28,4 +28,4 @@
 null
 [1,2,3,4,5,6]
 ["first",["second","second","second"]]
-

See also

Version history

  • Since version 2.0.8.
  • Returns reference since 3.7.0.
\ No newline at end of file +

See also

Version history

  • Since version 2.0.8.
  • Returns reference since 3.7.0.
\ No newline at end of file diff --git a/api/basic_json/empty/index.html b/api/basic_json/empty/index.html index a36a9f7f3..b0b2f4a17 100644 --- a/api/basic_json/empty/index.html +++ b/api/basic_json/empty/index.html @@ -1,9 +1,9 @@ - empty - JSON for Modern C++
Skip to content

nlohmann::basic_json::empty

bool empty() const noexcept;
-

Checks if a JSON value has no elements (i.e. whether its size() is 0).

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null true
boolean false
string false
number false
binary false
object result of function object_t::empty()
array result of function array_t::empty()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

Possible implementation

bool empty() const noexcept
+ empty - JSON for Modern C++      

nlohmann::basic_json::empty

bool empty() const noexcept;
+

Checks if a JSON value has no elements (i.e. whether its size() is 0).

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null true
boolean false
string false
number false
binary false
object result of function object_t::empty()
array result of function array_t::empty()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

Possible implementation

bool empty() const noexcept
 {
     return size() == 0;
 }
-

Notes

This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

Examples

Example

The following code uses empty() to check if a JSON object contains any elements.

#include <iostream>
+

Notes

This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

Examples

Example

The following code uses empty() to check if a JSON object contains any elements.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -42,4 +42,4 @@
 false
 true
 false
-

Version history

  • Added in version 1.0.0.
  • Extended to return false for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Extended to return false for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/end/index.html b/api/basic_json/end/index.html index 76dbb4ffe..50ddc4f19 100644 --- a/api/basic_json/end/index.html +++ b/api/basic_json/end/index.html @@ -1,4 +1,4 @@ - end - JSON for Modern C++
Skip to content

nlohmann::basic_json::end

iterator end() noexcept;
+ end - JSON for Modern C++      

nlohmann::basic_json::end

iterator end() noexcept;
 const_iterator end() const noexcept;
 

Returns an iterator to one past the last element.

Illustration from cppreference.com

Return value

iterator one past the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for end().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -20,4 +20,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/end_pos/index.html b/api/basic_json/end_pos/index.html new file mode 100644 index 000000000..1d1b430bb --- /dev/null +++ b/api/basic_json/end_pos/index.html @@ -0,0 +1,104 @@ + end_pos - JSON for Modern C++
Skip to content

nlohmann::basic_json::end_pos

#if JSON_DIAGNOSTIC_POSITIONS
+constexpr std::size_t end_pos() const noexcept;
+#endif
+

Returns the position immediately following the last character of the JSON string from which the value was parsed from.

JSON type return value
object position after the closing }
array position after the closing ]
string position after the closing "
number position after the last character
boolean position after e
null position after l

Return value

the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Note

The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

Invalidation

The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

Examples

Example
#include <iostream>
+
+#define JSON_DIAGNOSTIC_POSITIONS 1
+#include <nlohmann/json.hpp>
+
+using json = nlohmann::json;
+
+int main()
+{
+    std::string json_string = R"(
+    {
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+    )";
+    json j = json::parse(json_string);
+
+    std::cout << "Root diagnostic positions: \n";
+    std::cout << "\tstart_pos: " << j.start_pos() << '\n';
+    std::cout << "\tend_pos:" << j.end_pos() << "\n";
+    std::cout << "Original string: \n";
+    std::cout << "{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << "\n\n";
+
+    std::cout << "address diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"].start_pos(), j["address"].end_pos() - j["address"].start_pos()) << "\n\n";
+
+    std::cout << "street diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"]["street"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"]["street"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "\"Fake Street\"" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"]["street"].start_pos(), j["address"]["street"].end_pos() - j["address"]["street"].start_pos()) << "\n\n";
+
+    std::cout << "housenumber diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"]["housenumber"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"]["housenumber"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "1" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"]["housenumber"].start_pos(), j["address"]["housenumber"].end_pos() - j["address"]["housenumber"].start_pos()) << "\n\n";
+}
+

Output:

Root diagnostic positions: 
+    start_pos: 5
+    end_pos:109
+Original string: 
+{
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+Parsed string: 
+{
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+
+address diagnostic positions: 
+    start_pos:26
+    end_pos:103
+
+Original string: 
+{            "street": "Fake Street",
+            "housenumber": 1
+        }
+Parsed string: 
+{
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+
+street diagnostic positions: 
+    start_pos:50
+    end_pos:63
+
+Original string: 
+"Fake Street"
+Parsed string: 
+"Fake Street"
+
+housenumber diagnostic positions: 
+    start_pos:92
+    end_pos:93
+
+Original string: 
+1
+Parsed string: 
+1
+

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/erase/index.html b/api/basic_json/erase/index.html index 61c23941d..8680e0ef8 100644 --- a/api/basic_json/erase/index.html +++ b/api/basic_json/erase/index.html @@ -1,4 +1,4 @@ - erase - JSON for Modern C++
Skip to content

nlohmann::basic_json::erase

// (1)
+ erase - JSON for Modern C++      

nlohmann::basic_json::erase

// (1)
 iterator erase(iterator pos);
 const_iterator erase(const_iterator pos);
 
@@ -15,7 +15,7 @@
 
 // (5)
 void erase(const size_type idx);
-
  1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

    If called on a primitive type other than null, the resulting JSON value will be null.

  2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

    If called on a primitive type other than null, the resulting JSON value will be null.

  3. Removes an element from a JSON object by key.

  4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

  5. Removes an element from a JSON array by index.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

pos (in)
iterator to the element to remove
first (in)
iterator to the beginning of the range to remove
last (in)
iterator past the end of the range to remove
key (in)
object key of the elements to remove
idx (in)
array index of the element to remove

Return value

  1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
  2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
  3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
  4. See 3.
  5. (none)

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.307 if called on a null value; example: "cannot use erase() with null"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: "iterator out of range"
  2. The function can throw the following exceptions:
    • Throws type_error.307 if called on a null value; example: "cannot use erase() with null"
    • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: "iterators do not fit current value"
    • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: "iterators out of range"
  3. The function can throw the following exceptions:
    • Throws type_error.307 when called on a type other than JSON object; example: "cannot use erase() with null"
  4. See 3.
  5. The function can throw the following exceptions:
    • Throws type_error.307 when called on a type other than JSON object; example: "cannot use erase() with null"
    • Throws out_of_range.401 when idx >= size(); example: "array index 17 is out of range"

Complexity

  1. The complexity depends on the type:
    • objects: amortized constant
    • arrays: linear in distance between pos and the end of the container
    • strings and binary: linear in the length of the member
    • other types: constant
  2. The complexity depends on the type:
    • objects: log(size()) + std::distance(first, last)
    • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
    • strings and binary: linear in the length of the member
    • other types: constant
  3. log(size()) + count(key)
  4. log(size()) + count(key)
  5. Linear in distance between idx and the end of the container.

Notes

  1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
  2. (none)
  3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
  4. See 3.
  5. (none)

Examples

Example: (1) remove element given an iterator

The example shows the effect of erase() for different JSON types using an iterator.

#include <iostream>
+
  1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

    If called on a primitive type other than null, the resulting JSON value will be null.

  2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

    If called on a primitive type other than null, the resulting JSON value will be null.

  3. Removes an element from a JSON object by key.

  4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

  5. Removes an element from a JSON array by index.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

pos (in)
iterator to the element to remove
first (in)
iterator to the beginning of the range to remove
last (in)
iterator past the end of the range to remove
key (in)
object key of the elements to remove
idx (in)
array index of the element to remove

Return value

  1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
  2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
  3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
  4. See 3.
  5. (none)

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.307 if called on a null value; example: "cannot use erase() with null"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: "iterator out of range"
  2. The function can throw the following exceptions:
    • Throws type_error.307 if called on a null value; example: "cannot use erase() with null"
    • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: "iterators do not fit current value"
    • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: "iterators out of range"
  3. The function can throw the following exceptions:
    • Throws type_error.307 when called on a type other than JSON object; example: "cannot use erase() with null"
  4. See 3.
  5. The function can throw the following exceptions:
    • Throws type_error.307 when called on a type other than JSON object; example: "cannot use erase() with null"
    • Throws out_of_range.401 when idx >= size(); example: "array index 17 is out of range"

Complexity

  1. The complexity depends on the type:
    • objects: amortized constant
    • arrays: linear in distance between pos and the end of the container
    • strings and binary: linear in the length of the member
    • other types: constant
  2. The complexity depends on the type:
    • objects: log(size()) + std::distance(first, last)
    • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
    • strings and binary: linear in the length of the member
    • other types: constant
  3. log(size()) + count(key)
  4. log(size()) + count(key)
  5. Linear in distance between idx and the end of the container.

Notes

  1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
  2. (none)
  3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
  4. See 3.
  5. (none)

Examples

Example: (1) remove element given an iterator

The example shows the effect of erase() for different JSON types using an iterator.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -52,7 +52,7 @@
 {"one":1}
 [1,2,8,16]
 null
-
Example: (2) remove elements given an iterator range

The example shows the effect of erase() for different JSON types using an iterator range.

#include <iostream>
+
Example: (2) remove elements given an iterator range

The example shows the effect of erase() for different JSON types using an iterator range.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -89,7 +89,7 @@
 {"one":1}
 [1,8,16]
 null
-
Example: (3) remove element from a JSON object given a key

The example shows the effect of erase() for different JSON types using an object key.

#include <iostream>
+
Example: (3) remove element from a JSON object given a key

The example shows the effect of erase() for different JSON types using an object key.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -109,7 +109,7 @@
 }
 

Output:

{"two":2}
 1 0
-
Example: (4) remove element from a JSON object given a key using string_view

The example shows the effect of erase() for different JSON types using an object key.

#include <iostream>
+
Example: (4) remove element from a JSON object given a key using string_view

The example shows the effect of erase() for different JSON types using an object key.

#include <iostream>
 #include <string_view>
 #include <nlohmann/json.hpp>
 
@@ -131,7 +131,7 @@
 }
 

Output:

{"two":2}
 1 0
-
Example: (5) remove element from a JSON array given an index

The example shows the effect of erase() using an array index.

#include <iostream>
+
Example: (5) remove element from a JSON array given an index

The example shows the effect of erase() using an array index.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -148,4 +148,4 @@
     std::cout << j_array << '\n';
 }
 

Output:

[0,1,3,4,5]
-

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
  3. Added in version 1.0.0.
  4. Added in version 3.11.0.
  5. Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/error_handler_t/index.html b/api/basic_json/error_handler_t/index.html index 2ed94b6b1..8b3c060ca 100644 --- a/api/basic_json/error_handler_t/index.html +++ b/api/basic_json/error_handler_t/index.html @@ -1,9 +1,9 @@ - error_handler_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::error_handler_t

enum class error_handler_t {
+ error_handler_t - JSON for Modern C++      

nlohmann::basic_json::error_handler_t

enum class error_handler_t {
     strict,
     replace,
     ignore
 };
-

This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

strict
throw a type_error exception in case of invalid UTF-8
replace
replace invalid UTF-8 sequences with U+FFFD (� REPLACEMENT CHARACTER)
ignore
ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged

Examples

Example

The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

#include <iostream>
+

This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

strict
throw a type_error exception in case of invalid UTF-8
replace
replace invalid UTF-8 sequences with U+FFFD (� REPLACEMENT CHARACTER)
ignore
ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged

Examples

Example

The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -30,4 +30,4 @@
 

Output:

[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9
 string with replaced invalid characters: "ä�ü"
 string with ignored invalid characters: "äü"
-

Version history

  • Added in version 3.4.0.
\ No newline at end of file +

Version history

  • Added in version 3.4.0.
\ No newline at end of file diff --git a/api/basic_json/exception/index.html b/api/basic_json/exception/index.html index c54ce071a..cfdd896ae 100644 --- a/api/basic_json/exception/index.html +++ b/api/basic_json/exception/index.html @@ -1,5 +1,5 @@ - exception - JSON for Modern C++
Skip to content

nlohmann::basic_json::exception

class exception : public std::exception;
-

This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions, see example below.

classDiagram
+ exception - JSON for Modern C++      

nlohmann::basic_json::exception

class exception : public std::exception;
+

This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions, see example below.

classDiagram
   direction LR
 
     class std_exception ["std::exception"] {
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.out_of_range.403] key 'non-existing' not found
 exception id: 403
-

See also

List of exceptions

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

List of exceptions

Version history

\ No newline at end of file diff --git a/api/basic_json/find/index.html b/api/basic_json/find/index.html index 9575df671..dee0d5020 100644 --- a/api/basic_json/find/index.html +++ b/api/basic_json/find/index.html @@ -1,4 +1,4 @@ - find - JSON for Modern C++
Skip to content

nlohmann::basic_json::find

// (1)
+ find - JSON for Modern C++      

nlohmann::basic_json::find

// (1)
 iterator find(const typename object_t::key_type& key);
 const_iterator find(const typename object_t::key_type& key) const;
 
@@ -7,7 +7,7 @@
 iterator find(KeyType&& key);
 template<typename KeyType>
 const_iterator find(KeyType&& key) const;
-
  1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value of the element to search for.

Return value

Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Logarithmic in the size of the JSON object.

Notes

This method always returns end() when executed on a JSON type that is not an object.

Examples

Example: (1) find object element by key

The example shows how find() is used.

#include <iostream>
+
  1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
  2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Parameters

key (in)
key value of the element to search for.

Return value

Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Logarithmic in the size of the JSON object.

Notes

This method always returns end() when executed on a JSON type that is not an object.

Examples

Example: (1) find object element by key

The example shows how find() is used.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -55,4 +55,4 @@
 

Output:

"two" was found: true
 value at key "two": 2
 "three" was found: false
-

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/flatten/index.html b/api/basic_json/flatten/index.html index cdc66f3e1..838a55f53 100644 --- a/api/basic_json/flatten/index.html +++ b/api/basic_json/flatten/index.html @@ -1,5 +1,5 @@ - flatten - JSON for Modern C++
Skip to content

nlohmann::basic_json::flatten

basic_json flatten() const;
-

The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

Return value

an object that maps JSON pointers to primitive values

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Linear in the size the JSON value.

Notes

Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

Examples

Example

The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

#include <iostream>
+ flatten - JSON for Modern C++      

nlohmann::basic_json::flatten

basic_json flatten() const;
+

The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

Return value

an object that maps JSON pointers to primitive values

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Complexity

Linear in the size the JSON value.

Notes

Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

Examples

Example

The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -43,4 +43,4 @@
     "/object/value": 42.99,
     "/pi": 3.141
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/from_bjdata/index.html b/api/basic_json/from_bjdata/index.html index f9d8dea9e..6ce8f6fdf 100644 --- a/api/basic_json/from_bjdata/index.html +++ b/api/basic_json/from_bjdata/index.html @@ -1,4 +1,4 @@ - from_bjdata - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_bjdata

// (1)
+ from_bjdata - JSON for Modern C++      

nlohmann::basic_json::from_bjdata

// (1)
 template<typename InputType>
 static basic_json from_bjdata(InputType&& i,
                               const bool strict = true,
@@ -8,7 +8,7 @@
 static basic_json from_bjdata(IteratorType first, IteratorType last,
                               const bool strict = true,
                               const bool allow_exceptions = true);
-

Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in BJData format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if a parse error occurs
  • Throws parse_error.113 if a string could not be parsed successfully

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in BJData format to a JSON value.

#include <iostream>
+

Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in BJData format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if a parse error occurs
  • Throws parse_error.113 if a string could not be parsed successfully

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in BJData format to a JSON value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/from_bson/index.html b/api/basic_json/from_bson/index.html index a218ad681..0b8d94ab8 100644 --- a/api/basic_json/from_bson/index.html +++ b/api/basic_json/from_bson/index.html @@ -1,4 +1,4 @@ - from_bson - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_bson

// (1)
+ from_bson - JSON for Modern C++      

nlohmann::basic_json::from_bson

// (1)
 template<typename InputType>
 static basic_json from_bson(InputType&& i,
                             const bool strict = true,
@@ -8,7 +8,7 @@
 static basic_json from_bson(IteratorType first, IteratorType last,
                             const bool strict = true,
                             const bool allow_exceptions = true);
-

Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in BSON format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws parse_error.114 if an unsupported BSON record type is encountered.

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in BSON format to a JSON value.

#include <iostream>
+

Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in BSON format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws parse_error.114 if an unsupported BSON record type is encountered.

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in BSON format to a JSON value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -33,4 +33,4 @@
   "compact": true,
   "schema": 0
 }
-

See also

Version history

  • Added in version 3.4.0.

Deprecation

  • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

Version history

  • Added in version 3.4.0.

Deprecation

  • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_cbor/index.html b/api/basic_json/from_cbor/index.html index b69f9e22d..cb3933932 100644 --- a/api/basic_json/from_cbor/index.html +++ b/api/basic_json/from_cbor/index.html @@ -1,4 +1,4 @@ - from_cbor - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_cbor

// (1)
+ from_cbor - JSON for Modern C++      

nlohmann::basic_json::from_cbor

// (1)
 template<typename InputType>
 static basic_json from_cbor(InputType&& i,
                             const bool strict = true,
@@ -11,7 +11,7 @@
                             const bool strict = true,
                             const bool allow_exceptions = true,
                             const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);
-

Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in CBOR format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)
tag_handler (in)
how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
  • Throws parse_error.113 if a string was expected as map key, but not found

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in CBOR format to a JSON value.

#include <iostream>
+

Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in CBOR format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)
tag_handler (in)
how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
  • Throws parse_error.113 if a string was expected as map key, but not found

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in CBOR format to a JSON value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -35,4 +35,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.
  • Added tag_handler parameter in version 3.9.0.

Deprecation

  • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.
  • Added tag_handler parameter in version 3.9.0.

Deprecation

  • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_msgpack/index.html b/api/basic_json/from_msgpack/index.html index 4c8bfef3a..9f1bee62d 100644 --- a/api/basic_json/from_msgpack/index.html +++ b/api/basic_json/from_msgpack/index.html @@ -1,4 +1,4 @@ - from_msgpack - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_msgpack

// (1)
+ from_msgpack - JSON for Modern C++      

nlohmann::basic_json::from_msgpack

// (1)
 template<typename InputType>
 static basic_json from_msgpack(InputType&& i,
                                const bool strict = true,
@@ -8,7 +8,7 @@
 static basic_json from_msgpack(IteratorType first, IteratorType last,
                                const bool strict = true,
                                const bool allow_exceptions = true);
-

Deserializes a given input to a JSON value using the MessagePack serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in MessagePack format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
  • Throws parse_error.113 if a string was expected as map key, but not found

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

#include <iostream>
+

Deserializes a given input to a JSON value using the MessagePack serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in MessagePack format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
  • Throws parse_error.113 if a string was expected as map key, but not found

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Parameter start_index since version 2.1.1.
  • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/from_ubjson/index.html b/api/basic_json/from_ubjson/index.html index 66b6a14fd..4b9914d10 100644 --- a/api/basic_json/from_ubjson/index.html +++ b/api/basic_json/from_ubjson/index.html @@ -1,4 +1,4 @@ - from_ubjson - JSON for Modern C++
Skip to content

nlohmann::basic_json::from_ubjson

// (1)
+ from_ubjson - JSON for Modern C++      

nlohmann::basic_json::from_ubjson

// (1)
 template<typename InputType>
 static basic_json from_ubjson(InputType&& i,
                               const bool strict = true,
@@ -8,7 +8,7 @@
 static basic_json from_ubjson(IteratorType first, IteratorType last,
                               const bool strict = true,
                               const bool allow_exceptions = true);
-

Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in UBJSON format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if a parse error occurs
  • Throws parse_error.113 if a string could not be parsed successfully

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

#include <iostream>
+

Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

  1. Reads from a compatible input.
  2. Reads from an iterator range.

The exact mapping and its limitations is described on a dedicated page.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
a compatible iterator type

Parameters

i (in)
an input in UBJSON format convertible to an input adapter
first (in)
iterator to start of the input
last (in)
iterator to end of the input
strict (in)
whether to expect the input to be consumed until EOF (true by default)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)

Return value

deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
  • Throws parse_error.112 if a parse error occurs
  • Throws parse_error.113 if a string could not be parsed successfully

Complexity

Linear in the size of the input.

Examples

Example

The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -32,4 +32,4 @@
   "compact": true,
   "schema": 0
 }
-

Version history

  • Added in version 3.1.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added in version 3.1.0.
  • Added allow_exceptions parameter in version 3.2.0.

Deprecation

  • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
  • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/front/index.html b/api/basic_json/front/index.html index 0c80b0edd..592f65027 100644 --- a/api/basic_json/front/index.html +++ b/api/basic_json/front/index.html @@ -1,6 +1,6 @@ - front - JSON for Modern C++
Skip to content

nlohmann::basic_json::front

reference front();
+ front - JSON for Modern C++      

nlohmann::basic_json::front

reference front();
 const_reference front() const;
-

Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

Return value

In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

If the JSON value is null, exception invalid_iterator.214 is thrown.

Complexity

Constant.

Notes

Precondition

The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

Examples

Example

The following code shows an example for front().

#include <iostream>
+

Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

Return value

In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

If the JSON value is null, exception invalid_iterator.214 is thrown.

Complexity

Constant.

Notes

Precondition

The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

Examples

Example

The following code shows an example for front().

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -35,4 +35,4 @@
 1
 1
 "Hello, world"
-

See also

  • back to access the last element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file +

See also

  • back to access the last element

Version history

  • Added in version 1.0.0.
  • Adjusted code to return reference to binary values in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get/index.html b/api/basic_json/get/index.html index 593f29a4e..11239d14a 100644 --- a/api/basic_json/get/index.html +++ b/api/basic_json/get/index.html @@ -1,4 +1,4 @@ - get - JSON for Modern C++
Skip to content

nlohmann::basic_json::get

// (1)
+ get - JSON for Modern C++      

nlohmann::basic_json::get

// (1)
 template<typename ValueType>
 ValueType get() const noexcept(
     noexcept(JSONSerializer<ValueType>::from_json(
@@ -14,12 +14,12 @@
 
 template<typename PointerType>
 constexpr const PointerType get_ptr() const noexcept;
-
  1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType ret;
    +
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;
       JSONSerializer<ValueType>::from_json(*this, ret);
       return ret;
      -

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);
      +

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);
       

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;
      -

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    Template parameters

    ValueType
    the value type to return
    BasicJsonType
    a specialization of basic_json
    PointerType
    pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile.

    Return value

    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    Exceptions

    Depends on what json_serializer<ValueType> from_json() method throws

    Notes

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    Examples

    Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>
    +

  2. Explicit pointer access to the internally stored JSON value. No copies are made.

Template parameters

ValueType
the value type to return
BasicJsonType
a specialization of basic_json
PointerType
pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile.

Return value

  1. copy of the JSON value, converted to ValueType
  2. a copy of *this, converted into BasicJsonType
  3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Notes

Undefined behavior

Writing data to the pointee (overload 3) of the result yields an undefined state.

Examples

Example

The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

#include <iostream>
 #include <unordered_map>
 #include <nlohmann/json.hpp>
 
@@ -80,7 +80,7 @@
 null: null
 boolean: true
 array: [1,2,3,4,5]
-
Example

The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

#include <iostream>
+
Example

The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -103,4 +103,4 @@
 }
 

Output:

17 17 17 17
 true
-

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file +

Version history

  1. Since version 2.1.0.
  2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
  3. Since version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/get_allocator/index.html b/api/basic_json/get_allocator/index.html index 02b1d14e4..42258a5bb 100644 --- a/api/basic_json/get_allocator/index.html +++ b/api/basic_json/get_allocator/index.html @@ -1,4 +1,4 @@ - get_allocator - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_allocator

static allocator_type get_allocator();
+ get_allocator - JSON for Modern C++      

nlohmann::basic_json::get_allocator

static allocator_type get_allocator();
 

Returns the allocator associated with the container.

Return value

associated allocator

Examples

Example

The example shows how get_allocator() is used to created json values.

#include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -18,4 +18,4 @@
     traits_t::deallocate(alloc, j, 1);
 }
 

Output:

"Hello, world!"
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/get_binary/index.html b/api/basic_json/get_binary/index.html index efa599dff..7c02af7ee 100644 --- a/api/basic_json/get_binary/index.html +++ b/api/basic_json/get_binary/index.html @@ -1,4 +1,4 @@ - get_binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_binary

binary_t& get_binary();
+ get_binary - JSON for Modern C++      

nlohmann::basic_json::get_binary

binary_t& get_binary();
 
 const binary_t& get_binary() const;
 

Returns a reference to the stored binary value.

Return value

Reference to binary value.

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

Throws type_error.302 if the value is not binary

Complexity

Constant.

Examples

Example

The following code shows how to query a binary value.

#include <iostream>
@@ -18,4 +18,4 @@
     std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
 }
 

Output:

type: binary, subtype: 42
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_ptr/index.html b/api/basic_json/get_ptr/index.html index c897466b9..b9f77344b 100644 --- a/api/basic_json/get_ptr/index.html +++ b/api/basic_json/get_ptr/index.html @@ -1,9 +1,9 @@ - get_ptr - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_ptr

template<typename PointerType>
+ get_ptr - JSON for Modern C++      

nlohmann::basic_json::get_ptr

template<typename PointerType>
 PointerType get_ptr() noexcept;
 
 template<typename PointerType>
 constexpr const PointerType get_ptr() const noexcept;
-

Implicit pointer access to the internally stored JSON value. No copies are made.

Template parameters

PointerType
pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile.

Return value

pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Notes

Undefined behavior

The pointer becomes invalid if the underlying JSON object changes.

Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

#include <iostream>
+

Implicit pointer access to the internally stored JSON value. No copies are made.

Template parameters

PointerType
pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile.

Return value

pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant.

Notes

Undefined behavior

The pointer becomes invalid if the underlying JSON object changes.

Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -21,7 +21,7 @@
 }
 

Output:

value at 0x6000012fc1c8 is 1
 value at 0x6000029fc088 is 1
-

Examples

Example

The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

#include <iostream>
+

Examples

Example

The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -44,4 +44,4 @@ value at 0x6000029fc088 is 1
 }
 

Output:

17 17 17 17
 true
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_ref/index.html b/api/basic_json/get_ref/index.html index a1615b673..8429d3972 100644 --- a/api/basic_json/get_ref/index.html +++ b/api/basic_json/get_ref/index.html @@ -1,9 +1,9 @@ - get_ref - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_ref

template<typename ReferenceType>
+ get_ref - JSON for Modern C++      

nlohmann::basic_json::get_ref

template<typename ReferenceType>
 ReferenceType get_ref();
 
 template<typename ReferenceType>
 const ReferenceType get_ref() const;
-

Implicit reference access to the internally stored JSON value. No copies are made.

Template parameters

ReferenceType
reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion.

Return value

reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: "incompatible ReferenceType for get_ref, actual type is binary".

Complexity

Constant.

Notes

Undefined behavior

The reference becomes invalid if the underlying JSON object changes.

Examples

Example

The example shows several calls to get_ref().

#include <iostream>
+

Implicit reference access to the internally stored JSON value. No copies are made.

Template parameters

ReferenceType
reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion.

Return value

reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: "incompatible ReferenceType for get_ref, actual type is binary".

Complexity

Constant.

Notes

Undefined behavior

The reference becomes invalid if the underlying JSON object changes.

Examples

Example

The example shows several calls to get_ref().

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -32,4 +32,4 @@
 }
 

Output:

17 17
 [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number
-

See also

Version history

  • Added in version 1.1.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.1.0.
  • Extended to binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/get_to/index.html b/api/basic_json/get_to/index.html index f4c15b938..03d9738bd 100644 --- a/api/basic_json/get_to/index.html +++ b/api/basic_json/get_to/index.html @@ -1,10 +1,10 @@ - get_to - JSON for Modern C++
Skip to content

nlohmann::basic_json::get_to

template<typename ValueType>
+ get_to - JSON for Modern C++      

nlohmann::basic_json::get_to

template<typename ValueType>
 ValueType& get_to(ValueType& v) const noexcept(
     noexcept(JSONSerializer<ValueType>::from_json(
         std::declval<const basic_json_t&>(), v)));
-

Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

The function is equivalent to executing

ValueType v;
+

Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

The function is equivalent to executing

ValueType v;
 JSONSerializer<ValueType>::from_json(*this, v);
-

This overload is chosen if:

  • ValueType is not basic_json,
  • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)

Template parameters

ValueType
the value type to return

Return value

the input parameter, allowing chaining calls

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Examples

Example

The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

#include <iostream>
+

This overload is chosen if:

  • ValueType is not basic_json,
  • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)

Template parameters

ValueType
the value type to return

Return value

the input parameter, allowing chaining calls

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Examples

Example

The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

#include <iostream>
 #include <unordered_map>
 #include <nlohmann/json.hpp>
 
@@ -74,4 +74,4 @@
 null: null
 boolean: true
 array: [1,2,3,4,5]
-

Version history

  • Since version 3.3.0.
\ No newline at end of file +

Version history

  • Since version 3.3.0.
\ No newline at end of file diff --git a/api/basic_json/index.html b/api/basic_json/index.html index a11f437c7..5019abe3f 100644 --- a/api/basic_json/index.html +++ b/api/basic_json/index.html @@ -1,4 +1,4 @@ - Overview - JSON for Modern C++
Skip to content

nlohmann::basic_json

Defined in header <nlohmann/json.hpp>

template<
+ Overview - JSON for Modern C++      

nlohmann::basic_json

Defined in header <nlohmann/json.hpp>

template<
     template<typename U, typename V, typename... Args> class ObjectType = std::map,
     template<typename U, typename... Args> class ArrayType = std::vector,
     class StringType = std::string,
@@ -12,7 +12,7 @@
     class CustomBaseClass = void
 >
 class basic_json;
-

Template parameters

Template parameter Description Derived type
ObjectType type for JSON objects object_t
ArrayType type for JSON arrays array_t
StringType type for JSON strings and object keys string_t
BooleanType type for JSON booleans boolean_t
NumberIntegerType type for JSON integer numbers number_integer_t
NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t
NumberFloatType type for JSON floating-point numbers number_float_t
AllocatorType type of the allocator to use
JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer
BinaryType type for binary arrays binary_t
CustomBaseClass extension point for user code json_base_class_t

Specializations

  • json - default specialization
  • ordered_json - specialization that maintains the insertion order of object keys

Iterator invalidation

All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Requirements

The class satisfies the following concept requirements:

Basic

Layout

  • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.

Library-wide

  • EqualityComparable: JSON values can be compared with ==, see operator==.
  • LessThanComparable: JSON values can be compared with <, see operator<.
  • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
  • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.

Container

  • Container: JSON values can be used like STL containers and provide iterator access.
  • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.

Member types

Exceptions

  • exception - general exception of the basic_json class
    • parse_error - exception indicating a parse error
    • invalid_iterator - exception indicating errors with iterators
    • type_error - exception indicating executing a member function with a wrong type
    • out_of_range - exception indicating access out of the defined range
    • other_error - exception indicating other library errors

Container types

Type Definition
value_type basic_json
reference value_type&
const_reference const value_type&
difference_type std::ptrdiff_t
size_type std::size_t
allocator_type AllocatorType<basic_json>
pointer std::allocator_traits<allocator_type>::pointer
const_pointer std::allocator_traits<allocator_type>::const_pointer
iterator LegacyBidirectionalIterator
const_iterator constant LegacyBidirectionalIterator
reverse_iterator reverse iterator, derived from iterator
const_reverse_iterator reverse iterator, derived from const_iterator
iteration_proxy helper type for items function

JSON value data types

Parser callback

Member functions

Object inspection

Functions to inspect the type of a JSON value.

Value access

Direct access to the stored value of a JSON value.

Element access

Access to the JSON value

  • at - access specified element with bounds checking
  • operator[] - access specified element
  • value - access specified object element with default value
  • front - access the first element
  • back - access the last element

Lookup

  • find - find an element in a JSON object
  • count - returns the number of occurrences of a key in a JSON object
  • contains - check the existence of an element in a JSON object

Iterators

  • begin - returns an iterator to the first element
  • cbegin - returns a const iterator to the first element
  • end - returns an iterator to one past the last element
  • cend - returns a const iterator to one past the last element
  • rbegin - returns an iterator to the reverse-beginning
  • rend - returns an iterator to the reverse-end
  • crbegin - returns a const iterator to the reverse-beginning
  • crend - returns a const iterator to the reverse-end
  • items - wrapper to access iterator member functions in range-based for

Capacity

  • empty - checks whether the container is empty
  • size - returns the number of elements
  • max_size - returns the maximum possible number of elements

Modifiers

  • clear - clears the contents
  • push_back - add a value to an array/object
  • operator+= - add a value to an array/object
  • emplace_back - add a value to an array
  • emplace - add a value to an object if key does not exist
  • erase - remove elements
  • insert - inserts elements
  • update - updates a JSON object from another object, overwriting existing keys
  • swap - exchanges the values

Lexicographical comparison operators

Serialization / Dumping

  • dump - serialization

Deserialization / Parsing

  • parse (static) - deserialize from a compatible input
  • accept (static) - check if the input is valid JSON
  • sax_parse (static) - generate SAX events

JSON Pointer functions

  • flatten - return flattened JSON value
  • unflatten - unflatten a previously flattened JSON value

JSON Patch functions

  • patch - applies a JSON patch
  • patch_inplace - applies a JSON patch in place
  • diff (static) - creates a diff as a JSON patch

JSON Merge Patch functions

Static functions

  • meta - returns version information on the library
  • get_allocator - returns the allocator associated with the container

Binary formats

  • from_bjdata (static) - create a JSON value from an input in BJData format
  • from_bson (static) - create a JSON value from an input in BSON format
  • from_cbor (static) - create a JSON value from an input in CBOR format
  • from_msgpack (static) - create a JSON value from an input in MessagePack format
  • from_ubjson (static) - create a JSON value from an input in UBJSON format
  • to_bjdata (static) - create a BJData serialization of a given JSON value
  • to_bson (static) - create a BSON serialization of a given JSON value
  • to_cbor (static) - create a CBOR serialization of a given JSON value
  • to_msgpack (static) - create a MessagePack serialization of a given JSON value
  • to_ubjson (static) - create a UBJSON serialization of a given JSON value

Non-member functions

Literals

Helper classes

Examples

Example

The example shows how the library is used.

#include <iostream>
+

Template parameters

Template parameter Description Derived type
ObjectType type for JSON objects object_t
ArrayType type for JSON arrays array_t
StringType type for JSON strings and object keys string_t
BooleanType type for JSON booleans boolean_t
NumberIntegerType type for JSON integer numbers number_integer_t
NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t
NumberFloatType type for JSON floating-point numbers number_float_t
AllocatorType type of the allocator to use
JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer
BinaryType type for binary arrays binary_t
CustomBaseClass extension point for user code json_base_class_t

Specializations

  • json - default specialization
  • ordered_json - specialization that maintains the insertion order of object keys

Iterator invalidation

All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Requirements

The class satisfies the following concept requirements:

Basic

Layout

  • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.

Library-wide

  • EqualityComparable: JSON values can be compared with ==, see operator==.
  • LessThanComparable: JSON values can be compared with <, see operator<.
  • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
  • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.

Container

  • Container: JSON values can be used like STL containers and provide iterator access.
  • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.

Member types

Exceptions

  • exception - general exception of the basic_json class
    • parse_error - exception indicating a parse error
    • invalid_iterator - exception indicating errors with iterators
    • type_error - exception indicating executing a member function with a wrong type
    • out_of_range - exception indicating access out of the defined range
    • other_error - exception indicating other library errors

Container types

Type Definition
value_type basic_json
reference value_type&
const_reference const value_type&
difference_type std::ptrdiff_t
size_type std::size_t
allocator_type AllocatorType<basic_json>
pointer std::allocator_traits<allocator_type>::pointer
const_pointer std::allocator_traits<allocator_type>::const_pointer
iterator LegacyBidirectionalIterator
const_iterator constant LegacyBidirectionalIterator
reverse_iterator reverse iterator, derived from iterator
const_reverse_iterator reverse iterator, derived from const_iterator
iteration_proxy helper type for items function

JSON value data types

Parser callback

Member functions

Object inspection

Functions to inspect the type of a JSON value.

Optional functions to access the diagnostic positions.

  • start_pos - return the start position of the value
  • end_pos - return the one past the end position of the value

Value access

Direct access to the stored value of a JSON value.

Element access

Access to the JSON value

  • at - access specified element with bounds checking
  • operator[] - access specified element
  • value - access specified object element with default value
  • front - access the first element
  • back - access the last element

Lookup

  • find - find an element in a JSON object
  • count - returns the number of occurrences of a key in a JSON object
  • contains - check the existence of an element in a JSON object

Iterators

  • begin - returns an iterator to the first element
  • cbegin - returns a const iterator to the first element
  • end - returns an iterator to one past the last element
  • cend - returns a const iterator to one past the last element
  • rbegin - returns an iterator to the reverse-beginning
  • rend - returns an iterator to the reverse-end
  • crbegin - returns a const iterator to the reverse-beginning
  • crend - returns a const iterator to the reverse-end
  • items - wrapper to access iterator member functions in range-based for

Capacity

  • empty - checks whether the container is empty
  • size - returns the number of elements
  • max_size - returns the maximum possible number of elements

Modifiers

  • clear - clears the contents
  • push_back - add a value to an array/object
  • operator+= - add a value to an array/object
  • emplace_back - add a value to an array
  • emplace - add a value to an object if key does not exist
  • erase - remove elements
  • insert - inserts elements
  • update - updates a JSON object from another object, overwriting existing keys
  • swap - exchanges the values

Lexicographical comparison operators

Serialization / Dumping

  • dump - serialization

Deserialization / Parsing

  • parse (static) - deserialize from a compatible input
  • accept (static) - check if the input is valid JSON
  • sax_parse (static) - generate SAX events

JSON Pointer functions

  • flatten - return flattened JSON value
  • unflatten - unflatten a previously flattened JSON value

JSON Patch functions

  • patch - applies a JSON patch
  • patch_inplace - applies a JSON patch in place
  • diff (static) - creates a diff as a JSON patch

JSON Merge Patch functions

Static functions

  • meta - returns version information on the library
  • get_allocator - returns the allocator associated with the container

Binary formats

  • from_bjdata (static) - create a JSON value from an input in BJData format
  • from_bson (static) - create a JSON value from an input in BSON format
  • from_cbor (static) - create a JSON value from an input in CBOR format
  • from_msgpack (static) - create a JSON value from an input in MessagePack format
  • from_ubjson (static) - create a JSON value from an input in UBJSON format
  • to_bjdata (static) - create a BJData serialization of a given JSON value
  • to_bson (static) - create a BSON serialization of a given JSON value
  • to_cbor (static) - create a CBOR serialization of a given JSON value
  • to_msgpack (static) - create a MessagePack serialization of a given JSON value
  • to_ubjson (static) - create a UBJSON serialization of a given JSON value

Non-member functions

Literals

Helper classes

Examples

Example

The example shows how the library is used.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -78,4 +78,4 @@
     "pi": 3.141,
     "size": 8
 }
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/input_format_t/index.html b/api/basic_json/input_format_t/index.html index 02fb7f2ba..7ec9a9261 100644 --- a/api/basic_json/input_format_t/index.html +++ b/api/basic_json/input_format_t/index.html @@ -1,4 +1,4 @@ - input_format_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::input_format_t

enum class input_format_t {
+ input_format_t - JSON for Modern C++      

nlohmann::basic_json::input_format_t

enum class input_format_t {
     json,
     cbor,
     msgpack,
@@ -6,7 +6,7 @@
     bson,
     bjdata
 };
-

This enumeration is used in the sax_parse function to choose the input format to parse:

json
JSON (JavaScript Object Notation)
cbor
CBOR (Concise Binary Object Representation)
msgpack
MessagePack
ubjson
UBJSON (Universal Binary JSON)
bson
BSON (Binary JSON)
bjdata
BJData (Binary JData)

Examples

Example

The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

#include <iostream>
+

This enumeration is used in the sax_parse function to choose the input format to parse:

json
JSON (JavaScript Object Notation)
cbor
CBOR (Concise Binary Object Representation)
msgpack
MessagePack
ubjson
UBJSON (Universal Binary JSON)
bson
BSON (Binary JSON)
bjdata
BJData (Binary JData)

Examples

Example

The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

#include <iostream>
 #include <iomanip>
 #include <sstream>
 #include <nlohmann/json.hpp>
@@ -123,4 +123,4 @@
 

Output:

binary(val=[...])
 
 result: true
-

Version history

  • Added in version 3.2.0.
\ No newline at end of file +

Version history

  • Added in version 3.2.0.
\ No newline at end of file diff --git a/api/basic_json/insert/index.html b/api/basic_json/insert/index.html index 0561b5be3..587bee7ae 100644 --- a/api/basic_json/insert/index.html +++ b/api/basic_json/insert/index.html @@ -1,4 +1,4 @@ - insert - JSON for Modern C++
Skip to content

nlohmann::basic_json::insert

// (1)
+ insert - JSON for Modern C++      

nlohmann::basic_json::insert

// (1)
 iterator insert(const_iterator pos, const basic_json& val);
 iterator insert(const_iterator pos, basic_json&& val);
 
@@ -13,7 +13,7 @@
 
 // (5)
 void insert(const_iterator first, const_iterator last);
-
  1. Inserts element val into array before iterator pos.
  2. Inserts cnt copies of val into array before iterator pos.
  3. Inserts elements from range [first, last) into array before iterator pos.
  4. Inserts elements from initializer list ilist into array before iterator pos.
  5. Inserts elements from range [first, last) into object.

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

Parameters

pos (in)
iterator before which the content will be inserted; may be the end() iterator
val (in)
value to insert
cnt (in)
number of copies of val to insert
first (in)
begin of the range of elements to insert
last (in)
end of the range of elements to insert
ilist (in)
initializer list to insert the values from

Return value

  1. iterator pointing to the inserted val.
  2. iterator pointing to the first element inserted, or pos if cnt==0
  3. iterator pointing to the first element inserted, or pos if first==last
  4. iterator pointing to the first element inserted, or pos if ilist is empty
  5. (none)

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  2. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  3. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"
    • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: "passed iterators may not belong to container"
  4. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  5. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than objects; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"

Complexity

  1. Constant plus linear in the distance between pos and end of the container.
  2. Linear in cnt plus linear in the distance between pos and end of the container.
  3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
  4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
  5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.

Examples

Example (1): insert element into array

The example shows how insert() is used.

#include <iostream>
+
  1. Inserts element val into array before iterator pos.
  2. Inserts cnt copies of val into array before iterator pos.
  3. Inserts elements from range [first, last) into array before iterator pos.
  4. Inserts elements from initializer list ilist into array before iterator pos.
  5. Inserts elements from range [first, last) into object.

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

Parameters

pos (in)
iterator before which the content will be inserted; may be the end() iterator
val (in)
value to insert
cnt (in)
number of copies of val to insert
first (in)
begin of the range of elements to insert
last (in)
end of the range of elements to insert
ilist (in)
initializer list to insert the values from

Return value

  1. iterator pointing to the inserted val.
  2. iterator pointing to the first element inserted, or pos if cnt==0
  3. iterator pointing to the first element inserted, or pos if first==last
  4. iterator pointing to the first element inserted, or pos if ilist is empty
  5. (none)

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  2. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  3. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"
    • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: "passed iterators may not belong to container"
  4. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than arrays; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
  5. The function can throw the following exceptions:
    • Throws type_error.309 if called on JSON values other than objects; example: "cannot use insert() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"

Complexity

  1. Constant plus linear in the distance between pos and end of the container.
  2. Linear in cnt plus linear in the distance between pos and end of the container.
  3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
  4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
  5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.

Examples

Example (1): insert element into array

The example shows how insert() is used.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -116,4 +116,4 @@
 

Output:

{"one":"eins","two":"zwei"}
 {"eleven":"elf","seventeen":"siebzehn"}
 {"eleven":"elf","one":"eins","seventeen":"siebzehn","two":"zwei"}
-

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0.
  3. Added in version 1.0.0.
  4. Added in version 1.0.0.
  5. Added in version 3.0.0.
\ No newline at end of file diff --git a/api/basic_json/invalid_iterator/index.html b/api/basic_json/invalid_iterator/index.html index c2d40f30c..b9cb57b52 100644 --- a/api/basic_json/invalid_iterator/index.html +++ b/api/basic_json/invalid_iterator/index.html @@ -1,4 +1,4 @@ - invalid_iterator - JSON for Modern C++
Skip to content

nlohmann::basic_json::invalid_iterator

class invalid_iterator : public exception;
+ invalid_iterator - JSON for Modern C++      

nlohmann::basic_json::invalid_iterator

class invalid_iterator : public exception;
 

This exception is thrown if iterators passed to a library function do not match the expected semantics.

Exceptions have ids 2xx (see list of iterator errors).

classDiagram
   direction LR
 
@@ -50,4 +50,4 @@
 }
 

Output:

message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
 exception id: 207
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/is_array/index.html b/api/basic_json/is_array/index.html index db78dcbdc..5fd623850 100644 --- a/api/basic_json/is_array/index.html +++ b/api/basic_json/is_array/index.html @@ -1,5 +1,5 @@ - is_array - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_array

constexpr bool is_array() const noexcept;
-

This function returns true if and only if the JSON value is an array.

Return value

true if type is an array, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_array() for all JSON types.

#include <iostream>
+ is_array - JSON for Modern C++      

nlohmann::basic_json::is_array

constexpr bool is_array() const noexcept;
+

This function returns true if and only if the JSON value is an array.

Return value

true if type is an array, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_array() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 true
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_binary/index.html b/api/basic_json/is_binary/index.html index 174cd12ec..b3e9f6098 100644 --- a/api/basic_json/is_binary/index.html +++ b/api/basic_json/is_binary/index.html @@ -1,5 +1,5 @@ - is_binary - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_binary

constexpr bool is_binary() const noexcept;
-

This function returns true if and only if the JSON value is binary array.

Return value

true if type is binary, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_binary() for all JSON types.

#include <iostream>
+ is_binary - JSON for Modern C++      

nlohmann::basic_json::is_binary

constexpr bool is_binary() const noexcept;
+

This function returns true if and only if the JSON value is binary array.

Return value

true if type is binary, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_binary() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 true
-

Version history

  • Added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/is_boolean/index.html b/api/basic_json/is_boolean/index.html index dc73d047a..1fd1b7672 100644 --- a/api/basic_json/is_boolean/index.html +++ b/api/basic_json/is_boolean/index.html @@ -1,5 +1,5 @@ - is_boolean - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_boolean

constexpr bool is_boolean() const noexcept;
-

This function returns true if and only if the JSON value is true or false.

Return value

true if type is boolean, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_boolean() for all JSON types.

#include <iostream>
+ is_boolean - JSON for Modern C++      

nlohmann::basic_json::is_boolean

constexpr bool is_boolean() const noexcept;
+

This function returns true if and only if the JSON value is true or false.

Return value

true if type is boolean, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_boolean() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_discarded/index.html b/api/basic_json/is_discarded/index.html index 2d96b9b03..dc884d6c5 100644 --- a/api/basic_json/is_discarded/index.html +++ b/api/basic_json/is_discarded/index.html @@ -1,7 +1,7 @@ - is_discarded - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_discarded

constexpr bool is_discarded() const noexcept;
-

This function returns true for a JSON value if either:

  • the value was discarded during parsing with a callback function (see parser_callback_t), or
  • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.

Return value

true if type is discarded, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Comparisons

Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

j.is_discarded()
+ is_discarded - JSON for Modern C++      

nlohmann::basic_json::is_discarded

constexpr bool is_discarded() const noexcept;
+

This function returns true for a JSON value if either:

  • the value was discarded during parsing with a callback function (see parser_callback_t), or
  • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.

Return value

true if type is discarded, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Comparisons

Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

j.is_discarded()
 

because

j == json::value_t::discarded
-

will always be false.

Removal during parsing with callback functions

When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

Examples

Example

The following code exemplifies is_discarded() for all JSON types.

#include <iostream>
+

will always be false.

Removal during parsing with callback functions

When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

Examples

Example

The following code exemplifies is_discarded() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -40,4 +40,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/is_null/index.html b/api/basic_json/is_null/index.html index 106730f08..7a9d51208 100644 --- a/api/basic_json/is_null/index.html +++ b/api/basic_json/is_null/index.html @@ -1,5 +1,5 @@ - is_null - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_null

constexpr bool is_null() const noexcept;
-

This function returns true if and only if the JSON value is null.

Return value

true if type is null, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_null() for all JSON types.

#include <iostream>
+ is_null - JSON for Modern C++      

nlohmann::basic_json::is_null

constexpr bool is_null() const noexcept;
+

This function returns true if and only if the JSON value is null.

Return value

true if type is null, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_null() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number/index.html b/api/basic_json/is_number/index.html index d7b1905bf..300dd3981 100644 --- a/api/basic_json/is_number/index.html +++ b/api/basic_json/is_number/index.html @@ -1,9 +1,9 @@ - is_number - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number

constexpr bool is_number() const noexcept;
-

This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

Return value

true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_number() const noexcept
+ is_number - JSON for Modern C++      

nlohmann::basic_json::is_number

constexpr bool is_number() const noexcept;
+

This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

Return value

true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_number() const noexcept
 {
     return is_number_integer() || is_number_float();
 }
-

Examples

Example

The following code exemplifies is_number() for all JSON types.

#include <iostream>
+

Examples

Example

The following code exemplifies is_number() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -42,4 +42,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_float/index.html b/api/basic_json/is_number_float/index.html index f7bfa7d35..093decb7d 100644 --- a/api/basic_json/is_number_float/index.html +++ b/api/basic_json/is_number_float/index.html @@ -1,5 +1,5 @@ - is_number_float - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_float

constexpr bool is_number_float() const noexcept;
-

This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

Return value

true if type is a floating-point number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_float() for all JSON types.

#include <iostream>
+ is_number_float - JSON for Modern C++      

nlohmann::basic_json::is_number_float

constexpr bool is_number_float() const noexcept;
+

This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

Return value

true if type is a floating-point number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_float() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_integer/index.html b/api/basic_json/is_number_integer/index.html index 2d42a98ed..425bcbf4c 100644 --- a/api/basic_json/is_number_integer/index.html +++ b/api/basic_json/is_number_integer/index.html @@ -1,5 +1,5 @@ - is_number_integer - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_integer

constexpr bool is_number_integer() const noexcept;
-

This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

Return value

true if type is an integer or unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_integer() for all JSON types.

#include <iostream>
+ is_number_integer - JSON for Modern C++      

nlohmann::basic_json::is_number_integer

constexpr bool is_number_integer() const noexcept;
+

This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

Return value

true if type is an integer or unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_integer() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to also return true for unsigned integers in 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_number_unsigned/index.html b/api/basic_json/is_number_unsigned/index.html index 9864a994f..5b77c31a1 100644 --- a/api/basic_json/is_number_unsigned/index.html +++ b/api/basic_json/is_number_unsigned/index.html @@ -1,5 +1,5 @@ - is_number_unsigned - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_number_unsigned

constexpr bool is_number_unsigned() const noexcept;
-

This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

Return value

true if type is an unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_unsigned() for all JSON types.

#include <iostream>
+ is_number_unsigned - JSON for Modern C++      

nlohmann::basic_json::is_number_unsigned

constexpr bool is_number_unsigned() const noexcept;
+

This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

Return value

true if type is an unsigned integer number, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_number_unsigned() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_object/index.html b/api/basic_json/is_object/index.html index cdef85d64..40e441265 100644 --- a/api/basic_json/is_object/index.html +++ b/api/basic_json/is_object/index.html @@ -1,5 +1,5 @@ - is_object - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_object

constexpr bool is_object() const noexcept;
-

This function returns true if and only if the JSON value is an object.

Return value

true if type is an object, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_object() for all JSON types.

#include <iostream>
+ is_object - JSON for Modern C++      

nlohmann::basic_json::is_object

constexpr bool is_object() const noexcept;
+

This function returns true if and only if the JSON value is an object.

Return value

true if type is an object, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_object() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 false
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_primitive/index.html b/api/basic_json/is_primitive/index.html index 63f17a249..bb95c9a98 100644 --- a/api/basic_json/is_primitive/index.html +++ b/api/basic_json/is_primitive/index.html @@ -1,9 +1,9 @@ - is_primitive - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_primitive

constexpr bool is_primitive() const noexcept;
-

This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

Return value

true if type is primitive (string, number, boolean, null, or binary), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_primitive() const noexcept
+ is_primitive - JSON for Modern C++      

nlohmann::basic_json::is_primitive

constexpr bool is_primitive() const noexcept;
+

This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

Return value

true if type is primitive (string, number, boolean, null, or binary), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_primitive() const noexcept
 {
     return is_null() || is_string() || is_boolean() || is_number() || is_binary();
 }
-

Notes

The term primitive stems from RFC 8259:

JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

Examples

Example

The following code exemplifies is_primitive() for all JSON types.

#include <iostream>
+

Notes

The term primitive stems from RFC 8259:

JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

Examples

Example

The following code exemplifies is_primitive() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -42,4 +42,4 @@
 false
 true
 true
-

See also

Version history

  • Added in version 1.0.0.
  • Extended to return true for binary types in version 3.8.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended to return true for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/is_string/index.html b/api/basic_json/is_string/index.html index 041348b6a..f99d3198b 100644 --- a/api/basic_json/is_string/index.html +++ b/api/basic_json/is_string/index.html @@ -1,5 +1,5 @@ - is_string - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_string

constexpr bool is_string() const noexcept;
-

This function returns true if and only if the JSON value is a string.

Return value

true if type is a string, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_string() for all JSON types.

#include <iostream>
+ is_string - JSON for Modern C++      

nlohmann::basic_json::is_string

constexpr bool is_string() const noexcept;
+

This function returns true if and only if the JSON value is a string.

Return value

true if type is a string, false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies is_string() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -38,4 +38,4 @@
 false
 true
 false
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/is_structured/index.html b/api/basic_json/is_structured/index.html index d6c838204..ee06899e7 100644 --- a/api/basic_json/is_structured/index.html +++ b/api/basic_json/is_structured/index.html @@ -1,9 +1,9 @@ - is_structured - JSON for Modern C++
Skip to content

nlohmann::basic_json::is_structured

constexpr bool is_structured() const noexcept;
-

This function returns true if and only if the JSON type is structured (array or object).

Return value

true if type is structured (array or object), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_structured() const noexcept
+ is_structured - JSON for Modern C++      

nlohmann::basic_json::is_structured

constexpr bool is_structured() const noexcept;
+

This function returns true if and only if the JSON type is structured (array or object).

Return value

true if type is structured (array or object), false otherwise.

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Possible implementation

constexpr bool is_structured() const noexcept
 {
     return is_array() || is_object();
 }
-

Notes

The term structured stems from RFC 8259:

JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

Note that though strings are containers in C++, they are treated as primitive values in JSON.

Examples

Example

The following code exemplifies is_structured() for all JSON types.

#include <iostream>
+

Notes

The term structured stems from RFC 8259:

JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

Note that though strings are containers in C++, they are treated as primitive values in JSON.

Examples

Example

The following code exemplifies is_structured() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -42,4 +42,4 @@
 true
 false
 false
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/items/index.html b/api/basic_json/items/index.html index f2c10139e..5e32ade9a 100644 --- a/api/basic_json/items/index.html +++ b/api/basic_json/items/index.html @@ -1,6 +1,6 @@ - items - JSON for Modern C++
Skip to content

nlohmann::basic_json::items

iteration_proxy<iterator> items() noexcept;
+ items - JSON for Modern C++      

nlohmann::basic_json::items

iteration_proxy<iterator> items() noexcept;
 iteration_proxy<const_iterator> items() const noexcept;
-

This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

For loop without items() function:

for (auto it = j_object.begin(); it != j_object.end(); ++it)
+

This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

For loop without items() function:

for (auto it = j_object.begin(); it != j_object.end(); ++it)
 {
     std::cout << "key: " << it.key() << ", value:" << it.value() << '\n';
 }
@@ -13,11 +13,11 @@
 {
     std::cout << "key: " << el.key() << ", value:" << el.value() << '\n';
 }
-

The items() function also allows using structured bindings (C++17):

for (auto& [key, val] : j_object.items())
+

The items() function also allows using structured bindings (C++17):

for (auto& [key, val] : j_object.items())
 {
     std::cout << "key: " << key << ", value:" << val << '\n';
 }
-

Return value

iteration proxy object wrapping the current value with an interface to use in range-based for loops

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Constant.

Notes

When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

Lifetime issues

Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

Examples

Example

The following code shows an example for items().

#include <iostream>
+

Return value

iteration proxy object wrapping the current value with an interface to use in range-based for loops

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Constant.

Notes

When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

Lifetime issues

Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

Examples

Example

The following code shows an example for items().

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -47,4 +47,4 @@
 key: 2, value: 4
 key: 3, value: 8
 key: 4, value: 16
-

Version history

  • Added iterator_wrapper in version 3.0.0.
  • Added items and deprecated iterator_wrapper in version 3.1.0.
  • Added structured binding support in version 3.5.0.

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

Version history

  • Added iterator_wrapper in version 3.0.0.
  • Added items and deprecated iterator_wrapper in version 3.1.0.
  • Added structured binding support in version 3.5.0.

Deprecation

This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/json_base_class_t/index.html b/api/basic_json/json_base_class_t/index.html index 5dfca93a2..f40bfa0b5 100644 --- a/api/basic_json/json_base_class_t/index.html +++ b/api/basic_json/json_base_class_t/index.html @@ -1,5 +1,5 @@ - json_base_class_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::json_base_class_t

using json_base_class_t = detail::json_base_class<CustomBaseClass>;
-

The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

Template parameters

CustomBaseClass
the base class to be added to basic_json

Notes

Default type

The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

Limitations

The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

Examples

Example

The following code shows how to inject custom data and methods for each node.

#include <iostream>
+ json_base_class_t - JSON for Modern C++      

nlohmann::basic_json::json_base_class_t

using json_base_class_t = detail::json_base_class<CustomBaseClass>;
+

The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

Template parameters

CustomBaseClass
the base class to be added to basic_json

Notes

Default type

The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

Limitations

The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

Examples

Example

The following code shows how to inject custom data and methods for each node.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 class visitor_adaptor_with_metadata
@@ -91,4 +91,4 @@
 /null - metadata = 42 -> null
 /object - metadata = 21 -> {"uint":1}
 /object/uint - metadata = 42 -> 1
-

Version history

  • Added in version 3.12.0.
\ No newline at end of file +

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/json_serializer/index.html b/api/basic_json/json_serializer/index.html index 7879b50a6..28e469e01 100644 --- a/api/basic_json/json_serializer/index.html +++ b/api/basic_json/json_serializer/index.html @@ -1,6 +1,6 @@ - json_serializer - JSON for Modern C++
Skip to content

nlohmann::basic_json::json_serializer

template<typename T, typename SFINAE>
+ json_serializer - JSON for Modern C++      

nlohmann::basic_json::json_serializer

template<typename T, typename SFINAE>
 using json_serializer = JSONSerializer<T, SFINAE>;
-

Template parameters

T
type to convert; will be used in the to_json/from_json functions
SFINAE
type to add compile type checks via SFINAE; usually void

Notes

Default type

The default values for json_serializer is adl_serializer.

Examples

Example

The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

#include <iostream>
+

Template parameters

T
type to convert; will be used in the to_json/from_json functions
SFINAE
type to add compile type checks via SFINAE; usually void

Notes

Default type

The default values for json_serializer is adl_serializer.

Examples

Example

The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -54,4 +54,4 @@
     std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl;
 }
 

Output:

Ned Flanders (60) lives in 744 Evergreen Terrace
-

Version history

  • Since version 2.0.0.
\ No newline at end of file +

Version history

  • Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/max_size/index.html b/api/basic_json/max_size/index.html index 4d195b919..346bab65d 100644 --- a/api/basic_json/max_size/index.html +++ b/api/basic_json/max_size/index.html @@ -1,5 +1,5 @@ - max_size - JSON for Modern C++
Skip to content

nlohmann::basic_json::max_size

size_type max_size() const noexcept;
-

Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0 (same as size())
boolean 1 (same as size())
string 1 (same as size())
number 1 (same as size())
binary 1 (same as size())
object result of function object_t::max_size()
array result of function array_t::max_size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

Notes

This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

Examples

Example

The following code calls max_size() on the different value types.

#include <iostream>
+ max_size - JSON for Modern C++      

nlohmann::basic_json::max_size

size_type max_size() const noexcept;
+

Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0 (same as size())
boolean 1 (same as size())
string 1 (same as size())
number 1 (same as size())
binary 1 (same as size())
object result of function object_t::max_size()
array result of function array_t::max_size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

Notes

This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

Examples

Example

The following code calls max_size() on the different value types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -31,4 +31,4 @@
 115292150460684697
 576460752303423487
 1
-

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file +

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/merge_patch/index.html b/api/basic_json/merge_patch/index.html index 802a0e9b7..782fed5de 100644 --- a/api/basic_json/merge_patch/index.html +++ b/api/basic_json/merge_patch/index.html @@ -1,5 +1,5 @@ - merge_patch - JSON for Modern C++
Skip to content

nlohmann::basic_json::merge_patch

void merge_patch(const basic_json& apply_patch);
-

The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

define MergePatch(Target, Patch):
+ merge_patch - JSON for Modern C++      

nlohmann::basic_json::merge_patch

void merge_patch(const basic_json& apply_patch);
+

The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

define MergePatch(Target, Patch):
   if Patch is an Object:
     if Target is not an Object:
       Target = {} // Ignore the contents and set it to an empty Object
@@ -12,7 +12,7 @@
     return Target
   else:
     return Patch
-

Thereby, Target is the current object; that is, the patch is applied to the current value.

Parameters

apply_patch (in)
the patch to apply

Complexity

Linear in the lengths of apply_patch.

Examples

Example

The following code shows how a JSON Merge Patch is applied to a JSON document.

#include <iostream>
+

Thereby, Target is the current object; that is, the patch is applied to the current value.

Parameters

apply_patch (in)
the patch to apply

Complexity

Linear in the lengths of apply_patch.

Examples

Example

The following code shows how a JSON Merge Patch is applied to a JSON document.

#include <iostream>
 #include <nlohmann/json.hpp>
 #include <iomanip> // for std::setw
 
@@ -64,4 +64,4 @@
     ],
     "title": "Hello!"
 }
-

See also

Version history

  • Added in version 3.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.0.0.
\ No newline at end of file diff --git a/api/basic_json/meta/index.html b/api/basic_json/meta/index.html index 3226a195a..672f32318 100644 --- a/api/basic_json/meta/index.html +++ b/api/basic_json/meta/index.html @@ -1,5 +1,5 @@ - meta - JSON for Modern C++
Skip to content

nlohmann::basic_json::meta

static basic_json meta();
-

This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

Return value

JSON object holding version information

key description
compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version).
copyright The copyright line for the library as string.
name The name of the library as string.
platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown.
url The URL of the project as string.
version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string).

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Complexity

Constant.

Examples

Example

The following code shows an example output of the meta() function.

#include <iostream>
+ meta - JSON for Modern C++      

nlohmann::basic_json::meta

static basic_json meta();
+

This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

Return value

JSON object holding version information

key description
compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version).
copyright The copyright line for the library as string.
name The name of the library as string.
platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown.
url The URL of the project as string.
version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string).

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Complexity

Constant.

Examples

Example

The following code shows an example output of the meta() function.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -27,4 +27,4 @@
         "string": "3.11.3"
     }
 }
-

Note the output is platform-dependent.

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file +

Note the output is platform-dependent.

See also

Version history

  • Added in version 2.1.0.
\ No newline at end of file diff --git a/api/basic_json/number_float_t/index.html b/api/basic_json/number_float_t/index.html index 2cd9e63a5..69cd762c9 100644 --- a/api/basic_json/number_float_t/index.html +++ b/api/basic_json/number_float_t/index.html @@ -1,5 +1,5 @@ - number_float_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_float_t

using number_float_t = NumberFloatType;
-

The type used to store JSON numbers (floating-point).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

Notes

Default type

With the default values for NumberFloatType (double), the default value for number_float_t is double.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 states:

This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

Storage

Floating-point number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_float_t is by default, a typedef to double.

#include <iostream>
+ number_float_t - JSON for Modern C++      

nlohmann::basic_json::number_float_t

using number_float_t = NumberFloatType;
+

The type used to store JSON numbers (floating-point).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

Notes

Default type

With the default values for NumberFloatType (double), the default value for number_float_t is double.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 states:

This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

Storage

Floating-point number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_float_t is by default, a typedef to double.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/number_integer_t/index.html b/api/basic_json/number_integer_t/index.html index 4f33f9cdf..1456d6deb 100644 --- a/api/basic_json/number_integer_t/index.html +++ b/api/basic_json/number_integer_t/index.html @@ -1,5 +1,5 @@ - number_integer_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_integer_t

using number_integer_t = NumberIntegerType;
-

The type used to store JSON numbers (integers).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

Notes

Default type

With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_integer_t is by default, a typedef to std::int64_t.

#include <iostream>
+ number_integer_t - JSON for Modern C++      

nlohmann::basic_json::number_integer_t

using number_integer_t = NumberIntegerType;
+

The type used to store JSON numbers (integers).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

Notes

Default type

With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_integer_t is by default, a typedef to std::int64_t.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/number_unsigned_t/index.html b/api/basic_json/number_unsigned_t/index.html index 8184365c6..bd9415ed9 100644 --- a/api/basic_json/number_unsigned_t/index.html +++ b/api/basic_json/number_unsigned_t/index.html @@ -1,5 +1,5 @@ - number_unsigned_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::number_unsigned_t

using number_unsigned_t = NumberUnsignedType;
-

The type used to store JSON numbers (unsigned).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

Notes

Default type

With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range \f[-2^{53}+1, 2^{53}-1]\f are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

#include <iostream>
+ number_unsigned_t - JSON for Modern C++      

nlohmann::basic_json::number_unsigned_t

using number_unsigned_t = NumberUnsignedType;
+

The type used to store JSON numbers (unsigned).

RFC 8259 describes numbers as follows:

The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

Notes

Default type

With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

Default behavior

  • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
  • Not-a-number (NaN) values will be serialized to null.

Limits

RFC 8259 specifies:

An implementation may set limits on the range and precision of numbers.

When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

RFC 8259 further states:

Note that when such software is used, numbers that are integers and are in the range \f[-2^{53}+1, 2^{53}-1]\f are interoperable in the sense that implementations will agree exactly on their numeric values.

As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

Storage

Integer number values are stored directly inside a basic_json type.

Examples

Example

The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/object/index.html b/api/basic_json/object/index.html index 2a716b862..2d198c4ea 100644 --- a/api/basic_json/object/index.html +++ b/api/basic_json/object/index.html @@ -1,5 +1,5 @@ - object - JSON for Modern C++
Skip to content

nlohmann::basic_json::object

static basic_json object(initializer_list_t init = {});
-

Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

Parameters

init (in)
initializer list with JSON values to create an object from (optional)

Return value

JSON object value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

Complexity

Linear in the size of init.

Notes

This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

Examples

Example

The following code shows an example for the object function.

#include <iostream>
+ object - JSON for Modern C++      

nlohmann::basic_json::object

static basic_json object(initializer_list_t init = {});
+

Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

Parameters

init (in)
initializer list with JSON values to create an object from (optional)

Return value

JSON object value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

Complexity

Linear in the size of init.

Notes

This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

Examples

Example

The following code shows an example for the object function.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -31,4 +31,4 @@
 {}
 {"one":1,"two":2}
 [json.exception.type_error.301] cannot create object from initializer list
-

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/object_comparator_t/index.html b/api/basic_json/object_comparator_t/index.html index 254ce696a..5595bf1ac 100644 --- a/api/basic_json/object_comparator_t/index.html +++ b/api/basic_json/object_comparator_t/index.html @@ -1,4 +1,4 @@ - object_comparator_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::object_comparator_t

using object_comparator_t = typename object_t::key_compare;
+ object_comparator_t - JSON for Modern C++      

nlohmann::basic_json::object_comparator_t

using object_comparator_t = typename object_t::key_compare;
 // or
 using object_comparator_t = default_object_comparator_t;
 

The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

Examples

Example

The example below demonstrates the used object comparator.

#include <iostream>
@@ -14,4 +14,4 @@
 }
 

Output:

json::object_comparator_t("one", "two") = true
 json::object_comparator_t("three", "four") = false
-

Version history

  • Added in version 3.0.0.
  • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
\ No newline at end of file +

Version history

  • Added in version 3.0.0.
  • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/object_t/index.html b/api/basic_json/object_t/index.html index 2b4a32b6f..2f14f7aac 100644 --- a/api/basic_json/object_t/index.html +++ b/api/basic_json/object_t/index.html @@ -1,8 +1,8 @@ - object_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::object_t

using object_t = ObjectType<StringType,
+ object_t - JSON for Modern C++      

nlohmann::basic_json::object_t

using object_t = ObjectType<StringType,
                             basic_json,
                             default_object_comparator_t,
                             AllocatorType<std::pair<const StringType, basic_json>>>;
-

The type used to store JSON objects.

RFC 8259 describes JSON objects as follows:

An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

To store objects in C++, a type is defined by the template parameters described below.

Template parameters

ObjectType
the container to store objects (e.g., std::map or std::unordered_map)
StringType
the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container.
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

// until C++14
+

The type used to store JSON objects.

RFC 8259 describes JSON objects as follows:

An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

To store objects in C++, a type is defined by the template parameters described below.

Template parameters

ObjectType
the container to store objects (e.g., std::map or std::unordered_map)
StringType
the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container.
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

// until C++14
 std::map<
   std::string, // key_type
   basic_json, // value_type
@@ -17,7 +17,7 @@
   std::less<>, // key_compare
   std::allocator<std::pair<const std::string, basic_json>> // allocator_type
 >
-

See default_object_comparator_t for more information.

Behavior

The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

  • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
  • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {"key": 2, "key": 1} could be equal to either {"key": 1} or {"key": 2}.
  • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be stored and serialized as {"a": 2, "b": 1}.
  • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be treated as equal.

Limits

RFC 8259 specifies:

An implementation may set limits on the maximum depth of nesting.

In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

Storage

Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

Object key order

The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified "unordered" nature of JSON objects.

Examples

Example

The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

#include <iostream>
+

See default_object_comparator_t for more information.

Behavior

The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

  • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
  • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {"key": 2, "key": 1} could be equal to either {"key": 1} or {"key": 2}.
  • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be stored and serialized as {"a": 2, "b": 1}.
  • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be treated as equal.

Limits

RFC 8259 specifies:

An implementation may set limits on the maximum depth of nesting.

In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

Storage

Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

Object key order

The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified "unordered" nature of JSON objects.

Examples

Example

The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -28,4 +28,4 @@
     std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator+=/index.html b/api/basic_json/operator+=/index.html index fafd8db2b..3843acabb 100644 --- a/api/basic_json/operator+=/index.html +++ b/api/basic_json/operator+=/index.html @@ -1,4 +1,4 @@ - operator+= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator+=

// (1)
+ operator+= - JSON for Modern C++      

nlohmann::basic_json::operator+=

// (1)
 reference operator+=(basic_json&& val);
 reference operator+=(const basic_json& val);
 
@@ -7,7 +7,7 @@
 
 // (3)
 reference operator+=(initializer_list_t init);
-
  1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

  2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

  3. This function allows using operator+= with an initializer list. In case

    1. the current value is an object,
    2. the initializer list init contains only two elements, and
    3. the first element of init is a string,

    init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

Parameters

val (in)
the value to add to the JSON array/object
init (in)
an initializer list

Return value

*this

Exceptions

All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: "cannot use operator+=() with number"

Complexity

  1. Amortized constant.
  2. Logarithmic in the size of the container, O(log(size())).
  3. Linear in the size of the initializer list init.

Notes

(3) This function is required to resolve an ambiguous overload error, because pairs like {"key", "value"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

Examples

Example: (1) add element to array

The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
+
  1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

  2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

  3. This function allows using operator+= with an initializer list. In case

    1. the current value is an object,
    2. the initializer list init contains only two elements, and
    3. the first element of init is a string,

    init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

Parameters

val (in)
the value to add to the JSON array/object
init (in)
an initializer list

Return value

*this

Exceptions

All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: "cannot use operator+=() with number"

Complexity

  1. Amortized constant.
  2. Logarithmic in the size of the container, O(log(size())).
  3. Linear in the size of the initializer list init.

Notes

(3) This function is required to resolve an ambiguous overload error, because pairs like {"key", "value"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

Examples

Example: (1) add element to array

The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -36,7 +36,7 @@
 null
 [1,2,3,4,5,6,7]
 ["first","second"]
-
Example: (2) add element to object

The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

#include <iostream>
+
Example: (2) add element to object

The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -96,4 +96,4 @@
 null
 {"four":4,"one":1,"three":3,"two":2}
 [["five",5]]
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator=/index.html b/api/basic_json/operator=/index.html index 4cb7dd763..e4433c430 100644 --- a/api/basic_json/operator=/index.html +++ b/api/basic_json/operator=/index.html @@ -1,10 +1,10 @@ - operator= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator=

basic_json& operator=(basic_json other) noexcept (
+ operator= - JSON for Modern C++      

nlohmann::basic_json::operator=

basic_json& operator=(basic_json other) noexcept (
     std::is_nothrow_move_constructible<value_t>::value &&
     std::is_nothrow_move_assignable<value_t>::value &&
     std::is_nothrow_move_constructible<json_value>::value &&
     std::is_nothrow_move_assignable<json_value>::value
 );
-

Copy assignment operator. Copies a JSON value via the "copy and swap" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

Parameters

other (in)
value to copy from

Complexity

Linear.

Examples

Example

The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

#include <iostream>
+

Copy assignment operator. Copies a JSON value via the "copy and swap" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

Parameters

other (in)
value to copy from

Complexity

Linear.

Examples

Example

The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -24,4 +24,4 @@
 }
 

Output:

23
 23
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator[]/index.html b/api/basic_json/operator[]/index.html index d33ea4907..828bb27b1 100644 --- a/api/basic_json/operator[]/index.html +++ b/api/basic_json/operator[]/index.html @@ -1,4 +1,4 @@ - operator[] - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator[]

// (1)
+ operator[] - JSON for Modern C++      

nlohmann::basic_json::operator[]

// (1)
 reference operator[](size_type idx);
 const_reference operator[](size_type idx) const;
 
@@ -15,7 +15,7 @@
 // (4)
 reference operator[](const json_pointer& ptr);
 const_reference operator[](const json_pointer& ptr) const;
-
  1. Returns a reference to the array element at specified location idx.
  2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
  3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  4. Returns a reference to the element with specified JSON pointer ptr.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Iterator invalidation

For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

Parameters

idx (in)
index of the element to access
key (in)
object key of the element to access
ptr (in)
JSON pointer to the desired element

Return value

  1. (const) reference to the element at index idx
  2. (const) reference to the element at key key
  3. (const) reference to the element at key key
  4. (const) reference to the element pointed to by ptr

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
  2. The function can throw the following exceptions:
    • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
  3. See 2.
  4. The function can throw the following exceptions:
    • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
    • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
    • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
    • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.

Complexity

  1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
  2. Logarithmic in the size of the container.
  3. Logarithmic in the size of the container.
  4. Logarithmic in the size of the container.

Notes

Undefined behavior and runtime assertions

  1. If the element with key idx does not exist, the behavior is undefined.
  2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
  1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

  2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

  3. See 2.

  4. null values are created in arrays and objects if necessary.

    In particular:

    • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
    • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
    • The special value - is treated as a synonym for the index past the end.

Examples

Example: (1) access specified array element

The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

#include <iostream>
+
  1. Returns a reference to the array element at specified location idx.
  2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
  3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
  4. Returns a reference to the element with specified JSON pointer ptr.

Template parameters

KeyType
A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).

Iterator invalidation

For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

Parameters

idx (in)
index of the element to access
key (in)
object key of the element to access
ptr (in)
JSON pointer to the desired element

Return value

  1. (const) reference to the element at index idx
  2. (const) reference to the element at key key
  3. (const) reference to the element at key key
  4. (const) reference to the element pointed to by ptr

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
  2. The function can throw the following exceptions:
    • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
  3. See 2.
  4. The function can throw the following exceptions:
    • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
    • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
    • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
    • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.

Complexity

  1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
  2. Logarithmic in the size of the container.
  3. Logarithmic in the size of the container.
  4. Logarithmic in the size of the container.

Notes

Undefined behavior and runtime assertions

  1. If the element with key idx does not exist, the behavior is undefined.
  2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
  1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

  2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

  3. See 2.

  4. null values are created in arrays and objects if necessary.

    In particular:

    • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
    • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
    • The special value - is treated as a synonym for the index past the end.

Examples

Example: (1) access specified array element

The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -197,7 +197,7 @@
     std::cout << object["two"sv] << '\n';
 }
 

Output:

2
-
Example: (4) access specified element via JSON Pointer

The example below shows how values can be read and written using JSON Pointers.

#include <iostream>
+
Example: (4) access specified element via JSON Pointer

The example below shows how values can be read and written using JSON Pointers.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -254,7 +254,7 @@
 {"array":[1,2],"boolean":true,"number":1,"string":"bar"}
 [1,21,null,null,44]
 [1,21,null,null,44,55]
-
Example: (4) access specified element via JSON Pointer (const)

The example below shows how values can be read using JSON Pointers.

#include <iostream>
+
Example: (4) access specified element via JSON Pointer (const)

The example below shows how values can be read using JSON Pointers.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -283,4 +283,4 @@
 "foo"
 [1,2]
 2
-

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0.
  2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
  3. Added in version 3.11.0.
  4. Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ValueType/index.html b/api/basic_json/operator_ValueType/index.html index c4d905dbd..19c5f5b27 100644 --- a/api/basic_json/operator_ValueType/index.html +++ b/api/basic_json/operator_ValueType/index.html @@ -1,10 +1,10 @@ - operator ValueType - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator ValueType

template<typename ValueType>
+ operator ValueType - JSON for Modern C++      

nlohmann::basic_json::operator ValueType

template<typename ValueType>
 JSON_EXPLICIT operator ValueType() const;
-

Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

Template parameters

ValueType
the value type to return

Return value

copy of the JSON value, converted to ValueType

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Complexity

Linear in the size of the JSON value.

Notes

Definition of JSON_EXPLICIT

By default JSON_EXPLICIT is defined to the empty string, so the signature is:

template<typename ValueType>
+

Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

Template parameters

ValueType
the value type to return

Return value

copy of the JSON value, converted to ValueType

Exceptions

Depends on what json_serializer<ValueType> from_json() method throws

Complexity

Linear in the size of the JSON value.

Notes

Definition of JSON_EXPLICIT

By default JSON_EXPLICIT is defined to the empty string, so the signature is:

template<typename ValueType>
 operator ValueType() const;
 

If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

template<typename ValueType>
 explicit operator ValueType() const;
-

That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

Future behavior change

Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

Examples

Example

The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

#include <iostream>
+

That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

Future behavior change

Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

Examples

Example

The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

#include <iostream>
 #include <unordered_map>
 #include <nlohmann/json.hpp>
 
@@ -76,4 +76,4 @@
 boolean: true
 array: [1,2,3,4,5]
 [json.exception.type_error.302] type must be boolean, but is string
-

Version history

\ No newline at end of file +

Version history

\ No newline at end of file diff --git a/api/basic_json/operator_eq/index.html b/api/basic_json/operator_eq/index.html index 0ebd89103..372c59e2f 100644 --- a/api/basic_json/operator_eq/index.html +++ b/api/basic_json/operator_eq/index.html @@ -1,4 +1,4 @@ - operator== - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator==

// until C++20
+ operator== - JSON for Modern C++      

nlohmann::basic_json::operator==

// until C++20
 bool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -14,7 +14,7 @@
     template<typename ScalarType>
     bool operator==(ScalarType rhs) const noexcept;                   // (2)
 };
-
  1. Compares two JSON values for equality according to the following rules:

    • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
    • Integer and floating-point numbers are automatically converted before comparison.
  2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether the values lhs/*this and rhs are equal

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing special values

  • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
    1. Comparing a NaN with itself.
    2. Comparing a NaN with another NaN.
    3. Comparing a NaN and any other number.
  • JSON null values are all equal.
  • Discarded values never compare equal to themselves.

Comparing floating-point numbers

Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
+
  1. Compares two JSON values for equality according to the following rules:

    • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
    • Integer and floating-point numbers are automatically converted before comparison.
  2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether the values lhs/*this and rhs are equal

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing special values

  • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
    1. Comparing a NaN with itself.
    2. Comparing a NaN with another NaN.
    3. Comparing a NaN and any other number.
  • JSON null values are all equal.
  • Discarded values never compare equal to themselves.

Comparing floating-point numbers

Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
 inline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept
 {
     return std::abs(a - b) <= epsilon;
@@ -34,7 +34,7 @@
     }
 ...
 }
-

Comparing different basic_json specializations

Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

{
+

Comparing different basic_json specializations

Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

{
    "version": 1,
    "type": "integer"
 }
@@ -60,7 +60,7 @@
 }
 

Output:

true
 false
-

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -88,7 +88,7 @@
 {"A":"a","B":"b"} == {"A":"a","B":"b"} true
 17 == 17.0 true
 "foo" == "bar" false
-
Example

The example demonstrates comparing several JSON types against the null pointer (JSON null).

#include <iostream>
+
Example

The example demonstrates comparing several JSON types against the null pointer (JSON null).

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -115,4 +115,4 @@
 17 == nullptr false
 "foo" == nullptr false
 null == nullptr true
-

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ge/index.html b/api/basic_json/operator_ge/index.html index 1be6bfb3e..cea4c66c0 100644 --- a/api/basic_json/operator_ge/index.html +++ b/api/basic_json/operator_ge/index.html @@ -1,4 +1,4 @@ - operator>= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator>=

// until C++20
+ operator>= - JSON for Modern C++      

nlohmann::basic_json::operator>=

// until C++20
 bool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -6,7 +6,7 @@
 
 template<typename ScalarType>
 bool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)
-
  1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs < rhs) (see operator<).
  2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than or equal to rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+
  1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs < rhs) (see operator<).
  2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than or equal to rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} >= {"A":"a","B":"b"} true
 17 >= 17.0000000000001 false
 "foo" >= "bar" true
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_gt/index.html b/api/basic_json/operator_gt/index.html index 296db41a0..2b554d1c4 100644 --- a/api/basic_json/operator_gt/index.html +++ b/api/basic_json/operator_gt/index.html @@ -1,4 +1,4 @@ - operator> - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator>

// until C++20
+ operator> - JSON for Modern C++      

nlohmann::basic_json::operator>

// until C++20
 bool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -6,7 +6,7 @@
 
 template<typename ScalarType>
 bool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)
-
  1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
  2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is greater than rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+
  1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
  2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is greater than rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} > {"A":"a","B":"b"} false
 17 > 17.0000000000001 false
 "foo" > "bar" true
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_le/index.html b/api/basic_json/operator_le/index.html index 06ff45466..a723a400a 100644 --- a/api/basic_json/operator_le/index.html +++ b/api/basic_json/operator_le/index.html @@ -1,4 +1,4 @@ - operator<= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<=

// until C++20
+ operator<= - JSON for Modern C++      

nlohmann::basic_json::operator<=

// until C++20
 bool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -6,7 +6,7 @@
 
 template<typename ScalarType>
 bool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)
-
  1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(rhs < lhs) (see operator<).
  2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than or equal to rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+
  1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(rhs < lhs) (see operator<).
  2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than or equal to rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} <= {"A":"a","B":"b"} true
 17 <= 17.0000000000001 true
 "foo" <= "bar" false
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_lt/index.html b/api/basic_json/operator_lt/index.html index 39addd31b..0aaddd639 100644 --- a/api/basic_json/operator_lt/index.html +++ b/api/basic_json/operator_lt/index.html @@ -1,4 +1,4 @@ - operator< - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<

// until C++20
+ operator< - JSON for Modern C++      

nlohmann::basic_json::operator<

// until C++20
 bool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -6,7 +6,7 @@
 
 template<typename ScalarType>
 bool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)
-
  1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

    • If either operand is discarded, the comparison yields false.
    • If both operands have the same type, the values are compared using their respective operator<.
    • Integer and floating-point numbers are automatically converted before comparison.
    • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
      1. null
      2. boolean
      3. number (all types)
      4. object
      5. array
      6. string
      7. binary For instance, any boolean value is considered less than any string.
  2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+
  1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

    • If either operand is discarded, the comparison yields false.
    • If both operands have the same type, the values are compared using their respective operator<.
    • Integer and floating-point numbers are automatically converted before comparison.
    • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
      1. null
      2. boolean
      3. number (all types)
      4. object
      5. array
      6. string
      7. binary For instance, any boolean value is considered less than any string.
  2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether lhs is less than rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Operator overload resolution

Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -34,4 +34,4 @@
 {"A":"a","B":"b"} == {"A":"a","B":"b"} false
 17 == 17.0000000000001 true
 "foo" == "bar" false
-

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
  2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_ne/index.html b/api/basic_json/operator_ne/index.html index cac56f965..9704e135d 100644 --- a/api/basic_json/operator_ne/index.html +++ b/api/basic_json/operator_ne/index.html @@ -1,4 +1,4 @@ - operator!= - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator!=

// until C++20
+ operator!= - JSON for Modern C++      

nlohmann::basic_json::operator!=

// until C++20
 bool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)
 
 template<typename ScalarType>
@@ -14,7 +14,7 @@
     template<typename ScalarType>
     bool operator!=(ScalarType rhs) const noexcept;                   // (2)
 };
-
  1. Compares two JSON values for inequality according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
  2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether the values lhs/*this and rhs are not equal

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
+
  1. Compares two JSON values for inequality according to the following rules:

    • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
    • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
  2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

lhs (in)
first value to consider
rhs (in)
second value to consider

Return value

whether the values lhs/*this and rhs are not equal

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

Examples

Example

The example demonstrates comparing several JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -42,7 +42,7 @@
 {"A":"a","B":"b"} != {"A":"a","B":"b"} false
 17 != 17.0 false
 "foo" != "bar" true
-
Example

The example demonstrates comparing several JSON types against the null pointer (JSON null).

#include <iostream>
+
Example

The example demonstrates comparing several JSON types against the null pointer (JSON null).

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -69,4 +69,4 @@
 17 != nullptr true
 "foo" != nullptr true
 null != nullptr false
-

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file +

Version history

  1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
  2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_spaceship/index.html b/api/basic_json/operator_spaceship/index.html index 45723b3f7..be60dff32 100644 --- a/api/basic_json/operator_spaceship/index.html +++ b/api/basic_json/operator_spaceship/index.html @@ -1,11 +1,11 @@ - operator - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator<=>

// since C++20
+ operator - JSON for Modern C++      

nlohmann::basic_json::operator<=>

// since C++20
 class basic_json {
     std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)
 
     template<typename ScalarType>
     std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)
 };
-
  1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

    • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
    • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
    • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
    • Otherwise, yields a result by comparing the type (see value_t).
  2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

rhs (in)
second value to consider

Return value

the std::partial_ordering of the 3-way comparison of *this and rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

  • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
    1. Comparing a NaN with itself.
    2. Comparing a NaN with another NaN.
    3. Comparing a NaN and any other number.

Examples

Example: (1) comparing JSON values

The example demonstrates comparing several JSON values.

#include <compare>
+
  1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

    • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
    • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
    • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
    • Otherwise, yields a result by comparing the type (see value_t).
  2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

Template parameters

ScalarType
a scalar type according to std::is_scalar<ScalarType>::value

Parameters

rhs (in)
second value to consider

Return value

the std::partial_ordering of the 3-way comparison of *this and rhs

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Linear.

Notes

Comparing NaN

  • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
    1. Comparing a NaN with itself.
    2. Comparing a NaN with another NaN.
    3. Comparing a NaN and any other number.

Examples

Example: (1) comparing JSON values

The example demonstrates comparing several JSON values.

#include <compare>
 #include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -49,7 +49,7 @@
 {"A":"a","B":"b"} <=> {"A":"a","B":"b"} := equivalent
 "foo" <=> 17 := greater
 "foo" <=> <discarded> := unordered
-
Example: (2) comparing JSON values and scalars

The example demonstrates comparing several JSON values and scalars.

#include <compare>
+
Example: (2) comparing JSON values and scalars

The example demonstrates comparing several JSON values and scalars.

#include <compare>
 #include <iostream>
 #include <nlohmann/json.hpp>
 
@@ -93,4 +93,4 @@
 17 <=> 17.000000 := equivalent
 17 <=> nan := unordered
 "17" <=> 17 := greater
-

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  1. Added in version 3.11.0.
  2. Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/operator_value_t/index.html b/api/basic_json/operator_value_t/index.html index 383742ee4..6c9973c8e 100644 --- a/api/basic_json/operator_value_t/index.html +++ b/api/basic_json/operator_value_t/index.html @@ -1,5 +1,5 @@ - operator value_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::operator value_t

constexpr operator value_t() const noexcept;
-

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies operator value_t() for all JSON types.

#include <iostream>
+ operator value_t - JSON for Modern C++      

nlohmann::basic_json::operator value_t

constexpr operator value_t() const noexcept;
+

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies operator value_t() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -45,4 +45,4 @@
 true
 true
 true
-

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/other_error/index.html b/api/basic_json/other_error/index.html index fdd1b3909..d56812bf3 100644 --- a/api/basic_json/other_error/index.html +++ b/api/basic_json/other_error/index.html @@ -1,4 +1,4 @@ - other_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::other_error

class other_error : public exception;
+ other_error - JSON for Modern C++      

nlohmann::basic_json::other_error

class other_error : public exception;
 

This exception is thrown in case of errors that cannot be classified with the other exception types.

Exceptions have ids 5xx (see list of other errors).

classDiagram
   direction LR
 
@@ -59,4 +59,4 @@
 }
 

Output:

message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
 exception id: 501
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/out_of_range/index.html b/api/basic_json/out_of_range/index.html index 954d32ff3..79df97495 100644 --- a/api/basic_json/out_of_range/index.html +++ b/api/basic_json/out_of_range/index.html @@ -1,4 +1,4 @@ - out_of_range - JSON for Modern C++
Skip to content

nlohmann::basic_json::out_of_range

class out_of_range : public exception;
+ out_of_range - JSON for Modern C++      

nlohmann::basic_json::out_of_range

class out_of_range : public exception;
 

This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

Exceptions have ids 4xx (see list of out-of-range errors).

classDiagram
   direction LR
 
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.out_of_range.401] array index 4 is out of range
 exception id: 401
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse/index.html b/api/basic_json/parse/index.html index 5adfbe0c7..5ecaf298d 100644 --- a/api/basic_json/parse/index.html +++ b/api/basic_json/parse/index.html @@ -1,4 +1,4 @@ - parse - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse

// (1)
+ parse - JSON for Modern C++      

nlohmann::basic_json::parse

// (1)
 template<typename InputType>
 static basic_json parse(InputType&& i,
                         const parser_callback_t cb = nullptr,
@@ -11,7 +11,7 @@
                         const parser_callback_t cb = nullptr,
                         const bool allow_exceptions = true,
                         const bool ignore_comments = false);
-
  1. Deserialize from a compatible input.
  2. Deserialize from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer (throws if null)
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters (throws if null)
  • a std::string
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType

a compatible iterator type, for instance.

  • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
  • a pair of pointers such as ptr and ptr + len

Parameters

i (in)
Input to parse from.
cb (in)
a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Parsing from a character array

The example below demonstrates the parse() function reading from an array.

#include <iostream>
+
  1. Deserialize from a compatible input.
  2. Deserialize from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer (throws if null)
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters (throws if null)
  • a std::string
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType

a compatible iterator type, for instance.

  • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
  • a pair of pointers such as ptr and ptr + len

Parameters

i (in)
Input to parse from.
cb (in)
a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional)
allow_exceptions (in)
whether to throw exceptions in case of a parse error (optional, true by default)
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Parsing from a character array

The example below demonstrates the parse() function reading from an array.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -331,4 +331,4 @@
 }
 

Output:

[json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \u000A or \n; last read: '"value without closing quotes<U+000A>'
 the input is invalid JSON
-

See also

  • accept - check if the input is valid JSON
  • operator>> - deserialize from stream

Version history

  • Added in version 1.0.0.
  • Overload for contiguous containers (1) added in version 2.0.3.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file +

See also

  • accept - check if the input is valid JSON
  • operator>> - deserialize from stream

Version history

  • Added in version 1.0.0.
  • Overload for contiguous containers (1) added in version 2.0.3.
  • Ignoring comments via ignore_comments added in version 3.9.0.
  • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

Deprecation

Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

\ No newline at end of file diff --git a/api/basic_json/parse_error/index.html b/api/basic_json/parse_error/index.html index 7cce38b08..568b14a7e 100644 --- a/api/basic_json/parse_error/index.html +++ b/api/basic_json/parse_error/index.html @@ -1,5 +1,5 @@ - parse_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse_error

class parse_error : public exception;
-

This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

Member byte holds the byte index of the last read character in the input file (see note below).

Exceptions have ids 1xx (see list of parse errors).

classDiagram
+ parse_error - JSON for Modern C++      

nlohmann::basic_json::parse_error

class parse_error : public exception;
+

This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

Member byte holds the byte index of the last read character in the input file (see note below).

Exceptions have ids 1xx (see list of parse errors).

classDiagram
   direction LR
 
     class std_exception ["std::exception"] {
@@ -50,4 +50,4 @@
 

Output:

message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal
 exception id: 101
 byte position of error: 8
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/parse_event_t/index.html b/api/basic_json/parse_event_t/index.html index 10c940a05..e4b9397f8 100644 --- a/api/basic_json/parse_event_t/index.html +++ b/api/basic_json/parse_event_t/index.html @@ -1,4 +1,4 @@ - parse_event_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::parse_event_t

enum class parse_event_t : std::uint8_t {
+ parse_event_t - JSON for Modern C++      

nlohmann::basic_json::parse_event_t

enum class parse_event_t : std::uint8_t {
     object_start,
     object_end,
     array_start,
@@ -6,4 +6,4 @@
     key,
     value
 };
-

The parser callback distinguishes the following events:

  • object_start: the parser read { and started to process a JSON object
  • key: the parser read a key of a value in an object
  • object_end: the parser read } and finished processing a JSON object
  • array_start: the parser read [ and started to process a JSON array
  • array_end: the parser read ] and finished processing a JSON array
  • value: the parser finished reading a JSON value

Examples

Example when certain parse events are triggered

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

The parser callback distinguishes the following events:

  • object_start: the parser read { and started to process a JSON object
  • key: the parser read a key of a value in an object
  • object_end: the parser read } and finished processing a JSON object
  • array_start: the parser read [ and started to process a JSON array
  • array_end: the parser read ] and finished processing a JSON array
  • value: the parser finished reading a JSON value

Examples

Example when certain parse events are triggered

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/parser_callback_t/index.html b/api/basic_json/parser_callback_t/index.html index c2d02c2e3..ad186874a 100644 --- a/api/basic_json/parser_callback_t/index.html +++ b/api/basic_json/parser_callback_t/index.html @@ -1,7 +1,7 @@ - parser_callback_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::parser_callback_t

template<typename BasicJsonType>
+ parser_callback_t - JSON for Modern C++      

nlohmann::basic_json::parser_callback_t

template<typename BasicJsonType>
 using parser_callback_t =
     std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;
-

With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

parameter event description parameter depth parameter parsed
parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

Example when certain parse events are triggered

Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

  • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
  • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.

Parameters

depth (in)
the depth of the recursion during parsing
event (in)
an event of type parse_event_t indicating the context in the callback function has been called
parsed (in, out)
the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events

Return value

Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

Examples

Example

The example below demonstrates the parse() function with and without callback function.

#include <iostream>
+

With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

parameter event description parameter depth parameter parsed
parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

Example when certain parse events are triggered

Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

  • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
  • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.

Parameters

depth (in)
the depth of the recursion during parsing
event (in)
an event of type parse_event_t indicating the context in the callback function has been called
parsed (in, out)
the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events

Return value

Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

Examples

Example

The example below demonstrates the parse() function with and without callback function.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -83,4 +83,4 @@
         "Width": 800
     }
 }
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/patch/index.html b/api/basic_json/patch/index.html index 9ac49ad11..106114e19 100644 --- a/api/basic_json/patch/index.html +++ b/api/basic_json/patch/index.html @@ -1,5 +1,5 @@ - patch - JSON for Modern C++
Skip to content

nlohmann::basic_json::patch

basic_json patch(const basic_json& json_patch) const;
-

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

Parameters

json_patch (in)
JSON patch document

Return value

patched document

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

Notes

The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
+ patch - JSON for Modern C++      

nlohmann::basic_json::patch

basic_json patch(const basic_json& json_patch) const;
+

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

Parameters

json_patch (in)
JSON patch document

Return value

patched document

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

Notes

The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -43,4 +43,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/patch_inplace/index.html b/api/basic_json/patch_inplace/index.html index edee230f0..5443b7622 100644 --- a/api/basic_json/patch_inplace/index.html +++ b/api/basic_json/patch_inplace/index.html @@ -1,5 +1,5 @@ - patch_inplace - JSON for Modern C++
Skip to content

nlohmann::basic_json::patch_inplace

void patch_inplace(const basic_json& json_patch) const;
-

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

Parameters

json_patch (in)
JSON patch document

Exception safety

No guarantees, value may be corrupted by an unsuccessful patch operation.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

Notes

Unlike patch, patch_inplace applies the operation "in place" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
+ patch_inplace - JSON for Modern C++      

nlohmann::basic_json::patch_inplace

void patch_inplace(const basic_json& json_patch) const;
+

JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

Parameters

json_patch (in)
JSON patch document

Exception safety

No guarantees, value may be corrupted by an unsuccessful patch operation.

Exceptions

  • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
  • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: "operation add must have member path".
  • Throws out_of_range.401 if an array index is out of range.
  • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: "key baz not found".
  • Throws out_of_range.405 if JSON pointer has no parent ("add", "remove", "move")
  • Throws out_of_range.501 if "test" operation was unsuccessful.

Complexity

Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

Notes

Unlike patch, patch_inplace applies the operation "in place" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

Examples

Example

The following code shows how a JSON patch is applied to a value.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -47,4 +47,4 @@
         "world"
     ]
 }
-

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file +

See also

Version history

  • Added in version 3.11.0.
\ No newline at end of file diff --git a/api/basic_json/push_back/index.html b/api/basic_json/push_back/index.html index 0372456dd..533222a4a 100644 --- a/api/basic_json/push_back/index.html +++ b/api/basic_json/push_back/index.html @@ -1,4 +1,4 @@ - push_back - JSON for Modern C++
Skip to content

nlohmann::basic_json::push_back

// (1)
+ push_back - JSON for Modern C++      

nlohmann::basic_json::push_back

// (1)
 void push_back(basic_json&& val);
 void push_back(const basic_json& val);
 
@@ -7,7 +7,7 @@
 
 // (3)
 void push_back(initializer_list_t init);
-
  1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

  2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

  3. This function allows using push_back with an initializer list. In case

    1. the current value is an object,
    2. the initializer list init contains only two elements, and
    3. the first element of init is a string,

    init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

Parameters

val (in)
the value to add to the JSON array/object
init (in)
an initializer list

Exceptions

All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: "cannot use push_back() with number"

Complexity

  1. Amortized constant.
  2. Logarithmic in the size of the container, O(log(size())).
  3. Linear in the size of the initializer list init.

Notes

(3) This function is required to resolve an ambiguous overload error, because pairs like {"key", "value"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

Examples

Example: (1) add element to array

The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
+
  1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

  2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

  3. This function allows using push_back with an initializer list. In case

    1. the current value is an object,
    2. the initializer list init contains only two elements, and
    3. the first element of init is a string,

    init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

Iterator invalidation

For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

Parameters

val (in)
the value to add to the JSON array/object
init (in)
an initializer list

Exceptions

All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: "cannot use push_back() with number"

Complexity

  1. Amortized constant.
  2. Logarithmic in the size of the container, O(log(size())).
  3. Linear in the size of the initializer list init.

Notes

(3) This function is required to resolve an ambiguous overload error, because pairs like {"key", "value"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

Examples

Example: (1) add element to array

The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -36,7 +36,7 @@
 null
 [1,2,3,4,5,6,7]
 ["first","second"]
-
Example: (2) add element to object

The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

#include <iostream>
+
Example: (2) add element to object

The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -96,4 +96,4 @@
 null
 {"four":4,"one":1,"three":3,"two":2}
 [["five",5]]
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/rbegin/index.html b/api/basic_json/rbegin/index.html index 0c47a75fa..972811ae2 100644 --- a/api/basic_json/rbegin/index.html +++ b/api/basic_json/rbegin/index.html @@ -1,4 +1,4 @@ - rbegin - JSON for Modern C++
Skip to content

nlohmann::basic_json::rbegin

reverse_iterator rbegin() noexcept;
+ rbegin - JSON for Modern C++      

nlohmann::basic_json::rbegin

reverse_iterator rbegin() noexcept;
 const_reverse_iterator rbegin() const noexcept;
 

Returns an iterator to the reverse-beginning; that is, the last element.

Illustration from cppreference.com

Return value

reverse iterator to the first element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for rbegin().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -17,4 +17,4 @@
     std::cout << *it << '\n';
 }
 

Output:

5
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/rend/index.html b/api/basic_json/rend/index.html index 72800c999..aec007ed7 100644 --- a/api/basic_json/rend/index.html +++ b/api/basic_json/rend/index.html @@ -1,4 +1,4 @@ - rend - JSON for Modern C++
Skip to content

nlohmann::basic_json::rend

reverse_iterator rend() noexcept;
+ rend - JSON for Modern C++      

nlohmann::basic_json::rend

reverse_iterator rend() noexcept;
 const_reverse_iterator rend() const noexcept;
 

Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

Illustration from cppreference.com

Return value

reverse iterator to the element following the last element

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code shows an example for eend().

#include <iostream>
 #include <nlohmann/json.hpp>
@@ -20,4 +20,4 @@
     std::cout << *it << '\n';
 }
 

Output:

1
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/sax_parse/index.html b/api/basic_json/sax_parse/index.html index 9bd408d45..159332c39 100644 --- a/api/basic_json/sax_parse/index.html +++ b/api/basic_json/sax_parse/index.html @@ -1,4 +1,4 @@ - sax_parse - JSON for Modern C++
Skip to content

nlohmann::basic_json::sax_parse

// (1)
+ sax_parse - JSON for Modern C++      

nlohmann::basic_json::sax_parse

// (1)
 template <typename InputType, typename SAX>
 static bool sax_parse(InputType&& i,
                       SAX* sax,
@@ -13,7 +13,7 @@
                       input_format_t format = input_format_t::json,
                       const bool strict = true,
                       const bool ignore_comments = false);
-

Read from input and generate SAX events

  1. Read from a compatible input.
  2. Read from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

The SAX event lister must follow the interface of json_sax.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
Description
SAX
Description

Parameters

i (in)
Input to parse from.
sax (in)
SAX event listener
format (in)
the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information
strict (in)
whether the input has to be consumed completely (optional, true by default)
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

return value of the last processed SAX event

Exception safety

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Example

The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

#include <iostream>
+

Read from input and generate SAX events

  1. Read from a compatible input.
  2. Read from a pair of character iterators

    The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

The SAX event lister must follow the interface of json_sax.

Template parameters

InputType

A compatible input, for instance:

  • an std::istream object
  • a FILE pointer
  • a C-style array of characters
  • a pointer to a null-terminated string of single byte characters
  • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
IteratorType
Description
SAX
Description

Parameters

i (in)
Input to parse from.
sax (in)
SAX event listener
format (in)
the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information
strict (in)
whether the input has to be consumed completely (optional, true by default)
ignore_comments (in)
whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default)
first (in)
iterator to start of character range
last (in)
iterator to end of character range

Return value

return value of the last processed SAX event

Exception safety

Complexity

Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

Notes

A UTF-8 byte order mark is silently ignored.

Examples

Example

The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

#include <iostream>
 #include <iomanip>
 #include <sstream>
 #include <nlohmann/json.hpp>
@@ -181,4 +181,4 @@
             ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
 
 result: false
-

Version history

  • Added in version 3.2.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file +

Version history

  • Added in version 3.2.0.
  • Ignoring comments via ignore_comments added in version 3.9.0.

Deprecation

Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

\ No newline at end of file diff --git a/api/basic_json/size/index.html b/api/basic_json/size/index.html index 3bb4964bd..770a82fbc 100644 --- a/api/basic_json/size/index.html +++ b/api/basic_json/size/index.html @@ -1,5 +1,5 @@ - size - JSON for Modern C++
Skip to content

nlohmann::basic_json::size

size_type size() const noexcept;
-

Returns the number of elements in a JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0
boolean 1
string 1
number 1
binary 1
object result of function object_t::size()
array result of function array_t::size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

Notes

This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

Examples

Example

The following code calls size() on the different value types.

#include <iostream>
+ size - JSON for Modern C++      

nlohmann::basic_json::size

size_type size() const noexcept;
+

Returns the number of elements in a JSON value.

Return value

The return value depends on the different types and is defined as follows:

Value type return value
null 0
boolean 1
string 1
number 1
binary 1
object result of function object_t::size()
array result of function array_t::size()

Exception safety

No-throw guarantee: this function never throws exceptions.

Complexity

Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

Notes

This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

Examples

Example

The following code calls size() on the different value types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -37,4 +37,4 @@
 5
 0
 1
-

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Extended to return 1 for binary types in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/start_pos/index.html b/api/basic_json/start_pos/index.html new file mode 100644 index 000000000..172612c4a --- /dev/null +++ b/api/basic_json/start_pos/index.html @@ -0,0 +1,104 @@ + start_pos - JSON for Modern C++
Skip to content

nlohmann::basic_json::start_pos

#if JSON_DIAGNOSTIC_POSITIONS
+constexpr std::size_t start_pos() const noexcept;
+#endif
+

Returns the position of the first character in the JSON string from which the value was parsed from.

JSON type return value
object position of the opening {
array position of the opening [
string position of the opening "
number position of the first character
boolean position of t for true and f for false
null position of n

Return value

the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

Note

The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

Invalidation

The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

Examples

Example
#include <iostream>
+
+#define JSON_DIAGNOSTIC_POSITIONS 1
+#include <nlohmann/json.hpp>
+
+using json = nlohmann::json;
+
+int main()
+{
+    std::string json_string = R"(
+    {
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+    )";
+    json j = json::parse(json_string);
+
+    std::cout << "Root diagnostic positions: \n";
+    std::cout << "\tstart_pos: " << j.start_pos() << '\n';
+    std::cout << "\tend_pos:" << j.end_pos() << "\n";
+    std::cout << "Original string: \n";
+    std::cout << "{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << "\n\n";
+
+    std::cout << "address diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"].start_pos(), j["address"].end_pos() - j["address"].start_pos()) << "\n\n";
+
+    std::cout << "street diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"]["street"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"]["street"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "\"Fake Street\"" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"]["street"].start_pos(), j["address"]["street"].end_pos() - j["address"]["street"].start_pos()) << "\n\n";
+
+    std::cout << "housenumber diagnostic positions: \n";
+    std::cout << "\tstart_pos:" << j["address"]["housenumber"].start_pos() << '\n';
+    std::cout << "\tend_pos:" << j["address"]["housenumber"].end_pos() << "\n\n";
+    std::cout << "Original string: \n";
+    std::cout << "1" << "\n";
+    std::cout << "Parsed string: \n";
+    std::cout << json_string.substr(j["address"]["housenumber"].start_pos(), j["address"]["housenumber"].end_pos() - j["address"]["housenumber"].start_pos()) << "\n\n";
+}
+

Output:

Root diagnostic positions: 
+    start_pos: 5
+    end_pos:109
+Original string: 
+{
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+Parsed string: 
+{
+        "address": {
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+    }
+
+address diagnostic positions: 
+    start_pos:26
+    end_pos:103
+
+Original string: 
+{            "street": "Fake Street",
+            "housenumber": 1
+        }
+Parsed string: 
+{
+            "street": "Fake Street",
+            "housenumber": 1
+        }
+
+street diagnostic positions: 
+    start_pos:50
+    end_pos:63
+
+Original string: 
+"Fake Street"
+Parsed string: 
+"Fake Street"
+
+housenumber diagnostic positions: 
+    start_pos:92
+    end_pos:93
+
+Original string: 
+1
+Parsed string: 
+1
+

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/std_hash/index.html b/api/basic_json/std_hash/index.html index 27cf0177c..6362dd316 100644 --- a/api/basic_json/std_hash/index.html +++ b/api/basic_json/std_hash/index.html @@ -1,7 +1,7 @@ - std::hash<basic_json> - JSON for Modern C++
Skip to content

std::hash<nlohmann::basic_json>

namespace std {
+ std::hash<basic_json> - JSON for Modern C++      

std::hash<nlohmann::basic_json>

namespace std {
     struct hash<nlohmann::basic_json>;
 }
-

Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

Examples

Example

The example shows how to calculate hash values for different JSON values.

#include <iostream>
+

Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

Examples

Example

The example shows how to calculate hash values for different JSON values.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -28,4 +28,4 @@
 hash({}) = 2654435832
 hash([]) = 2654435899
 hash({"hello": "world"}) = 4469488738203676328
-

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file +

Note the output is platform-dependent.

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/std_swap/index.html b/api/basic_json/std_swap/index.html index 63125c77b..79a570359 100644 --- a/api/basic_json/std_swap/index.html +++ b/api/basic_json/std_swap/index.html @@ -1,7 +1,7 @@ - std::swap<basic_json> - JSON for Modern C++
Skip to content

std::swap<basic_json>

namespace std {
+ std::swap<basic_json> - JSON for Modern C++      

std::swap<basic_json>

namespace std {
     void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);
 }
-

Exchanges the values of two JSON objects.

Parameters

j1 (in, out)
value to be replaced by j2
j2 (in, out)
value to be replaced by j1

Possible implementation

void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)
+

Exchanges the values of two JSON objects.

Parameters

j1 (in, out)
value to be replaced by j2
j2 (in, out)
value to be replaced by j1

Possible implementation

void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)
 {
     j1.swap(j2);
 }
@@ -26,4 +26,4 @@
 }
 

Output:

j1 = {"one":1,"two":2} | j2 = [1,2,4,8,16]
 j1 = [1,2,4,8,16] | j2 = {"one":1,"two":2}
-

See also

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file +

See also

Version history

  • Added in version 1.0.0.
  • Extended for arbitrary basic_json types in version 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/string_t/index.html b/api/basic_json/string_t/index.html index 514dec466..36f9eb643 100644 --- a/api/basic_json/string_t/index.html +++ b/api/basic_json/string_t/index.html @@ -1,5 +1,5 @@ - string_t - JSON for Modern C++
Skip to content

nlohmann::basic_json::string_t

using string_t = StringType;
-

The type used to store JSON strings.

RFC 8259 describes JSON strings as follows:

A string is a sequence of zero or more Unicode characters.

To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

Template parameters

StringType
the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t.

Notes

Default type

With the default values for StringType (std::string), the default value for string_t is std::string.

Encoding

Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

String comparison

RFC 8259 states:

Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

This implementation is interoperable as it does compare strings code unit by code unit.

Storage

String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

Examples

Example

The following code shows that string_t is by default, a typedef to std::string.

#include <iostream>
+ string_t - JSON for Modern C++      

nlohmann::basic_json::string_t

using string_t = StringType;
+

The type used to store JSON strings.

RFC 8259 describes JSON strings as follows:

A string is a sequence of zero or more Unicode characters.

To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

Template parameters

StringType
the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t.

Notes

Default type

With the default values for StringType (std::string), the default value for string_t is std::string.

Encoding

Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

String comparison

RFC 8259 states:

Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

This implementation is interoperable as it does compare strings code unit by code unit.

Storage

String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

Examples

Example

The following code shows that string_t is by default, a typedef to std::string.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -10,4 +10,4 @@
     std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;
 }
 

Output:

true
-

Version history

  • Added in version 1.0.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
\ No newline at end of file diff --git a/api/basic_json/swap/index.html b/api/basic_json/swap/index.html index 75382424f..2db89cee0 100644 --- a/api/basic_json/swap/index.html +++ b/api/basic_json/swap/index.html @@ -1,4 +1,4 @@ - swap - JSON for Modern C++
Skip to content

nlohmann::basic_json::swap

// (1)
+ swap - JSON for Modern C++      

nlohmann::basic_json::swap

// (1)
 void swap(reference other) noexcept;
 
 // (2)
@@ -18,7 +18,7 @@
 
 // (7)
 void swap(typename binary_t::container_type& other);
-
  1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
  3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.

Parameters

other (in, out)
value to exchange the contents with
left (in, out)
value to exchange the contents with
right (in, out)
value to exchange the contents with

Exceptions

  1. No-throw guarantee: this function never throws exceptions.
  2. No-throw guarantee: this function never throws exceptions.
  3. Throws type_error.310 if called on JSON values other than arrays; example: "cannot use swap() with boolean"
  4. Throws type_error.310 if called on JSON values other than objects; example: "cannot use swap() with boolean"
  5. Throws type_error.310 if called on JSON values other than strings; example: "cannot use swap() with boolean"
  6. Throws type_error.310 if called on JSON values other than binaries; example: "cannot use swap() with boolean"
  7. Throws type_error.310 if called on JSON values other than binaries; example: "cannot use swap() with boolean"

Complexity

Constant.

Examples

Example: Swap JSON value (1, 2)

The example below shows how JSON values can be swapped with swap().

#include <iostream>
+
  1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
  3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
  7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.

Parameters

other (in, out)
value to exchange the contents with
left (in, out)
value to exchange the contents with
right (in, out)
value to exchange the contents with

Exceptions

  1. No-throw guarantee: this function never throws exceptions.
  2. No-throw guarantee: this function never throws exceptions.
  3. Throws type_error.310 if called on JSON values other than arrays; example: "cannot use swap() with boolean"
  4. Throws type_error.310 if called on JSON values other than objects; example: "cannot use swap() with boolean"
  5. Throws type_error.310 if called on JSON values other than strings; example: "cannot use swap() with boolean"
  6. Throws type_error.310 if called on JSON values other than binaries; example: "cannot use swap() with boolean"
  7. Throws type_error.310 if called on JSON values other than binaries; example: "cannot use swap() with boolean"

Complexity

Constant.

Examples

Example: Swap JSON value (1, 2)

The example below shows how JSON values can be swapped with swap().

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -126,4 +126,4 @@
 }
 

Output:

value = {"bytes":[4,5,6],"subtype":null}
 binary = {"bytes":[1,2,3],"subtype":null}
-

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file +

See also

Version history

  1. Since version 1.0.0.
  2. Since version 1.0.0.
  3. Since version 1.0.0.
  4. Since version 1.0.0.
  5. Since version 1.0.0.
  6. Since version 3.8.0.
  7. Since version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/to_bjdata/index.html b/api/basic_json/to_bjdata/index.html index a12e40cd9..b306776c5 100644 --- a/api/basic_json/to_bjdata/index.html +++ b/api/basic_json/to_bjdata/index.html @@ -1,4 +1,4 @@ - to_bjdata - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_bjdata

// (1)
+ to_bjdata - JSON for Modern C++      

nlohmann::basic_json::to_bjdata

// (1)
 static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
                                            const bool use_size = false,
                                            const bool use_type = false,
@@ -11,7 +11,7 @@
 static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
                       const bool use_size = false, const bool use_type = false,
                       const bjdata_version_t version = bjdata_version_t::draft2);
-

Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the BJData serialization.
  2. Writes the BJData serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to
use_size (in)
whether to add size annotations to container types; optional, false by default.
use_type (in)
whether to add type annotations to container types (must be combined with use_size = true); optional, false by default.
version (in)
which version of BJData to use (see draft 3); optional, bjdata_version_t::draft2 by default.

Return value

  1. BJData serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in BJData format.

#include <iostream>
+

Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the BJData serialization.
  2. Writes the BJData serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to
use_size (in)
whether to add size annotations to container types; optional, false by default.
use_type (in)
whether to add type annotations to container types (must be combined with use_size = true); optional, false by default.
version (in)
which version of BJData to use (see draft 3); optional, bjdata_version_t::draft2 by default.

Return value

  1. BJData serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in BJData format.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -79,4 +79,4 @@
 [i1i2i3i4i5i6i7i8]
 [#i8i1i2i3i4i5i6i7i8
 [$i#i812345678
-

Version history

  • Added in version 3.11.0.
  • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
\ No newline at end of file +

Version history

  • Added in version 3.11.0.
  • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
\ No newline at end of file diff --git a/api/basic_json/to_bson/index.html b/api/basic_json/to_bson/index.html index dd0136974..84d18ee3e 100644 --- a/api/basic_json/to_bson/index.html +++ b/api/basic_json/to_bson/index.html @@ -1,10 +1,10 @@ - to_bson - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_bson

// (1)
+ to_bson - JSON for Modern C++      

nlohmann::basic_json::to_bson

// (1)
 static std::vector<std::uint8_t> to_bson(const basic_json& j);
 
 // (2)
 static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);
 static void to_bson(const basic_json& j, detail::output_adapter<char> o);
-

BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

  1. Returns a byte vector containing the BSON serialization.
  2. Writes the BSON serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. BSON serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in BSON format.

#include <iostream>
+

BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

  1. Returns a byte vector containing the BSON serialization.
  2. Writes the BSON serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. BSON serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in BSON format.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 
-

Version history

  • Added in version 3.4.0.
\ No newline at end of file +

Version history

  • Added in version 3.4.0.
\ No newline at end of file diff --git a/api/basic_json/to_cbor/index.html b/api/basic_json/to_cbor/index.html index 6bf513810..b26076f54 100644 --- a/api/basic_json/to_cbor/index.html +++ b/api/basic_json/to_cbor/index.html @@ -1,10 +1,10 @@ - to_cbor - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_cbor

// (1)
+ to_cbor - JSON for Modern C++      

nlohmann::basic_json::to_cbor

// (1)
 static std::vector<std::uint8_t> to_cbor(const basic_json& j);
 
 // (2)
 static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);
 static void to_cbor(const basic_json& j, detail::output_adapter<char> o);
-

Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the CBOR serialization.
  2. Writes the CBOR serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. CBOR serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in CBOR format.

#include <iostream>
+

Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the CBOR serialization.
  2. Writes the CBOR serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. CBOR serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in CBOR format.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

  • Added in version 2.0.9.
  • Compact representation of floating-point numbers added in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 2.0.9.
  • Compact representation of floating-point numbers added in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/to_msgpack/index.html b/api/basic_json/to_msgpack/index.html index 4d719bdf6..230a7cd5b 100644 --- a/api/basic_json/to_msgpack/index.html +++ b/api/basic_json/to_msgpack/index.html @@ -1,10 +1,10 @@ - to_msgpack - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_msgpack

// (1)
+ to_msgpack - JSON for Modern C++      

nlohmann::basic_json::to_msgpack

// (1)
 static std::vector<std::uint8_t> to_msgpack(const basic_json& j);
 
 // (2)
 static void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);
 static void to_msgpack(const basic_json& j, detail::output_adapter<char> o);
-

Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the MessagePack serialization.
  2. Writes the MessagePack serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. MessagePack serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in MessagePack format.

#include <iostream>
+

Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the MessagePack serialization.
  2. Writes the MessagePack serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to

Return value

  1. MessagePack serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in MessagePack format.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -27,4 +27,4 @@
     std::cout << std::endl;
 }
 

Output:

0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
-

Version history

  • Added in version 2.0.9.
\ No newline at end of file +

Version history

  • Added in version 2.0.9.
\ No newline at end of file diff --git a/api/basic_json/to_string/index.html b/api/basic_json/to_string/index.html index a169cba6c..a6d050b68 100644 --- a/api/basic_json/to_string/index.html +++ b/api/basic_json/to_string/index.html @@ -1,6 +1,6 @@ - to_string - JSON for Modern C++
Skip to content

to_string(basic_json)

template <typename BasicJsonType>
+ to_string - JSON for Modern C++      

to_string(basic_json)

template <typename BasicJsonType>
 std::string to_string(const BasicJsonType& j);
-

This function implements a user-defined to_string for JSON objects.

Template parameters

BasicJsonType
a specialization of basic_json

Return value

string containing the serialization of the JSON value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Exceptions

Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

Complexity

Linear.

Possible implementation

template <typename BasicJsonType>
+

This function implements a user-defined to_string for JSON objects.

Template parameters

BasicJsonType
a specialization of basic_json

Return value

string containing the serialization of the JSON value

Exception safety

Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

Exceptions

Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

Complexity

Linear.

Possible implementation

template <typename BasicJsonType>
 std::string to_string(const BasicJsonType& j)
 {
     return j.dump();
@@ -28,4 +28,4 @@
 

Output:

{"one":1,"two":2}
 
 42
-

See also

Version history

Added in version 3.7.0.

\ No newline at end of file +

See also

Version history

Added in version 3.7.0.

\ No newline at end of file diff --git a/api/basic_json/to_ubjson/index.html b/api/basic_json/to_ubjson/index.html index b2e683108..7806e1870 100644 --- a/api/basic_json/to_ubjson/index.html +++ b/api/basic_json/to_ubjson/index.html @@ -1,4 +1,4 @@ - to_ubjson - JSON for Modern C++
Skip to content

nlohmann::basic_json::to_ubjson

// (1)
+ to_ubjson - JSON for Modern C++      

nlohmann::basic_json::to_ubjson

// (1)
 static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
                                            const bool use_size = false,
                                            const bool use_type = false);
@@ -8,7 +8,7 @@
                       const bool use_size = false, const bool use_type = false);
 static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
                       const bool use_size = false, const bool use_type = false);
-

Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the UBJSON serialization.
  2. Writes the UBJSON serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to
use_size (in)
whether to add size annotations to container types; optional, false by default.
use_type (in)
whether to add type annotations to container types (must be combined with use_size = true); optional, false by default.

Return value

  1. UBJSON serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in UBJSON format.

#include <iostream>
+

Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

  1. Returns a byte vector containing the UBJSON serialization.
  2. Writes the UBJSON serialization to an output adapter.

The exact mapping and its limitations is described on a dedicated page.

Parameters

j (in)
JSON value to serialize
o (in)
output adapter to write serialization to
use_size (in)
whether to add size annotations to container types; optional, false by default.
use_type (in)
whether to add type annotations to container types (must be combined with use_size = true); optional, false by default.

Return value

  1. UBJSON serialization as byte vector
  2. (none)

Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

Complexity

Linear in the size of the JSON value j.

Examples

Example

The example shows the serialization of a JSON value to a byte vector in UBJSON format.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -76,4 +76,4 @@
 [i1i2i3i4i5i6i7i8]
 [#i8i1i2i3i4i5i6i7i8
 [$i#i812345678
-

Version history

  • Added in version 3.1.0.
\ No newline at end of file +

Version history

  • Added in version 3.1.0.
\ No newline at end of file diff --git a/api/basic_json/type/index.html b/api/basic_json/type/index.html index 86cd4c86f..ab5b12b1e 100644 --- a/api/basic_json/type/index.html +++ b/api/basic_json/type/index.html @@ -1,5 +1,5 @@ - type - JSON for Modern C++
Skip to content

nlohmann::basic_json::type

constexpr value_t type() const noexcept;
-

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type() for all JSON types.

#include <iostream>
+ type - JSON for Modern C++      

nlohmann::basic_json::type

constexpr value_t type() const noexcept;
+

Return the type of the JSON value as a value from the value_t enumeration.

Return value

the type of the JSON value

Value type return value
null value_t::null
boolean value_t::boolean
string value_t::string
number (integer) value_t::number_integer
number (unsigned integer) value_t::number_unsigned
number (floating-point) value_t::number_float
object value_t::object
array value_t::array
binary value_t::binary
discarded value_t::discarded

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -35,4 +35,4 @@
 true
 true
 true
-

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Added unsigned integer type in version 2.0.0.
  • Added binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/type_error/index.html b/api/basic_json/type_error/index.html index b5e0a736d..ccd55840c 100644 --- a/api/basic_json/type_error/index.html +++ b/api/basic_json/type_error/index.html @@ -1,5 +1,5 @@ - type_error - JSON for Modern C++
Skip to content

nlohmann::basic_json::type_error

class type_error : public exception;
-

This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

Exceptions have ids 3xx (see list of type errors).

classDiagram
+ type_error - JSON for Modern C++      

nlohmann::basic_json::type_error

class type_error : public exception;
+

This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

Exceptions have ids 3xx (see list of type errors).

classDiagram
   direction LR
 
     class std_exception ["std::exception"] {
@@ -49,4 +49,4 @@
 }
 

Output:

message: [json.exception.type_error.308] cannot use push_back() with string
 exception id: 308
-

See also

Version history

  • Since version 3.0.0.
\ No newline at end of file +

See also

Version history

\ No newline at end of file diff --git a/api/basic_json/type_name/index.html b/api/basic_json/type_name/index.html index 3304d58ab..a2f18e496 100644 --- a/api/basic_json/type_name/index.html +++ b/api/basic_json/type_name/index.html @@ -1,5 +1,5 @@ - type_name - JSON for Modern C++
Skip to content

nlohmann::basic_json::type_name

const char* type_name() const noexcept;
-

Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

Return value

a string representation of the type (value_t):

Value type return value
null "null"
boolean "boolean"
string "string"
number (integer, unsigned integer, floating-point) "number"
object "object"
array "array"
binary "binary"
discarded "discarded"

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type_name() for all JSON types.

#include <iostream>
+ type_name - JSON for Modern C++      

nlohmann::basic_json::type_name

const char* type_name() const noexcept;
+

Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

Return value

a string representation of the type (value_t):

Value type return value
null "null"
boolean "boolean"
string "string"
number (integer, unsigned integer, floating-point) "number"
object "object"
array "array"
binary "binary"
discarded "discarded"

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Examples

Example

The following code exemplifies type_name() for all JSON types.

#include <iostream>
 #include <nlohmann/json.hpp>
 
 using json = nlohmann::json;
@@ -34,4 +34,4 @@
 {"one":1,"two":2} is an object
 [1,2,4,8,16] is an array
 "Hello, world" is a string
-

Version history

  • Added in version 1.0.0.
  • Part of the public API version since 2.1.0.
  • Changed return value to const char* and added noexcept in version 3.0.0.
  • Added support for binary type in version 3.8.0.
\ No newline at end of file +

Version history

  • Added in version 1.0.0.
  • Part of the public API version since 2.1.0.
  • Changed return value to const char* and added noexcept in version 3.0.0.
  • Added support for binary type in version 3.8.0.
\ No newline at end of file diff --git a/api/basic_json/unflatten/index.html b/api/basic_json/unflatten/index.html index 64a9299b5..1afb78172 100644 --- a/api/basic_json/unflatten/index.html +++ b/api/basic_json/unflatten/index.html @@ -1,5 +1,5 @@ - unflatten - JSON for Modern C++
Skip to content

nlohmann::basic_json::unflatten

basic_json unflatten() const;
-

The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

  1. The value must be an object.
  2. The keys must be JSON pointers (see RFC 6901)
  3. The mapped values must be primitive JSON types.

Return value

the original JSON from a flattened version

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

The function can throw the following exceptions:

Complexity

Linear in the size the JSON value.

Notes

Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

Examples

Example

The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

#include <iostream>
+ unflatten - JSON for Modern C++      

nlohmann::basic_json::unflatten

basic_json unflatten() const;
+

The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

  1. The value must be an object.
  2. The keys must be JSON pointers (see RFC 6901)
  3. The mapped values must be primitive JSON types.

Return value

the original JSON from a flattened version

Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

Exceptions

The function can throw the following exceptions:

Complexity

Linear in the size the JSON value.

Notes

Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

Examples

Example

The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -43,4 +43,4 @@
     },
     "pi": 3.141
 }
-

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file +

See also

Version history

  • Added in version 2.0.0.
\ No newline at end of file diff --git a/api/basic_json/update/index.html b/api/basic_json/update/index.html index 193d5a8f4..cde2da8c3 100644 --- a/api/basic_json/update/index.html +++ b/api/basic_json/update/index.html @@ -1,9 +1,9 @@ - update - JSON for Modern C++
Skip to content

nlohmann::basic_json::update

// (1)
+ update - JSON for Modern C++      

nlohmann::basic_json::update

// (1)
 void update(const_reference j, bool merge_objects = false);
 
 // (2)
 void update(const_iterator first, const_iterator last, bool merge_objects = false);
-
  1. Inserts all values from JSON object j.
  2. Inserts all values from range [first, last)

When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

The function is motivated by Python's dict.update function.

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

j (in)
JSON object to read values from
merge_objects (in)
when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false)
first (in)
begin of the range of elements to insert
last (in)
end of the range of elements to insert

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.312 if called on JSON values other than objects; example: "cannot use update() with string"
  2. The function can throw the following exceptions:
    • Throws type_error.312 if called on JSON values other than objects; example: "cannot use update() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"

Complexity

  1. O(N*log(size() + N)), where N is the number of elements to insert.
  2. O(N*log(size() + N)), where N is the number of elements to insert.

Examples

Example

The example shows how update() is used.

#include <iostream>
+
  1. Inserts all values from JSON object j.
  2. Inserts all values from range [first, last)

When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

The function is motivated by Python's dict.update function.

Iterator invalidation

For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

Parameters

j (in)
JSON object to read values from
merge_objects (in)
when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false)
first (in)
begin of the range of elements to insert
last (in)
end of the range of elements to insert

Exceptions

  1. The function can throw the following exceptions:
    • Throws type_error.312 if called on JSON values other than objects; example: "cannot use update() with string"
  2. The function can throw the following exceptions:
    • Throws type_error.312 if called on JSON values other than objects; example: "cannot use update() with string"
    • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: "iterator does not fit current value"
    • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: "iterators do not fit"

Complexity

  1. O(N*log(size() + N)), where N is the number of elements to insert.
  2. O(N*log(size() + N)), where N is the number of elements to insert.

Examples

Example

The example shows how update() is used.

#include <iostream>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 
@@ -110,4 +110,4 @@
     "active": true,
     "name": {"de": "Maus", "en": "mouse", "es": "ratón"}
 }
-

Version history

  • Added in version 3.0.0.
  • Added merge_objects parameter in 3.10.5.
\ No newline at end of file +

Version history

  • Added in version 3.0.0.
  • Added merge_objects parameter in 3.10.5.
\ No newline at end of file diff --git a/api/basic_json/value/index.html b/api/basic_json/value/index.html index 8334289fb..7454de4af 100644 --- a/api/basic_json/value/index.html +++ b/api/basic_json/value/index.html @@ -1,4 +1,4 @@ - value - JSON for Modern C++
Skip to content

nlohmann::basic_json::value

// (1)
+ value - JSON for Modern C++      

nlohmann::basic_json::value

// (1)
 template<class ValueType>
 ValueType value(const typename object_t::key_type& key,
                 ValueType&& default_value) const;
@@ -17,12 +17,12 @@
 } catch(out_of_range) {
    return default_value;
 }
-

  • See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

  • Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

    The function is basically equivalent to executing

    try {
    +

  • See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

  • Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

    The function is basically equivalent to executing

    try {
        return at(ptr);
     } catch(out_of_range) {
        return default_value;
     }
    -

  • Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.

    Template parameters

    KeyType
    A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).
    ValueType
    type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible.

    Parameters

    key (in)
    key of the element to access
    default_value (in)
    the value to return if key/ptr found no value
    ptr (in)
    a JSON pointer to the element to access

    Return value

    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found

    Exception safety

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    Exceptions

    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.

    Complexity

    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.

    Examples

    Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>
    +

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.

    Template parameters

    KeyType
    A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17).
    ValueType
    type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible.

    Parameters

    key (in)
    key of the element to access
    default_value (in)
    the value to return if key/ptr found no value
    ptr (in)
    a JSON pointer to the element to access

    Return value

    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found

    Exception safety

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    Exceptions

    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.

    Complexity

    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.

    Examples

    Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -86,7 +86,7 @@
                   << " " << v_string << " " << v_boolean << "\n";
     }
     

    Output:

    1 42.23 oops false
    -
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>
    +
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -118,4 +118,4 @@
                   << " " << v_string << " " << v_boolean << "\n";
     }
     

    Output:

    1 42.23 oops false
    -

    See also

    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference

    Version history

    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    \ No newline at end of file +

    See also

    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference

    Version history

    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    \ No newline at end of file diff --git a/api/basic_json/value_t/index.html b/api/basic_json/value_t/index.html index 3853dd0e0..30bd6da1c 100644 --- a/api/basic_json/value_t/index.html +++ b/api/basic_json/value_t/index.html @@ -1,4 +1,4 @@ - value_t - JSON for Modern C++
    Skip to content

    nlohmann::basic_json::value_t

    enum class value_t : std::uint8_t {
    + value_t - JSON for Modern C++      

    nlohmann::basic_json::value_t

    enum class value_t : std::uint8_t {
         null,
         object,
         array,
    @@ -10,7 +10,7 @@
         binary,
         discarded
     };
    -

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    Notes

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value

    Examples

    Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>
    +

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    Notes

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value

    Examples

    Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -46,4 +46,4 @@
     true
     true
     true
    -

    Version history

    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    \ No newline at end of file +

    Version history

    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    \ No newline at end of file diff --git a/api/basic_json/~basic_json/index.html b/api/basic_json/~basic_json/index.html index 4511929ae..15b9c8c00 100644 --- a/api/basic_json/~basic_json/index.html +++ b/api/basic_json/~basic_json/index.html @@ -1,2 +1,2 @@ - (Destructor) - JSON for Modern C++
    Skip to content

    nlohmann::basic_json::~basic_json

    ~basic_json() noexcept;
    -

    Destroys the JSON value and frees all allocated memory.

    Exception safety

    No-throw guarantee: this member function never throws exceptions.

    Complexity

    Linear.

    Version history

    • Added in version 1.0.0.
    \ No newline at end of file + (Destructor) - JSON for Modern C++
    Skip to content

    nlohmann::basic_json::~basic_json

    ~basic_json() noexcept;
    +

    Destroys the JSON value and frees all allocated memory.

    Exception safety

    No-throw guarantee: this member function never throws exceptions.

    Complexity

    Linear.

    Version history

    • Added in version 1.0.0.
    \ No newline at end of file diff --git a/api/byte_container_with_subtype/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/byte_container_with_subtype/index.html index b645bfa43..5665663ee 100644 --- a/api/byte_container_with_subtype/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/byte_container_with_subtype/index.html @@ -1,4 +1,4 @@ - (constructor) - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype::byte_container_with_subtype

    // (1)
    + (constructor) - JSON for Modern C++      

    nlohmann::byte_container_with_subtype::byte_container_with_subtype

    // (1)
     byte_container_with_subtype();
     
     // (2)
    @@ -34,4 +34,4 @@
     

    Output:

    {"bytes":[],"subtype":null}
     {"bytes":[202,254,186,190],"subtype":null}
     {"bytes":[202,254,186,190],"subtype":42}
    -

    Version history

    Since version 3.8.0.

    \ No newline at end of file +

    Version history

    Since version 3.8.0.

    \ No newline at end of file diff --git a/api/byte_container_with_subtype/clear_subtype/index.html b/api/byte_container_with_subtype/clear_subtype/index.html index 1b8304916..290a58679 100644 --- a/api/byte_container_with_subtype/clear_subtype/index.html +++ b/api/byte_container_with_subtype/clear_subtype/index.html @@ -1,4 +1,4 @@ - clear_subtype - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype::clear_subtype

    void clear_subtype() noexcept;
    + clear_subtype - JSON for Modern C++      

    nlohmann::byte_container_with_subtype::clear_subtype

    void clear_subtype() noexcept;
     

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family.

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -22,4 +22,4 @@
     }
     

    Output:

    before calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":42}
     after calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":null}
    -

    Version history

    Since version 3.8.0.

    \ No newline at end of file +

    Version history

    Since version 3.8.0.

    \ No newline at end of file diff --git a/api/byte_container_with_subtype/has_subtype/index.html b/api/byte_container_with_subtype/has_subtype/index.html index 14bc23008..c9521c0d5 100644 --- a/api/byte_container_with_subtype/has_subtype/index.html +++ b/api/byte_container_with_subtype/has_subtype/index.html @@ -1,4 +1,4 @@ - has_subtype - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype::has_subtype

    constexpr bool has_subtype() const noexcept;
    + has_subtype - JSON for Modern C++      

    nlohmann::byte_container_with_subtype::has_subtype

    constexpr bool has_subtype() const noexcept;
     

    Returns whether the value has a subtype.

    Return value

    whether the value has a subtype

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -20,4 +20,4 @@
     }
     

    Output:

    c1.has_subtype() = false
     c2.has_subtype() = true
    -

    Version history

    Since version 3.8.0.

    \ No newline at end of file +

    Version history

    Since version 3.8.0.

    \ No newline at end of file diff --git a/api/byte_container_with_subtype/index.html b/api/byte_container_with_subtype/index.html index 937abd7a1..5a6af4ec9 100644 --- a/api/byte_container_with_subtype/index.html +++ b/api/byte_container_with_subtype/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype

    template<typename BinaryType>
    + Overview - JSON for Modern C++      

    nlohmann::byte_container_with_subtype

    template<typename BinaryType>
     class byte_container_with_subtype : public BinaryType;
    -

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    Template parameters

    BinaryType
    container to store bytes (std::vector<std::uint8_t> by default)

    Member types

    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)

    Member functions

    Version history

    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    \ No newline at end of file +

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    Template parameters

    BinaryType
    container to store bytes (std::vector<std::uint8_t> by default)

    Member types

    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)

    Member functions

    Version history

    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    \ No newline at end of file diff --git a/api/byte_container_with_subtype/set_subtype/index.html b/api/byte_container_with_subtype/set_subtype/index.html index 13675b356..9a3bfa6ef 100644 --- a/api/byte_container_with_subtype/set_subtype/index.html +++ b/api/byte_container_with_subtype/set_subtype/index.html @@ -1,5 +1,5 @@ - set_subtype - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype::set_subtype

    void set_subtype(subtype_type subtype) noexcept;
    -

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    Parameters

    subtype (in)
    subtype to set

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>
    + set_subtype - JSON for Modern C++      

    nlohmann::byte_container_with_subtype::set_subtype

    void set_subtype(subtype_type subtype) noexcept;
    +

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    Parameters

    subtype (in)
    subtype to set

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     // define a byte container based on std::vector
    @@ -23,4 +23,4 @@
     }
     

    Output:

    before calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":null}
     after calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":42}
    -

    Version history

    Since version 3.8.0.

    \ No newline at end of file +

    Version history

    Since version 3.8.0.

    \ No newline at end of file diff --git a/api/byte_container_with_subtype/subtype/index.html b/api/byte_container_with_subtype/subtype/index.html index 506ab2775..428e92581 100644 --- a/api/byte_container_with_subtype/subtype/index.html +++ b/api/byte_container_with_subtype/subtype/index.html @@ -1,4 +1,4 @@ - subtype - JSON for Modern C++
    Skip to content

    nlohmann::byte_container_with_subtype::subtype

    constexpr subtype_type subtype() const noexcept;
    + subtype - JSON for Modern C++      

    nlohmann::byte_container_with_subtype::subtype

    constexpr subtype_type subtype() const noexcept;
     

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    Return value

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -23,4 +23,4 @@
     }
     

    Output:

    c1.subtype() = 18446744073709551615
     c2.subtype() = 42
    -

    Version history

    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    \ No newline at end of file diff --git a/api/json/index.html b/api/json/index.html index 979ea2345..7510eb8a0 100644 --- a/api/json/index.html +++ b/api/json/index.html @@ -1,4 +1,4 @@ - json - JSON for Modern C++
    Skip to content

    nlohmann::json

    using json = basic_json<>;
    + json - JSON for Modern C++      

    nlohmann::json

    using json = basic_json<>;
     

    This type is the default specialization of the basic_json class which uses the standard template types.

    Examples

    Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
    @@ -65,4 +65,4 @@
         "pi": 3.141,
         "size": 8
     }
    -

    Version history

    Since version 1.0.0.

    \ No newline at end of file +

    Version history

    Since version 1.0.0.

    \ No newline at end of file diff --git a/api/json_pointer/back/index.html b/api/json_pointer/back/index.html index 1c3cec623..8c84d40dc 100644 --- a/api/json_pointer/back/index.html +++ b/api/json_pointer/back/index.html @@ -1,5 +1,5 @@ - back - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::back

    const string_t& back() const;
    -

    Return last reference token.

    Return value

    Last reference token.

    Exceptions

    Throws out_of_range.405 if JSON pointer has no parent.

    Complexity

    Constant.

    Examples

    Example

    The example shows the usage of back.

    #include <iostream>
    + back - JSON for Modern C++      

    nlohmann::json_pointer::back

    const string_t& back() const;
    +

    Return last reference token.

    Return value

    Last reference token.

    Exceptions

    Throws out_of_range.405 if JSON pointer has no parent.

    Complexity

    Constant.

    Examples

    Example

    The example shows the usage of back.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -16,4 +16,4 @@
     }
     

    Output:

    last reference token of "/foo" is "foo"
     last reference token of "/foo/0" is "0"
    -

    Version history

    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/empty/index.html b/api/json_pointer/empty/index.html index 75038f6e8..9e331c98d 100644 --- a/api/json_pointer/empty/index.html +++ b/api/json_pointer/empty/index.html @@ -1,5 +1,5 @@ - empty - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::empty

    bool empty() const noexcept;
    -

    Return whether pointer points to the root document.

    Return value

    true iff the JSON pointer points to the root document.

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>
    + empty - JSON for Modern C++      

    nlohmann::json_pointer::empty

    bool empty() const noexcept;
    +

    Return whether pointer points to the root document.

    Return value

    true iff the JSON pointer points to the root document.

    Exception safety

    No-throw guarantee: this function never throws exceptions.

    Complexity

    Constant.

    Examples

    Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -23,4 +23,4 @@
     "": true
     "/foo": false
     "/foo/0": false
    -

    Version history

    Added in version 3.6.0.

    \ No newline at end of file +

    Version history

    Added in version 3.6.0.

    \ No newline at end of file diff --git a/api/json_pointer/index.html b/api/json_pointer/index.html index c26e19f61..e4f863c9c 100644 --- a/api/json_pointer/index.html +++ b/api/json_pointer/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer

    template<typename RefStringType>
    + Overview - JSON for Modern C++      

    nlohmann::json_pointer

    template<typename RefStringType>
     class json_pointer;
    -

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    Template parameters

    RefStringType
    the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    Member types

    • string_t - the string type used for the reference tokens

    Member functions

    Literals

    See also

    Version history

    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    \ No newline at end of file +

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    Template parameters

    RefStringType
    the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    Member types

    • string_t - the string type used for the reference tokens

    Member functions

    Literals

    See also

    Version history

    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/json_pointer/index.html b/api/json_pointer/json_pointer/index.html index 20b62b166..d6b2579c1 100644 --- a/api/json_pointer/json_pointer/index.html +++ b/api/json_pointer/json_pointer/index.html @@ -1,5 +1,5 @@ - (Constructor) - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::json_pointer

    explicit json_pointer(const string_t& s = "");
    -

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    Parameters

    s (in)
    string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value

    Exceptions

    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Examples

    Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>
    + (Constructor) - JSON for Modern C++      

    nlohmann::json_pointer::json_pointer

    explicit json_pointer(const string_t& s = "");
    +

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    Parameters

    s (in)
    string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value

    Exceptions

    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Examples

    Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -49,4 +49,4 @@
     

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
     [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
     [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
    -

    Version history

    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/operator_eq/index.html b/api/json_pointer/operator_eq/index.html index ec6d0dcf3..e69396424 100644 --- a/api/json_pointer/operator_eq/index.html +++ b/api/json_pointer/operator_eq/index.html @@ -1,4 +1,4 @@ - operator== - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::operator==

    // until C++20
    + operator== - JSON for Modern C++      

    nlohmann::json_pointer::operator==

    // until C++20
     template<typename RefStringTypeLhs, typename RefStringTypeRhs>
     bool operator==(
         const json_pointer<RefStringTypeLhs>& lhs,
    @@ -22,7 +22,7 @@
     
         bool operator==(const string_t& rhs) const;                     // (2)
     };
    -
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    Template parameters

    RefStringTypeLhs, RefStringTypeRhs
    the string type of the left-hand side or right-hand side JSON pointer, respectively
    StringType
    the string type derived from the json_pointer operand (json_pointer::string_t)

    Parameters

    lhs (in)
    first value to consider
    rhs (in)
    second value to consider

    Return value

    whether the values lhs/*this and rhs are equal

    Exception safety

    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.

    Exceptions

    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Complexity

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    Notes

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    Examples

    Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>
    +
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    Template parameters

    RefStringTypeLhs, RefStringTypeRhs
    the string type of the left-hand side or right-hand side JSON pointer, respectively
    StringType
    the string type derived from the json_pointer operand (json_pointer::string_t)

    Parameters

    lhs (in)
    first value to consider
    rhs (in)
    second value to consider

    Return value

    whether the values lhs/*this and rhs are equal

    Exception safety

    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.

    Exceptions

    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Complexity

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    Notes

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    Examples

    Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -45,7 +45,7 @@
     "" == "": true
     "" == "/foo": false
     "/foo" == "/foo": true
    -
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>
    +
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>
     #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -82,4 +82,4 @@
     "" == "": true
     "/foo" == "/foo": true
     "bar" == "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
    -

    Version history

    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    \ No newline at end of file +

    Version history

    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    \ No newline at end of file diff --git a/api/json_pointer/operator_ne/index.html b/api/json_pointer/operator_ne/index.html index 75a865950..91dba7d5a 100644 --- a/api/json_pointer/operator_ne/index.html +++ b/api/json_pointer/operator_ne/index.html @@ -1,4 +1,4 @@ - operator!= - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::operator!=

    // until C++20
    + operator!= - JSON for Modern C++      

    nlohmann::json_pointer::operator!=

    // until C++20
     template<typename RefStringTypeLhs, typename RefStringTypeRhs>
     bool operator!=(
         const json_pointer<RefStringTypeLhs>& lhs,
    @@ -13,7 +13,7 @@
     bool operator!=(
         const StringType& lhs,
         const json_pointer<RefStringTypeRhs>& rhs);           // (2)
    -
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    Template parameters

    RefStringTypeLhs, RefStringTypeRhs
    the string type of the left-hand side or right-hand side JSON pointer, respectively
    StringType
    the string type derived from the json_pointer operand (json_pointer::string_t)

    Parameters

    lhs (in)
    first value to consider
    rhs (in)
    second value to consider

    Return value

    whether the values lhs/*this and rhs are not equal

    Exception safety

    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.

    Exceptions

    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Complexity

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    Notes

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    Examples

    Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>
    +
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    Template parameters

    RefStringTypeLhs, RefStringTypeRhs
    the string type of the left-hand side or right-hand side JSON pointer, respectively
    StringType
    the string type derived from the json_pointer operand (json_pointer::string_t)

    Parameters

    lhs (in)
    first value to consider
    rhs (in)
    second value to consider

    Return value

    whether the values lhs/*this and rhs are not equal

    Exception safety

    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.

    Exceptions

    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

    Complexity

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    Notes

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    Examples

    Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -36,7 +36,7 @@
     "" != "": false
     "" != "/foo": true
     "/foo" != "/foo": false
    -
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>
    +
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -72,4 +72,4 @@
     "" != "": false
     "/foo" != "/foo": false
     "bar" != "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
    -

    Version history

    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    \ No newline at end of file +

    Version history

    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    \ No newline at end of file diff --git a/api/json_pointer/operator_slash/index.html b/api/json_pointer/operator_slash/index.html index 2ef5b61ca..4a46b6016 100644 --- a/api/json_pointer/operator_slash/index.html +++ b/api/json_pointer/operator_slash/index.html @@ -1,4 +1,4 @@ - operator/ - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::operator/

    // (1)
    + operator/ - JSON for Modern C++      

    nlohmann::json_pointer::operator/

    // (1)
     json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);
     
     // (2)
    @@ -6,7 +6,7 @@
     
     // (3)
     json_pointer operator/(const json_pointer& lhs, std::size_t array_idx);
    -
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer

    Parameters

    lhs (in)
    JSON pointer
    rhs (in)
    JSON pointer to append
    token (in)
    reference token to append
    array_idx (in)
    array index to append

    Return value

    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs

    Complexity

    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.

    Examples

    Example

    The example shows the usage of operator/.

    #include <iostream>
    +
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer

    Parameters

    lhs (in)
    JSON pointer
    rhs (in)
    JSON pointer to append
    token (in)
    reference token to append
    array_idx (in)
    array index to append

    Return value

    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs

    Complexity

    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.

    Examples

    Example

    The example shows the usage of operator/.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -28,4 +28,4 @@
     

    Output:

    "/foo/bar/baz"
     "/foo/fob"
     "/foo/42"
    -

    Version history

    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    \ No newline at end of file +

    Version history

    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    \ No newline at end of file diff --git a/api/json_pointer/operator_slasheq/index.html b/api/json_pointer/operator_slasheq/index.html index e96b12dfa..96967b14a 100644 --- a/api/json_pointer/operator_slasheq/index.html +++ b/api/json_pointer/operator_slasheq/index.html @@ -1,4 +1,4 @@ - operator/= - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::operator/=

    // (1)
    + operator/= - JSON for Modern C++      

    nlohmann::json_pointer::operator/=

    // (1)
     json_pointer& operator/=(const json_pointer& ptr);
     
     // (2)
    @@ -6,7 +6,7 @@
     
     // (3)
     json_pointer& operator/=(std::size_t array_idx)
    -
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer

    Parameters

    ptr (in)
    JSON pointer to append
    token (in)
    reference token to append
    array_idx (in)
    array index to append

    Return value

    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended

    Complexity

    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.

    Examples

    Example

    The example shows the usage of operator/=.

    #include <iostream>
    +
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer

    Parameters

    ptr (in)
    JSON pointer to append
    token (in)
    reference token to append
    array_idx (in)
    array index to append

    Return value

    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended

    Complexity

    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.

    Examples

    Example

    The example shows the usage of operator/=.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -33,4 +33,4 @@
     "/foo/bar/baz"
     "/foo/bar/baz/fob"
     "/foo/bar/baz/fob/42"
    -

    Version history

    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    \ No newline at end of file +

    Version history

    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    \ No newline at end of file diff --git a/api/json_pointer/operator_string_t/index.html b/api/json_pointer/operator_string_t/index.html index f08e4c019..b4e88b450 100644 --- a/api/json_pointer/operator_string_t/index.html +++ b/api/json_pointer/operator_string_t/index.html @@ -1,9 +1,9 @@ - operator string_t - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::operator string_t

    operator string_t() const
    -

    Return a string representation of the JSON pointer.

    Return value

    A string representation of the JSON pointer

    Possible implementation

    operator string_t() const
    + operator string_t - JSON for Modern C++      

    nlohmann::json_pointer::operator string_t

    operator string_t() const
    +

    Return a string representation of the JSON pointer.

    Return value

    A string representation of the JSON pointer

    Possible implementation

    operator string_t() const
     {
         return to_string();
     }
    -

    Notes

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    Examples

    Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>
    +

    Notes

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    Examples

    Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -24,4 +24,4 @@
     }
     

    Output:

    /foo/0
     /a~1b
    -

    Version history

    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/parent_pointer/index.html b/api/json_pointer/parent_pointer/index.html index f3c1dd762..708603c02 100644 --- a/api/json_pointer/parent_pointer/index.html +++ b/api/json_pointer/parent_pointer/index.html @@ -1,5 +1,5 @@ - parent_pointer - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::parent_pointer

    json_pointer parent_pointer() const;
    -

    Returns the parent of this JSON pointer.

    Return value

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    Complexity

    Linear in the length of the JSON pointer.

    Examples

    Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>
    + parent_pointer - JSON for Modern C++      

    nlohmann::json_pointer::parent_pointer

    json_pointer parent_pointer() const;
    +

    Returns the parent of this JSON pointer.

    Return value

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    Complexity

    Linear in the length of the JSON pointer.

    Examples

    Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -20,4 +20,4 @@
     

    Output:

    parent of "" is ""
     parent of "/foo" is ""
     parent of "/foo/0" is "/foo"
    -

    Version history

    Added in version 3.6.0.

    \ No newline at end of file +

    Version history

    Added in version 3.6.0.

    \ No newline at end of file diff --git a/api/json_pointer/pop_back/index.html b/api/json_pointer/pop_back/index.html index 56742ebde..adcb46a75 100644 --- a/api/json_pointer/pop_back/index.html +++ b/api/json_pointer/pop_back/index.html @@ -1,5 +1,5 @@ - pop_back - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::pop_back

    void pop_back();
    -

    Remove last reference token.

    Exceptions

    Throws out_of_range.405 if JSON pointer has no parent.

    Complexity

    Constant.

    Examples

    Example

    The example shows the usage of pop_back.

    #include <iostream>
    + pop_back - JSON for Modern C++      

    nlohmann::json_pointer::pop_back

    void pop_back();
    +

    Remove last reference token.

    Exceptions

    Throws out_of_range.405 if JSON pointer has no parent.

    Complexity

    Constant.

    Examples

    Example

    The example shows the usage of pop_back.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -24,4 +24,4 @@
     "/foo/bar"
     "/foo"
     ""
    -

    Version history

    Added in version 3.6.0.

    \ No newline at end of file +

    Version history

    Added in version 3.6.0.

    \ No newline at end of file diff --git a/api/json_pointer/push_back/index.html b/api/json_pointer/push_back/index.html index 57a2bb98e..6cb6612ea 100644 --- a/api/json_pointer/push_back/index.html +++ b/api/json_pointer/push_back/index.html @@ -1,7 +1,7 @@ - push_back - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::push_back

    void push_back(const string_t& token);
    + push_back - JSON for Modern C++      

    nlohmann::json_pointer::push_back

    void push_back(const string_t& token);
     
     void push_back(string_t&& token);
    -

    Append an unescaped token at the end of the reference pointer.

    Parameters

    token (in)
    token to add

    Complexity

    Amortized constant.

    Examples

    Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>
    +

    Append an unescaped token at the end of the reference pointer.

    Parameters

    token (in)
    token to add

    Complexity

    Amortized constant.

    Examples

    Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -26,4 +26,4 @@
     "/foo"
     "/foo/0"
     "/foo/0/bar"
    -

    Version history

    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/string_t/index.html b/api/json_pointer/string_t/index.html index 285aa05eb..92677790f 100644 --- a/api/json_pointer/string_t/index.html +++ b/api/json_pointer/string_t/index.html @@ -1,5 +1,5 @@ - string_t - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::string_t

    using string_t = RefStringType;
    -

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    Examples

    Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>
    + string_t - JSON for Modern C++      

    nlohmann::json_pointer::string_t

    using string_t = RefStringType;
    +

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    Examples

    Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -14,4 +14,4 @@
     }
     

    Output:

    This is a string.
     true
    -

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_pointer/to_string/index.html b/api/json_pointer/to_string/index.html index 087f3d407..3e6274aed 100644 --- a/api/json_pointer/to_string/index.html +++ b/api/json_pointer/to_string/index.html @@ -1,5 +1,5 @@ - to_string - JSON for Modern C++
    Skip to content

    nlohmann::json_pointer::to_string

    string_t to_string() const;
    -

    Return a string representation of the JSON pointer.

    Return value

    A string representation of the JSON pointer

    Notes

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());
    + to_string - JSON for Modern C++      

    nlohmann::json_pointer::to_string

    string_t to_string() const;
    +

    Return a string representation of the JSON pointer.

    Return value

    A string representation of the JSON pointer

    Notes

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());
     

    Examples

    Example

    The example shows the result of to_string.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -46,4 +46,4 @@
     "/k"l"
     "/ "
     "/m~0n"
    -

    Version history

    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    \ No newline at end of file diff --git a/api/json_sax/binary/index.html b/api/json_sax/binary/index.html index c44b09282..587fca7f5 100644 --- a/api/json_sax/binary/index.html +++ b/api/json_sax/binary/index.html @@ -1,5 +1,5 @@ - binary - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::binary

    virtual bool binary(binary_t& val) = 0;
    -

    A binary value was read.

    Parameters

    val (in)
    binary value

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed binary value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + binary - JSON for Modern C++      

    nlohmann::json_sax::binary

    virtual bool binary(binary_t& val) = 0;
    +

    A binary value was read.

    Parameters

    val (in)
    binary value

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed binary value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -116,4 +116,4 @@
     

    Output:

    binary(val=[...])
     
     result: true
    -

    Version history

    • Added in version 3.8.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.8.0.
    \ No newline at end of file diff --git a/api/json_sax/boolean/index.html b/api/json_sax/boolean/index.html index 853d11d7c..51e76e207 100644 --- a/api/json_sax/boolean/index.html +++ b/api/json_sax/boolean/index.html @@ -1,5 +1,5 @@ - boolean - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::boolean

    virtual bool boolean(bool val) = 0;
    -

    A boolean value was read.

    Parameters

    val (in)
    boolean value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + boolean - JSON for Modern C++      

    nlohmann::json_sax::boolean

    virtual bool boolean(bool val) = 0;
    +

    A boolean value was read.

    Parameters

    val (in)
    boolean value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/end_array/index.html b/api/json_sax/end_array/index.html index 4a24e15e4..450c77e91 100644 --- a/api/json_sax/end_array/index.html +++ b/api/json_sax/end_array/index.html @@ -1,5 +1,5 @@ - end_array - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::end_array

    virtual bool end_array() = 0;
    -

    The end of an array was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + end_array - JSON for Modern C++      

    nlohmann::json_sax::end_array

    virtual bool end_array() = 0;
    +

    The end of an array was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/end_object/index.html b/api/json_sax/end_object/index.html index fd34ebfee..143ceddd7 100644 --- a/api/json_sax/end_object/index.html +++ b/api/json_sax/end_object/index.html @@ -1,5 +1,5 @@ - end_object - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::end_object

    virtual bool end_object() = 0;
    -

    The end of an object was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + end_object - JSON for Modern C++      

    nlohmann::json_sax::end_object

    virtual bool end_object() = 0;
    +

    The end of an object was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/index.html b/api/json_sax/index.html index 9b0cdf326..5def29bed 100644 --- a/api/json_sax/index.html +++ b/api/json_sax/index.html @@ -1,3 +1,3 @@ - Overview - JSON for Modern C++
    Skip to content

    nlohmann::json_sax

    template<typename BasicJsonType>
    + Overview - JSON for Modern C++      

    nlohmann::json_sax

    template<typename BasicJsonType>
     struct json_sax;
    -

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    Template parameters

    BasicJsonType
    a specialization of basic_json

    Member types

    Member functions

    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read

    Version history

    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    \ No newline at end of file +

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    Template parameters

    BasicJsonType
    a specialization of basic_json

    Member types

    Member functions

    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read

    Version history

    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    \ No newline at end of file diff --git a/api/json_sax/key/index.html b/api/json_sax/key/index.html index 4a03d5c28..fbb99ad06 100644 --- a/api/json_sax/key/index.html +++ b/api/json_sax/key/index.html @@ -1,5 +1,5 @@ - key - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::key

    virtual bool key(string_t& val) = 0;
    -

    An object key was read.

    Parameters

    val (in)
    object key

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed object key value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + key - JSON for Modern C++      

    nlohmann::json_sax::key

    virtual bool key(string_t& val) = 0;
    +

    An object key was read.

    Parameters

    val (in)
    object key

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed object key value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/null/index.html b/api/json_sax/null/index.html index 15200fd08..6fe178ca4 100644 --- a/api/json_sax/null/index.html +++ b/api/json_sax/null/index.html @@ -1,5 +1,5 @@ - null - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::null

    virtual bool null() = 0;
    -

    A null value was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + null - JSON for Modern C++      

    nlohmann::json_sax::null

    virtual bool null() = 0;
    +

    A null value was read.

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/number_float/index.html b/api/json_sax/number_float/index.html index 9ec0c8cd9..00e56d6b0 100644 --- a/api/json_sax/number_float/index.html +++ b/api/json_sax/number_float/index.html @@ -1,5 +1,5 @@ - number_float - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::number_float

    virtual bool number_float(number_float_t val, const string_t& s) = 0;
    -

    A floating-point number was read.

    Parameters

    val (in)
    floating-point value
    s (in)
    string representation of the original input

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + number_float - JSON for Modern C++      

    nlohmann::json_sax::number_float

    virtual bool number_float(number_float_t val, const string_t& s) = 0;
    +

    A floating-point number was read.

    Parameters

    val (in)
    floating-point value
    s (in)
    string representation of the original input

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/number_integer/index.html b/api/json_sax/number_integer/index.html index 206bc6b9f..d9dd24e19 100644 --- a/api/json_sax/number_integer/index.html +++ b/api/json_sax/number_integer/index.html @@ -1,5 +1,5 @@ - number_integer - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::number_integer

    virtual bool number_integer(number_integer_t val) = 0;
    -

    An integer number was read.

    Parameters

    val (in)
    integer value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + number_integer - JSON for Modern C++      

    nlohmann::json_sax::number_integer

    virtual bool number_integer(number_integer_t val) = 0;
    +

    An integer number was read.

    Parameters

    val (in)
    integer value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/number_unsigned/index.html b/api/json_sax/number_unsigned/index.html index 87eafbca0..6f6f42aa4 100644 --- a/api/json_sax/number_unsigned/index.html +++ b/api/json_sax/number_unsigned/index.html @@ -1,5 +1,5 @@ - number_unsigned - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::number_unsigned

    virtual bool number_unsigned(number_unsigned_t val) = 0;
    -

    An unsigned integer number was read.

    Parameters

    val (in)
    unsigned integer value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + number_unsigned - JSON for Modern C++      

    nlohmann::json_sax::number_unsigned

    virtual bool number_unsigned(number_unsigned_t val) = 0;
    +

    An unsigned integer number was read.

    Parameters

    val (in)
    unsigned integer value

    Return value

    Whether parsing should proceed.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/parse_error/index.html b/api/json_sax/parse_error/index.html index 68ef481c1..acfdb42f0 100644 --- a/api/json_sax/parse_error/index.html +++ b/api/json_sax/parse_error/index.html @@ -1,7 +1,7 @@ - parse_error - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::parse_error

    virtual bool parse_error(std::size_t position,
    + parse_error - JSON for Modern C++      

    nlohmann::json_sax::parse_error

    virtual bool parse_error(std::size_t position,
                              const std::string& last_token,
                              const detail::exception& ex) = 0;
    -

    A parse error occurred.

    Parameters

    position (in)
    the position in the input where the error occurs
    last_token (in)
    the last read token
    ex (in)
    an exception object describing the error

    Return value

    Whether parsing should proceed (must return false).

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    +

    A parse error occurred.

    Parameters

    position (in)
    the position in the input where the error occurs
    last_token (in)
    the last read token
    ex (in)
    an exception object describing the error

    Return value

    Whether parsing should proceed (must return false).

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -169,4 +169,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/start_array/index.html b/api/json_sax/start_array/index.html index c2c76a2c9..78ecfba0f 100644 --- a/api/json_sax/start_array/index.html +++ b/api/json_sax/start_array/index.html @@ -1,5 +1,5 @@ - start_array - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::start_array

    virtual bool start_array(std::size_t elements) = 0;
    -

    The beginning of an array was read.

    Parameters

    elements (in)
    number of object elements or -1 if unknown

    Return value

    Whether parsing should proceed.

    Notes

    Binary formats may report the number of elements.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + start_array - JSON for Modern C++      

    nlohmann::json_sax::start_array

    virtual bool start_array(std::size_t elements) = 0;
    +

    The beginning of an array was read.

    Parameters

    elements (in)
    number of object elements or -1 if unknown

    Return value

    Whether parsing should proceed.

    Notes

    Binary formats may report the number of elements.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/start_object/index.html b/api/json_sax/start_object/index.html index adf30afb4..b7eab1a76 100644 --- a/api/json_sax/start_object/index.html +++ b/api/json_sax/start_object/index.html @@ -1,5 +1,5 @@ - start_object - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::start_object

    virtual bool start_object(std::size_t elements) = 0;
    -

    The beginning of an object was read.

    Parameters

    elements (in)
    number of object elements or -1 if unknown

    Return value

    Whether parsing should proceed.

    Notes

    Binary formats may report the number of elements.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + start_object - JSON for Modern C++      

    nlohmann::json_sax::start_object

    virtual bool start_object(std::size_t elements) = 0;
    +

    The beginning of an object was read.

    Parameters

    elements (in)
    number of object elements or -1 if unknown

    Return value

    Whether parsing should proceed.

    Notes

    Binary formats may report the number of elements.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/json_sax/string/index.html b/api/json_sax/string/index.html index f306cbf3f..596c9ab3d 100644 --- a/api/json_sax/string/index.html +++ b/api/json_sax/string/index.html @@ -1,5 +1,5 @@ - string - JSON for Modern C++
    Skip to content

    nlohmann::json_sax::string

    virtual bool string(string_t& val) = 0;
    -

    A string value was read.

    Parameters

    val (in)
    string value

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed string value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
    + string - JSON for Modern C++      

    nlohmann::json_sax::string

    virtual bool string(string_t& val) = 0;
    +

    A string value was read.

    Parameters

    val (in)
    string value

    Return value

    Whether parsing should proceed.

    Notes

    It is safe to move the passed string value.

    Examples

    Example

    The example below shows how the SAX interface is used.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -167,4 +167,4 @@
                 ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)
     
     result: false
    -

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.2.0.
    \ No newline at end of file diff --git a/api/macros/index.html b/api/macros/index.html index b41d44b59..701d53286 100644 --- a/api/macros/index.html +++ b/api/macros/index.html @@ -1 +1 @@ - Overview - JSON for Modern C++
    Skip to content

    Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    Runtime assertions

    Exceptions

    Language support

    Library version

    Library namespace

    Type conversions

    Comparison behavior

    Serialization/deserialization macros

    \ No newline at end of file + Overview - JSON for Modern C++
    Skip to content

    Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    Runtime assertions

    Exceptions

    Language support

    Library version

    Library namespace

    Type conversions

    Comparison behavior

    Serialization/deserialization macros

    Enums

    Classes and structs

    \ No newline at end of file diff --git a/api/macros/json_assert/index.html b/api/macros/json_assert/index.html index e7a65c7d0..f9b990ec2 100644 --- a/api/macros/json_assert/index.html +++ b/api/macros/json_assert/index.html @@ -1,5 +1,5 @@ - JSON_ASSERT - JSON for Modern C++
    Skip to content

    JSON_ASSERT

    #define JSON_ASSERT(x) /* value */
    -

    This macro controls which code is executed for runtime assertions of the library.

    Parameters

    x (in)
    expression of scalar type

    Default definition

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)
    + JSON_ASSERT - JSON for Modern C++      

    JSON_ASSERT

    #define JSON_ASSERT(x) /* value */
    +

    This macro controls which code is executed for runtime assertions of the library.

    Parameters

    x (in)
    expression of scalar type

    Default definition

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)
     

    Therefore, assertions can be switched off by defining NDEBUG.

    Notes

    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.

    Examples

    Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -24,4 +24,4 @@
         auto v = j["missing"];
     }
     

    Output:

    assertion error in operator[]
    -

    Version history

    • Added in version 3.9.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.9.0.
    \ No newline at end of file diff --git a/api/macros/json_diagnostic_positions/index.html b/api/macros/json_diagnostic_positions/index.html index 8aa2f4730..19f899a0c 100644 --- a/api/macros/json_diagnostic_positions/index.html +++ b/api/macros/json_diagnostic_positions/index.html @@ -1,6 +1,6 @@ - JSON_DIAGNOSTIC_POSITIONS - JSON for Modern C++
    Skip to content

    JSON_DIAGNOSTIC_POSITIONS

    #define JSON_DIAGNOSTIC_POSITIONS /* value */
    -

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new properties: start_pos() and end_pos() are added to nlohmann::basic_json objects and fields. start_pos() returns the start position of that JSON object/field in the original string the object was parsed from. Likewise, end_pos() returns the end position of that JSON object/field in the original string the object was parsed from.

    start_pos() returns the first character of a given element in the original JSON string, while end_pos() returns the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For fields, the first and last character represent the opening and closing quotes or the first and last character of the field's numerical or predefined value (true/false/null), respectively.

    Given the above, end_pos() - start_pos() for an object or field provides the length of the string representation for that object or field, including the opening or closing braces, brackets, or quotes.

    start_pos() and end_pos() are only set if the JSON object was parsed using parse(). For all other cases, std::string::npos will be returned.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead.

    Default definition

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0
    -

    When the macro is not defined, the library will define it to its default value.

    Notes

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Examples

    Example 1: retrieving positions
    #include <iostream>
    + JSON_DIAGNOSTIC_POSITIONS - JSON for Modern C++      

    JSON_DIAGNOSTIC_POSITIONS

    #define JSON_DIAGNOSTIC_POSITIONS /* value */
    +

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

    start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represent the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

    JSON type return value start_pos() return value end_pos()
    object position of the opening { position after the closing }
    array position of the opening [ position after the closing ]
    string position of the opening " position after the closing "
    number position of the first character position after the last character
    boolean position of t for true and f for false position after e
    null position of n position after l

    Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

    Default definition

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0
    +

    When the macro is not defined, the library will define it to its default value.

    Notes

    CMake option

    Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Availability

    Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    Examples

    Example: retrieving positions
    #include <iostream>
     
     #define JSON_DIAGNOSTIC_POSITIONS 1
     #include <nlohmann/json.hpp>
    @@ -100,4 +100,4 @@ Original string:
     1
     Parsed string: 
     1
    -

    The output shows the start/end positions of all the objects and fields in the JSON string.

    Version history

    \ No newline at end of file +

    The output shows the start/end positions of all the objects and fields in the JSON string.

    Version history

    • Added in version 3.12.0.
    \ No newline at end of file diff --git a/api/macros/json_diagnostics/index.html b/api/macros/json_diagnostics/index.html index fbec8ad1a..43b52ce11 100644 --- a/api/macros/json_diagnostics/index.html +++ b/api/macros/json_diagnostics/index.html @@ -1,5 +1,5 @@ - JSON_DIAGNOSTICS - JSON for Modern C++
    Skip to content

    JSON_DIAGNOSTICS

    #define JSON_DIAGNOSTICS /* value */
    -

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    Default definition

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0
    + JSON_DIAGNOSTICS - JSON for Modern C++      

    JSON_DIAGNOSTICS

    #define JSON_DIAGNOSTICS /* value */
    +

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    Default definition

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0
     

    When the macro is not defined, the library will define it to its default value.

    Notes

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    Examples

    Example 1: default behavior
    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -44,4 +44,4 @@
         }
     }
     

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string
    -

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    Version history

    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    \ No newline at end of file +

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    Version history

    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    \ No newline at end of file diff --git a/api/macros/json_disable_enum_serialization/index.html b/api/macros/json_disable_enum_serialization/index.html index f537acf04..09f040e57 100644 --- a/api/macros/json_disable_enum_serialization/index.html +++ b/api/macros/json_disable_enum_serialization/index.html @@ -1,4 +1,4 @@ - JSON_DISABLE_ENUM_SERIALIZATION - JSON for Modern C++
    Skip to content

    JSON_DISABLE_ENUM_SERIALIZATION

    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */
    + JSON_DISABLE_ENUM_SERIALIZATION - JSON for Modern C++      

    JSON_DISABLE_ENUM_SERIALIZATION

    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */
     

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    Default definition

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0
     

    Notes

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    Examples

    Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1
     #include <nlohmann/json.hpp>
    @@ -89,4 +89,4 @@
         // uses user-defined from_json function
         Choice ch = j.template get<Choice>();
     }
    -

    See also

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/macros/json_has_cpp_11/index.html b/api/macros/json_has_cpp_11/index.html index 1b023341d..cbddcdf4d 100644 --- a/api/macros/json_has_cpp_11/index.html +++ b/api/macros/json_has_cpp_11/index.html @@ -1,4 +1,4 @@ - JSON_HAS_CPP_11 - JSON for Modern C++
    Skip to content

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    #define JSON_HAS_CPP_11
    + JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20 - JSON for Modern C++      

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    #define JSON_HAS_CPP_11
     #define JSON_HAS_CPP_14
     #define JSON_HAS_CPP_17
     #define JSON_HAS_CPP_20
    @@ -6,4 +6,4 @@
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.10.5.
    \ No newline at end of file +

    Version history

    • Added in version 3.10.5.
    \ No newline at end of file diff --git a/api/macros/json_has_filesystem/index.html b/api/macros/json_has_filesystem/index.html index d26de93d8..5a77c1e6d 100644 --- a/api/macros/json_has_filesystem/index.html +++ b/api/macros/json_has_filesystem/index.html @@ -1,7 +1,7 @@ - JSON_HAS_EXPERIMENTAL_FILESYSTEM - JSON for Modern C++
    Skip to content

    JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM

    #define JSON_HAS_FILESYSTEM /* value */
    + JSON_HAS_EXPERIMENTAL_FILESYSTEM, JSON_HAS_FILESYSTEM - JSON for Modern C++      

    JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM

    #define JSON_HAS_FILESYSTEM /* value */
     #define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */
    -

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    Default definition

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    Notes

    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.

    Examples

    Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
    +

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    Default definition

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    Notes

    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.

    Examples

    Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.10.5.
    \ No newline at end of file +

    Version history

    • Added in version 3.10.5.
    \ No newline at end of file diff --git a/api/macros/json_has_ranges/index.html b/api/macros/json_has_ranges/index.html index 633800d7b..e1060ab79 100644 --- a/api/macros/json_has_ranges/index.html +++ b/api/macros/json_has_ranges/index.html @@ -1,6 +1,6 @@ - JSON_HAS_RANGES - JSON for Modern C++
    Skip to content

    JSON_HAS_RANGES

    #define JSON_HAS_RANGES /* value */
    + JSON_HAS_RANGES - JSON for Modern C++      

    JSON_HAS_RANGES

    #define JSON_HAS_RANGES /* value */
     

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    Default definition

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    Examples

    Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/macros/json_has_static_rtti/index.html b/api/macros/json_has_static_rtti/index.html index 4019f65ad..d8340c104 100644 --- a/api/macros/json_has_static_rtti/index.html +++ b/api/macros/json_has_static_rtti/index.html @@ -1,6 +1,6 @@ - JSON_HAS_STATIC_RTTI - JSON for Modern C++
    Skip to content

    JSON_HAS_STATIC_RTTI

    #define JSON_HAS_STATIC_RTTI /* value */
    -

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    Default definition

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    Examples

    Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1
    + JSON_HAS_STATIC_RTTI - JSON for Modern C++      

    JSON_HAS_STATIC_RTTI

    #define JSON_HAS_STATIC_RTTI /* value */
    +

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    Default definition

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    Examples

    Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.11.3.
    \ No newline at end of file +

    Version history

    • Added in version 3.11.3.
    \ No newline at end of file diff --git a/api/macros/json_has_three_way_comparison/index.html b/api/macros/json_has_three_way_comparison/index.html index 9419d07fa..bdeebe0a0 100644 --- a/api/macros/json_has_three_way_comparison/index.html +++ b/api/macros/json_has_three_way_comparison/index.html @@ -1,6 +1,6 @@ - JSON_HAS_THREE_WAY_COMPARISON - JSON for Modern C++
    Skip to content

    JSON_HAS_THREE_WAY_COMPARISON

    #define JSON_HAS_THREE_WAY_COMPARISON /* value */
    + JSON_HAS_THREE_WAY_COMPARISON - JSON for Modern C++      

    JSON_HAS_THREE_WAY_COMPARISON

    #define JSON_HAS_THREE_WAY_COMPARISON /* value */
     

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    Default definition

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    Examples

    Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/macros/json_no_io/index.html b/api/macros/json_no_io/index.html index 0fd0e1ff5..4cabc6c0d 100644 --- a/api/macros/json_no_io/index.html +++ b/api/macros/json_no_io/index.html @@ -1,7 +1,7 @@ - JSON_NO_IO - JSON for Modern C++
    Skip to content

    JSON_NO_IO

    #define JSON_NO_IO
    + JSON_NO_IO - JSON for Modern C++      

    JSON_NO_IO

    #define JSON_NO_IO
     

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    Default definition

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO
     

    Examples

    Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.10.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.10.0.
    \ No newline at end of file diff --git a/api/macros/json_noexception/index.html b/api/macros/json_noexception/index.html index 5e3aeca26..9aa8109b4 100644 --- a/api/macros/json_noexception/index.html +++ b/api/macros/json_noexception/index.html @@ -1,7 +1,7 @@ - JSON_NOEXCEPTION - JSON for Modern C++
    Skip to content

    JSON_NOEXCEPTION

    #define JSON_NOEXCEPTION
    + JSON_NOEXCEPTION - JSON for Modern C++      

    JSON_NOEXCEPTION

    #define JSON_NOEXCEPTION
     

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    Default definition

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION
    -

    Notes

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    Examples

    Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1
    +

    Notes

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    Examples

    Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    See also

    Version history

    Added in version 2.1.0.

    \ No newline at end of file +

    See also

    Version history

    Added in version 2.1.0.

    \ No newline at end of file diff --git a/api/macros/json_skip_library_version_check/index.html b/api/macros/json_skip_library_version_check/index.html index 946e3269d..641e8ed35 100644 --- a/api/macros/json_skip_library_version_check/index.html +++ b/api/macros/json_skip_library_version_check/index.html @@ -1,4 +1,4 @@ - JSON_SKIP_LIBRARY_VERSION_CHECK - JSON for Modern C++
    Skip to content

    JSON_SKIP_LIBRARY_VERSION_CHECK

    #define JSON_SKIP_LIBRARY_VERSION_CHECK
    + JSON_SKIP_LIBRARY_VERSION_CHECK - JSON for Modern C++      

    JSON_SKIP_LIBRARY_VERSION_CHECK

    #define JSON_SKIP_LIBRARY_VERSION_CHECK
     

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    Default definition

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK
     

    Notes

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    Examples

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!
    -

    Version history

    Added in version 3.11.0.

    \ No newline at end of file +

    Version history

    Added in version 3.11.0.

    \ No newline at end of file diff --git a/api/macros/json_skip_unsupported_compiler_check/index.html b/api/macros/json_skip_unsupported_compiler_check/index.html index 41532eff4..45d9b2eab 100644 --- a/api/macros/json_skip_unsupported_compiler_check/index.html +++ b/api/macros/json_skip_unsupported_compiler_check/index.html @@ -1,7 +1,7 @@ - JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - JSON for Modern C++
    Skip to content

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
    + JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - JSON for Modern C++      

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
     

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    Default definition

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK
     

    Examples

    Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    Added in version 3.2.0.

    \ No newline at end of file +

    Version history

    Added in version 3.2.0.

    \ No newline at end of file diff --git a/api/macros/json_throw_user/index.html b/api/macros/json_throw_user/index.html index 922e9c5f2..109741bed 100644 --- a/api/macros/json_throw_user/index.html +++ b/api/macros/json_throw_user/index.html @@ -1,13 +1,13 @@ - JSON_CATCH_USER - JSON for Modern C++
    Skip to content

    JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER

    // (1)
    + JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER - JSON for Modern C++      

    JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER

    // (1)
     #define JSON_CATCH_USER(exception) /* value */
     // (2)
     #define JSON_THROW_USER(exception) /* value */
     // (3)
     #define JSON_TRY_USER /* value */
    -

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.

    Parameters

    exception (in)
    an exception type

    Default definition

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)
    +

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.

    Parameters

    exception (in)
    an exception type

    Default definition

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)
     #define JSON_THROW_USER(exception) throw exception
     #define JSON_TRY_USER              try
    -

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()
    +

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()
     #define JSON_TRY_USER              if (true)
     #define JSON_CATCH_USER(exception) if (false)
     

    Examples

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>
    @@ -21,4 +21,4 @@
          std::abort();}
     
     #include <nlohmann/json.hpp>
    -

    See also

    Version history

    • Added in version 3.1.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.1.0.
    \ No newline at end of file diff --git a/api/macros/json_use_global_udls/index.html b/api/macros/json_use_global_udls/index.html index 83bb68cd9..77e981379 100644 --- a/api/macros/json_use_global_udls/index.html +++ b/api/macros/json_use_global_udls/index.html @@ -1,4 +1,4 @@ - JSON_USE_GLOBAL_UDLS - JSON for Modern C++
    Skip to content

    JSON_USE_GLOBAL_UDLS

    #define JSON_USE_GLOBAL_UDLS /* value */
    + JSON_USE_GLOBAL_UDLS - JSON for Modern C++      

    JSON_USE_GLOBAL_UDLS

    #define JSON_USE_GLOBAL_UDLS /* value */
     

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    Default definition

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1
     

    When the macro is not defined, the library will define it to its default value.

    Notes

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    Examples

    Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>
     
    @@ -29,4 +29,4 @@
         std::cout << j << std::endl;
     }
     

    Output:

    42
    -

    See also

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/macros/json_use_implicit_conversions/index.html b/api/macros/json_use_implicit_conversions/index.html index 6ba37d7af..76135e921 100644 --- a/api/macros/json_use_implicit_conversions/index.html +++ b/api/macros/json_use_implicit_conversions/index.html @@ -1,7 +1,7 @@ - JSON_USE_IMPLICIT_CONVERSIONS - JSON for Modern C++
    Skip to content

    JSON_USE_IMPLICIT_CONVERSIONS

    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */
    + JSON_USE_IMPLICIT_CONVERSIONS - JSON for Modern C++      

    JSON_USE_IMPLICIT_CONVERSIONS

    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */
     

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    Default definition

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1
     

    Notes

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    Examples

    Example

    This is an example for an implicit conversion:

    json j = "Hello, world!";
     std::string s = j;
     

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = "Hello, world!";
     auto s = j.template get<std::string>();
    -

    See also

    Version history

    • Added in version 3.9.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.9.0.
    \ No newline at end of file diff --git a/api/macros/json_use_legacy_discarded_value_comparison/index.html b/api/macros/json_use_legacy_discarded_value_comparison/index.html index 3face50eb..d42dbc780 100644 --- a/api/macros/json_use_legacy_discarded_value_comparison/index.html +++ b/api/macros/json_use_legacy_discarded_value_comparison/index.html @@ -1,7 +1,7 @@ - JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - JSON for Modern C++
    Skip to content

    JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */
    -

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result
    == false
    != true
    < false
    <= true
    >= true
    > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    Default definition

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
    + JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - JSON for Modern C++      

    JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */
    +

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result
    == false
    != true
    < false
    <= true
    >= true
    > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    Default definition

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
     

    When the macro is not defined, the library will define it to its default value.

    Notes

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    Examples

    Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1
     #include <nlohmann/json.hpp>
     
     ...
    -

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/macros/nlohmann_define_derived_type/index.html b/api/macros/nlohmann_define_derived_type/index.html index 633cb83e4..66de99ae6 100644 --- a/api/macros/nlohmann_define_derived_type/index.html +++ b/api/macros/nlohmann_define_derived_type/index.html @@ -1,16 +1,22 @@ - NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - JSON for Modern C++
    Skip to content

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)                    // (1)
    -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)       // (2)
    -#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)     // (3)
    + NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    // (1)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)
    +// (2)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)
    +// (3)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)
     
    -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)                // (4)
    -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)   // (5)
    -#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) // (6)
    -

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 3 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 4 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    base_type (in)
    name of the base type (class, struct) type is derived from
    member (in)
    name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);
    +// (4)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)
    +// (5)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)
    +// (6)
    +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)
    +

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    base_type (in)
    name of the base type (class, struct) type is derived from
    member (in)
    name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);
     friend void from_json(const nlohmann::json&, type&);
     

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);
     void from_json(const nlohmann::json&, type&);
     

    Macros 3 and 6 add one function to the namespace which take care of the serialization only:

    void to_json(nlohmann::json&, const type&);
    -

    In first two cases cases they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };
    +

    In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };
     class B : public A { /* ... */ };
     
     void to_json(nlohmann::json& j, const B& b) {
    @@ -22,22 +28,54 @@
         nlohmann::from_json(j, static_cast<A&>(b));
         // ...
     }
    -

    In the third case only to_json will be called:

    class A { /* ... */ };
    +

    In the third case, only to_json will be called:

    class A { /* ... */ };
     class B : public A { /* ... */ };
     
     void to_json(nlohmann::json& j, const B& b) {
         nlohmann::to_json(j, static_cast<const A&>(b));
         // ...
     }
    -

    Notes

    Prerequisites

    • Macros 1, 2 and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5 and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    • See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.

    Examples

    Example of NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE usage:

    class A {
    -  double Aa;
    -  double Ab;
    -  NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)
    +

    Notes

    Prerequisites

    Implementation limits

    See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

    Examples

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>
    +#include <iomanip>
    +#include <nlohmann/json.hpp>
    +
    +using nlohmann::json;
    +
    +class A
    +{
    +  private:
    +    double Aa = 0.0;
    +    double Ab = 0.0;
    +
    +  public:
    +    A() = default;
    +    A(double a, double b) : Aa(a), Ab(b) {}
    +    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)
     };
     
    -class B : public A {
    -  int Ba;
    -  int Bb;
    -  NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)
    -};
    -

    See also

    Version history

    1. Added in version 3.11.x.
    \ No newline at end of file +class B : public A +{ + private: + int Ba = 0; + int Bb = 0; + + public: + B() = default; + B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {} + NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb) +}; + +int main() +{ + B example(23, 42, 3.142, 1.777); + json example_json = example; + + std::cout << std::setw(4) << example_json << std::endl; +} +

    Output:

    {
    +    "Aa": 3.142,
    +    "Ab": 1.777,
    +    "Ba": 23,
    +    "Bb": 42
    +}
    +

    Notes:

    • A and B are default-constructible. This is a requirement for using the macro.
    • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
    • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
    • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.

    See also

    Version history

    1. Added in version 3.11.x.
    2. Added in version 3.11.x.
    3. Added in version 3.11.x.
    4. Added in version 3.11.x.
    5. Added in version 3.11.x.
    6. Added in version 3.11.x.
    \ No newline at end of file diff --git a/api/macros/nlohmann_define_type_intrusive/index.html b/api/macros/nlohmann_define_type_intrusive/index.html index 51774646f..958a83356 100644 --- a/api/macros/nlohmann_define_type_intrusive/index.html +++ b/api/macros/nlohmann_define_type_intrusive/index.html @@ -1,7 +1,7 @@ - NLOHMANN_DEFINE_TYPE_INTRUSIVE - JSON for Modern C++
    Skip to content

    NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)
    + NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

    NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)
     #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)
     #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)
    -

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    member (in)
    name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);
    +

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro
    NLOHMANN_DEFINE_TYPE_INTRUSIVE
    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    member (in)
    name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);
     friend void from_json(const nlohmann::json&, type&); // except (3)
     

    See examples below for the concrete generated code.

    Notes

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.

    Examples

    Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>
     #include <nlohmann/json.hpp>
    @@ -284,4 +284,4 @@
         json j = p;
         std::cout << "serialization: " << j << std::endl;
     }
    -

    See also

    Version history

    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version TODO.
    \ No newline at end of file +

    See also

    Version history

    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    \ No newline at end of file diff --git a/api/macros/nlohmann_define_type_non_intrusive/index.html b/api/macros/nlohmann_define_type_non_intrusive/index.html index 4c41b2d52..ee5b0896a 100644 --- a/api/macros/nlohmann_define_type_non_intrusive/index.html +++ b/api/macros/nlohmann_define_type_non_intrusive/index.html @@ -1,7 +1,7 @@ - NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - JSON for Modern C++
    Skip to content

    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)
    + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - JSON for Modern C++      

    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)
     #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)
     #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)
    -

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    member (in)
    name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);
    +

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Parameters

    type (in)
    name of the type (class, struct) to serialize/deserialize
    member (in)
    name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list

    Default definition

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);
     void from_json(const nlohmann::json&, type&); // except (3)
     

    See examples below for the concrete generated code.

    Notes

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.

    Examples

    Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>
     #include <nlohmann/json.hpp>
    @@ -252,4 +252,4 @@
         json j = p;
         std::cout << "serialization: " << j << std::endl;
     }
    -

    See also

    Version history

    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version TODO.
    \ No newline at end of file +

    See also

    Version history

    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    \ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace/index.html b/api/macros/nlohmann_json_namespace/index.html index 38701e1d2..76d7d501c 100644 --- a/api/macros/nlohmann_json_namespace/index.html +++ b/api/macros/nlohmann_json_namespace/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE - JSON for Modern C++
    Skip to content

    NLOHMANN_JSON_NAMESPACE

    #define NLOHMANN_JSON_NAMESPACE /* value */
    + NLOHMANN_JSON_NAMESPACE - JSON for Modern C++      

    NLOHMANN_JSON_NAMESPACE

    #define NLOHMANN_JSON_NAMESPACE /* value */
     

    This macro evaluates to the full name of the nlohmann namespace.

    Default definition

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    Examples

    Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -14,4 +14,4 @@
         std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;
     }
     

    Output:

    nlohmann::json_abi_v3_11_3
    -

    See also

    Version history

    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    \ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_begin/index.html b/api/macros/nlohmann_json_namespace_begin/index.html index 60f0f01cc..543351f8f 100644 --- a/api/macros/nlohmann_json_namespace_begin/index.html +++ b/api/macros/nlohmann_json_namespace_begin/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE_BEGIN - JSON for Modern C++
    Skip to content

    NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END

    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)
    + NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END - JSON for Modern C++      

    NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END

    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)
     #define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)
     

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.

    Default definition

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann
       {
      @@ -40,4 +40,4 @@
           std::cout << j << std::endl;
       }
       

      Output:

      [1,null]
      -

      See also

      Version history

      • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    \ No newline at end of file diff --git a/api/macros/nlohmann_json_namespace_no_version/index.html b/api/macros/nlohmann_json_namespace_no_version/index.html index a7531033f..df554e280 100644 --- a/api/macros/nlohmann_json_namespace_no_version/index.html +++ b/api/macros/nlohmann_json_namespace_no_version/index.html @@ -1,4 +1,4 @@ - NLOHMANN_JSON_NAMESPACE_NO_VERSION - JSON for Modern C++
    Skip to content

    NLOHMANN_JSON_NAMESPACE_NO_VERSION

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */
    + NLOHMANN_JSON_NAMESPACE_NO_VERSION - JSON for Modern C++      

    NLOHMANN_JSON_NAMESPACE_NO_VERSION

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */
     

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    Default definition

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
     

    When the macro is not defined, the library will define it to its default value.

    Examples

    Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>
     
    @@ -14,4 +14,4 @@
         std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;
     }
     

    Output:

    nlohmann::json_abi
    -

    See also

    Version history

    • Added in version 3.11.2.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.11.2.
    \ No newline at end of file diff --git a/api/macros/nlohmann_json_serialize_enum/index.html b/api/macros/nlohmann_json_serialize_enum/index.html index 9c7b5e17f..24df3ae91 100644 --- a/api/macros/nlohmann_json_serialize_enum/index.html +++ b/api/macros/nlohmann_json_serialize_enum/index.html @@ -1,9 +1,9 @@ - NLOHMANN_JSON_SERIALIZE_ENUM - JSON for Modern C++
    Skip to content

    NLOHMANN_JSON_SERIALIZE_ENUM

    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)
    -

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    Parameters

    type (in)
    name of the enum to serialize/deserialize
    conversion (in)
    a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list

    Default definition

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>
    + NLOHMANN_JSON_SERIALIZE_ENUM - JSON for Modern C++      

    NLOHMANN_JSON_SERIALIZE_ENUM

    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)
    +

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    Parameters

    type (in)
    name of the enum to serialize/deserialize
    conversion (in)
    a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list

    Default definition

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>
     inline void to_json(BasicJsonType& j, const type& e);
     template<typename BasicJsonType>
     inline void from_json(const BasicJsonType& j, type& e);
    -

    Notes

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.

    Examples

    Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>
    +

    Notes

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.

    Examples

    Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -101,4 +101,4 @@
     

    Output:

    0 -> "red"
     "rot" -> 0
     "red" -> 0
    -

    See also

    Version history

    Added in version 3.4.0.

    \ No newline at end of file +

    See also

    Version history

    Added in version 3.4.0.

    \ No newline at end of file diff --git a/api/macros/nlohmann_json_version_major/index.html b/api/macros/nlohmann_json_version_major/index.html index 92f33898a..7c973800c 100644 --- a/api/macros/nlohmann_json_version_major/index.html +++ b/api/macros/nlohmann_json_version_major/index.html @@ -1,7 +1,7 @@ - NLOHMANN_JSON_VERSION_MAJOR - JSON for Modern C++
    Skip to content

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    #define NLOHMANN_JSON_VERSION_MAJOR /* value */
    + NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH - JSON for Modern C++      

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    #define NLOHMANN_JSON_VERSION_MAJOR /* value */
     #define NLOHMANN_JSON_VERSION_MINOR /* value */
     #define NLOHMANN_JSON_VERSION_PATCH /* value */
    -

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    Default definition

    The macros are defined according to the current library version.

    Examples

    Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>
    +

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    Default definition

    The macros are defined according to the current library version.

    Examples

    Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -14,4 +14,4 @@
                   << NLOHMANN_JSON_VERSION_PATCH << std::endl;
     }
     

    Output:

    JSON for Modern C++ version 3.11.3
    -

    See also

    Version history

    • Added in version 3.1.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 3.1.0.
    \ No newline at end of file diff --git a/api/operator_gtgt/index.html b/api/operator_gtgt/index.html index 75496e65b..1fbbb3982 100644 --- a/api/operator_gtgt/index.html +++ b/api/operator_gtgt/index.html @@ -1,5 +1,5 @@ - operator>>(basic_json) - JSON for Modern C++
    Skip to content

    nlohmann::operator>>(basic_json)

    std::istream& operator>>(std::istream& i, basic_json& j);
    -

    Deserializes an input stream to a JSON value.

    Parameters

    i (in, out)
    input stream to read a serialized JSON value from
    j (in, out)
    JSON value to write the deserialized input to

    Return value

    the stream i

    Exceptions

    Complexity

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    Notes

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    Examples

    Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>
    + operator>>(basic_json) - JSON for Modern C++      

    nlohmann::operator>>(basic_json)

    std::istream& operator>>(std::istream& i, basic_json& j);
    +

    Deserializes an input stream to a JSON value.

    Parameters

    i (in, out)
    input stream to read a serialized JSON value from
    j (in, out)
    JSON value to write the deserialized input to

    Return value

    the stream i

    Exceptions

    Complexity

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    Notes

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    Examples

    Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>
     #include <iomanip>
     #include <sstream>
     #include <nlohmann/json.hpp>
    @@ -38,4 +38,4 @@
       "number": 23,
       "string": "Hello, world!"
     }
    -

    See also

    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input

    Version history

    • Added in version 1.0.0. Deprecated in version 3.0.0.
    \ No newline at end of file +

    See also

    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input

    Version history

    • Added in version 1.0.0. Deprecated in version 3.0.0.
    \ No newline at end of file diff --git a/api/operator_literal_json/index.html b/api/operator_literal_json/index.html index 6fc32155f..bf55119ce 100644 --- a/api/operator_literal_json/index.html +++ b/api/operator_literal_json/index.html @@ -1,10 +1,10 @@ - operator""_json - JSON for Modern C++
    Skip to content

    nlohmann::operator""_json

    json operator ""_json(const char* s, std::size_t n);
    -

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator ""_json;
    + operator""_json - JSON for Modern C++      

    nlohmann::operator""_json

    json operator ""_json(const char* s, std::size_t n);
    +

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator ""_json;
     using namespace nlohmann::literals;
     using namespace nlohmann::json_literals;
     using namespace nlohmann::literals::json_literals;
     using namespace nlohmann;
    -

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    Parameters

    s (in)
    a string representation of a JSON object
    n (in)
    length of string s

    Return value

    json value parsed from s

    Exceptions

    The function can throw anything that parse(s, s+n) would throw.

    Complexity

    Linear.

    Examples

    Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>
    +

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    Parameters

    s (in)
    a string representation of a JSON object
    n (in)
    length of string s

    Return value

    json value parsed from s

    Exceptions

    The function can throw anything that parse(s, s+n) would throw.

    Complexity

    Linear.

    Examples

    Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -21,4 +21,4 @@
       "answer": 42,
       "hello": "world"
     }
    -

    Version history

    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    \ No newline at end of file +

    Version history

    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    \ No newline at end of file diff --git a/api/operator_literal_json_pointer/index.html b/api/operator_literal_json_pointer/index.html index f3736606b..40ee2bbdd 100644 --- a/api/operator_literal_json_pointer/index.html +++ b/api/operator_literal_json_pointer/index.html @@ -1,10 +1,10 @@ - operator""_json_pointer - JSON for Modern C++
    Skip to content

    nlohmann::operator""_json_pointer

    json_pointer operator ""_json_pointer(const char* s, std::size_t n);
    -

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator ""_json_pointer;
    + operator""_json_pointer - JSON for Modern C++      

    nlohmann::operator""_json_pointer

    json_pointer operator ""_json_pointer(const char* s, std::size_t n);
    +

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator ""_json_pointer;
     using namespace nlohmann::literals;
     using namespace nlohmann::json_literals;
     using namespace nlohmann::literals::json_literals;
     using namespace nlohmann;
    -
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    Parameters

    s (in)
    a string representation of a JSON Pointer
    n (in)
    length of string s

    Return value

    json_pointer value parsed from s

    Exceptions

    The function can throw anything that json_pointer::json_pointer would throw.

    Complexity

    Linear.

    Examples

    Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>
    +
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    Parameters

    s (in)
    a string representation of a JSON Pointer
    n (in)
    length of string s

    Return value

    json_pointer value parsed from s

    Exceptions

    The function can throw anything that json_pointer::json_pointer would throw.

    Complexity

    Linear.

    Examples

    Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -19,4 +19,4 @@
         std::cout << std::setw(2) << val << '\n';
     }
     

    Output:

    "world"
    -

    See also

    Version history

    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    \ No newline at end of file +

    See also

    Version history

    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    \ No newline at end of file diff --git a/api/operator_ltlt/index.html b/api/operator_ltlt/index.html index 3f608e6bf..06fa74168 100644 --- a/api/operator_ltlt/index.html +++ b/api/operator_ltlt/index.html @@ -1,7 +1,7 @@ - operator<<(basic_json) - JSON for Modern C++
    Skip to content

    nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)

    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)
    + operator<<(basic_json), operator<<(json_pointer) - JSON for Modern C++      

    nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)

    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)
     
     std::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)
    -
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.

    Parameters

    o (in, out)
    stream to write to
    j (in)
    JSON value to serialize
    ptr (in)
    JSON pointer to write

    Return value

    the stream o

    Exceptions

    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.

    Complexity

    Linear.

    Notes

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    Examples

    Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>
    +
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.

    Parameters

    o (in, out)
    stream to write to
    j (in)
    JSON value to serialize
    ptr (in)
    JSON pointer to write

    Return value

    the stream o

    Exceptions

    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.

    Complexity

    Linear.

    Notes

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    Examples

    Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -43,7 +43,7 @@
         "one": 1,
         "two": 2
     }
    -
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>
    +
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -57,4 +57,4 @@
         std::cout << ptr << std::endl;
     }
     

    Output:

    /foo/bar/baz
    -

    Version history

    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    \ No newline at end of file +

    Version history

    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    \ No newline at end of file diff --git a/api/ordered_json/index.html b/api/ordered_json/index.html index 78ace97a4..d10fd8a89 100644 --- a/api/ordered_json/index.html +++ b/api/ordered_json/index.html @@ -1,4 +1,4 @@ - ordered_json - JSON for Modern C++
    Skip to content

    nlohmann::ordered_json

    using ordered_json = basic_json<ordered_map>;
    + ordered_json - JSON for Modern C++      

    nlohmann::ordered_json

    using ordered_json = basic_json<ordered_map>;
     

    This type preserves the insertion order of object keys.

    Iterator invalidation

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    Examples

    Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -18,4 +18,4 @@
       "two": 2,
       "three": 3
     }
    -

    See also

    Version history

    Since version 3.9.0.

    \ No newline at end of file +

    See also

    Version history

    Since version 3.9.0.

    \ No newline at end of file diff --git a/api/ordered_map/index.html b/api/ordered_map/index.html index 68468bc94..62531dbb5 100644 --- a/api/ordered_map/index.html +++ b/api/ordered_map/index.html @@ -1,4 +1,4 @@ - ordered_map - JSON for Modern C++
    Skip to content

    nlohmann::ordered_map

    template<class Key, class T, class IgnoredLess = std::less<Key>,
    + ordered_map - JSON for Modern C++      

    nlohmann::ordered_map

    template<class Key, class T, class IgnoredLess = std::less<Key>,
              class Allocator = std::allocator<std::pair<const Key, T>>>
     struct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;
     

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    Template parameters

    Key
    key type
    T
    mapped type
    IgnoredLess
    comparison function (ignored and only added to ensure compatibility with std::map)
    Allocator
    allocator type

    Iterator invalidation

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    Member types

    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14
      @@ -51,4 +51,4 @@
       m_std = { one:eins three:drei two:zwei }
       m_ordered = { two:zwei three:drei one:eins }
       m_std = { one:eins three:drei two:zwei }
      -

      See also

      Version history

    \ No newline at end of file +

    See also

    Version history

    \ No newline at end of file diff --git a/assets/external/149753425.v2.pressablecdn.com/wp-content/uploads/2009/06/OSIApproved_100X125.png b/assets/external/149753425.v2.pressablecdn.com/wp-content/uploads/2009/06/OSIApproved_100X125.png new file mode 100644 index 0000000000000000000000000000000000000000..795f7a06ed5b32131e69f245f1e1e0f4fc22c5aa GIT binary patch literal 12127 zcmeAS@N?(olHy`uVBq!ia0y~yU`SzLV5sF_V_;wiu|CGmz#w$LDkP#LD6w3jpeR2r zGbdG{q_QAYA+;hije()!*4vqpMLN4Dy8PeBrOWtvgA5DX=6j9P)<2H)y!SA6rsu1F zS(l$Gcdu{rQ8;v%{leV+|Ie4!KaPL5b5~5%`o&@A_uG8xm>j?B|DW0C&p-J5`SZ{4 z&%dL7e676x?YGmDl}D0){mEbd{&V|t<@f#XKfm64?#a(jms^ij#&3v^pYgsmsXqUM z-T%_XB6j8<-aFl?(Vz0D`g!@wZ})cg-K)EI=sMfG-@k&{_RXz(awSREbjz9ZGPT*I zAFBK9%wKKWdg02v-}U!jeE(k_pWnMibDqeg`nqH1wJtxew(I|8SrPBid7nG}*Uxp= zE*ecc@c!}Ix6xPXzrCNo_TJw;f40Bfzom4o{r2C#w{O4wZZ)^*KK&*4cZKYi|No;# zBVPR1+O_`g>(~NOk89JK znD!rK7h9vvRl4R7`>plt_uSkM)pkeCW2&$H`_I4Dw`7A&>bsnRs^a3Gd)2HBQPHBS z&rOTUTYB|cRC(@}o5APzez_I>zV?gdBaaPvl4l;jNba%R`SQuB$^QQL43@ikPg@(Y zHSKQO=A8}aPpw|F>(;C6H9H^s&9=N(y8Z6=8=qU4r})`Dy>i*l{_z>^D|x$qPK(Yj z-hRLEdHMB2*4y^i|CNsA&cFWXvgY26wdK9((Z6@O2+S4v+S7MbCZl3;b_q|y>hyi> za~4}IpZ8O6W|vT8N?>tW!0{Iec8X$d|5umiKaZL7-@LYXt$l6x|J&y*x4w&ib0_}y zx8>_{PkuJ;crUSPg`HvTp1NN>wO+dQHhour_wAIPwOhxs_8n7M+pQHHxujFqI{b(BQozBf7d*0W)XGvmT%&k>NP$m$^-6I1;-pyiN2ZJw)fNC)On)i z(Ql@my||5=F*qd0)%u1MvufB)i=^3~J|!|YZ}N(24XwWBz|1#m*JaDiEsmj=T7?g# zZWlV0WB&Hl4ZAz$KLT^-aW-x_#GCM2!2iAa`pe#%Z7=VN&u3}1p0oRMOn_35)Akp) z(#}hAT$f&`f8h3ljbYusDf6qgOADJCIXjj~CY1lmJ;1p7P3x-&x)qfxlbmfmFQDN{#ywffHKpJE6n<6NRW~@utEw%oEoAPwa`PF> z<@AVKi*;A=8}WJX{=22}^{x`$*~Mx1RvOfsUNg-7^)q4n`XB5b_0GGeM$ZQCEP>r+l%j(`c@_auhX8{hTi&f3?U`YYa6+w0|(tCCh? zKPsAdzW6Wot`a}GZ=vdv=GRkr#BTR}IePQi=O1Ua0-5AWpPIdXX;2lj+w+g2v%rA~ zMtKh2!Ly2AxGK5F{z~ENI&8CLW%gk{gG0-$jK81P&-tU@|0<2QZhmO-JDvY)Y=t(L zy}1*#vq0A8HqYjFDLrrQeRwJ-T4we9ipaq$i2*-nsco+K95Gd{d8P5)zK`=}@rIY) zeADJyeeru^ud&s{=pB_oTpSEZ#ies7<4+T8#ib1IpON7>D6#uZ!o$P=eO`$=2AydA|Kr~uCFg&3O?+*o zYfQx-Ol>~1$iPg*)}hSEJ|?hj?+oX23cbG%fB3sSbE^jw2 zl=+?J=45gxU@M2^r*(F@XLn}VpK;mC?7JZ7DW6G2LR#6r3aL{^^^WmRuMy~cm*vv@ zV$bWKR)0TS$4p;bnzCCYm;2tezGg=@oJX3aMf|G+Mo*6s?{1!fu6kv7Ze?>ht*g6<0t*L(G7Oy-NM3}*?U{U)cs73bgJ`tEo+XPURip1zmOOH0>Yez=hWat*Dcq=leTlWap3bs{AKX%+rVN-~*Vw}vh;q2Lj zVi*3yEQ)+@3_0>%ZZo_3?Sz+t{*Eex4_EUu#aJZ&c$t)n8=Sn8GBa*|zV&GFi;#nIhwr9V7=D|1C-Y$I z3#KINg)f3O`kS(dL~o5W=uFF9E0MWtzk}Gb15+3N<^9gV+v4i`njtZ@e`A}@97Q4h z$Y+5cJWEdZA|ethVIdcjnU^leyU&Zt{wra{j-AwI#~s=n3Yh$Nyh# zoO?*~qtfm+-B`P`hbGh?S=*Pw*?(H1VbyF=E@_csiL$gqAA$s%IeeQ`AL}L>cX5c_ z73zJE=yv#AT+O>pjI3WjG06RUw=^cCW7g5PPov+&{SaK;z}BSq=l!{iq{3Sf(q}jh z3IFZfY-Vb4Zrh(n#?!l=xz8&U`SA6w7T+cR<3euC{DE7e%5N4kSHEGX^*G)9efF#L z5390%^(C-7JzC8u5_cHc1F>u&%H=OM` zULs)Y(%}-A>%Z#2=L74vrmYdZ)VBJl=uxu{#vL!&COc$mOrBL@$gm?`!Ov=uXy>As z2~Pe6lRQ5$%NuwKR?q(B@T;WqjPNeK|;B_l;-bK zudiFXrj605^rOR##2mSV%O_b}8Z0;SJv{jAnc4Qkmt9w-uX0VeUL?^xLpOBEex+M) zXC7?5>8^CdT7p$=k+NCk-L`esS|1)sJXz#wBG95}v^;i(zd>_QOVYL(t&bwKV(b_S z581uo>EXM$we`b=o!12WQZ9%yHh1ihyS-<*&CcU(1?({uhi)8L7JYGt-yZ9KqW*^# z|28o6`j~6;Q)PEkgQLPehqX};Hm}T4w_U7l9M&eU65;teElLT9G4d-K|z8 zPSuYI<-!lQ|8n`aWa`8p#R^+`y_PCXNpM#`>K)banDzX;I*Z-OJ1Xy%|M=s=D=T&I ze2m8|Q@s$DD~>XWsm=CzEGI3_h^&)8d#LxqEhYWzsoW2$*6fqsxck9mzMhooQz|{l zA75UW+tIq|P+3TJ&CXtqOtqkgo)PypewLcKw?SD|pz^>KyOmEC%~G)tyvocf@Th@< zN1gTV1h!ub_Bog7a9L+2B=cYU{PKw6#q}O33U3tuFL)5Qn9qX6e7RAWs;iFAj+6c3 zm(HrXO-wxz5uI%@H|)W@lM`YrPiB%p&*86{ie*-nc5?n8@{c+21ESOuk)^d9*%y&9N!ljXuRBI~+M;;i9+x>8;DW zJQ6a=30)S}jrA?NuV3xtHIC`^-()+7W5Ek;&D=>(OBYzWU-o1;(Y9fO;DPQtdph2+ zT``orU?Q=uhgtvLvc3<~y0{}Q@MgNSMhkYz^#QR%2?}O+QW($W+%_3XYDWyNwG^-zfsMwBKm=^=PL6@ zmk;PquDnw4Nh*1R{x@AsX64Z5ihOx4P1|&5=|-$#ITd(7c)DIE%R(iE`P#`jQigji zC$QhO-<<#TwfWBLUSbw@{ZWb%Kdc051G9oI9$PE4k}uc0rMdKpr0l!dzvY!wQ~We$ zMJ(wsN!q%S)htbC2gfekt{(NpZqbaNU-a9*>1CYyhpm0Ojn$6>v0TSje7UwEnPH*r zd3OaPrn9j{W)_AU{s-7_{k2nKENI#MZl`QmM#6`Kc~cJr^X*ZId}1`;(W+AD-~^fe znaoPU5w99@oWBZ)M;2N9`m}@Vklw-s={3hW5?@FKwFO_-T)4>n(#hHdo^nTzC(fw6 z)hM-yL%r{1(On+ZWr6PQpCavLo8?3byr(WB1)Ox}vR{5F#c#eFNzA5o#yGTh<8}F2d$1nM$ z>|EOE<;4Dn?d|0Zq2reBAKEf>p1e~yy(A?{e!9J@#UV8oyOWpCc4*Y>T^slHcu!;a zr2O|kp7p&gT)I9|=iJ)Q>lb$?waz*xrB@f?ZeF39Gy8bgM=j+~64w+S_a3Tns`KqX z-zIr*+mo%ahj%G+#co-0l!;u?jwUU> z9bPv5Q5#I=)(P$?zp5zuUwC8RlJcBi@8(~Wk)1I)!sF+~QQgC{6&D8Pzd?7Nnw3qLSpBfkrP*(Sg5}?>3B`^Y?2>D&l#ec*-~U#W zbK;U^e07ujcAmI-GW3$9k94ufTF#ScPo}lmJrdt#dXxY3gGu|+-my$weN3JCql@9m z=d;arN8apfO^s=vd3@$&evx{ELyY@pAJzZykUv)Wl0)W3w?!$7yt+3!{OsSEbN*r3 zm6faJt>%qde4|4{ZQ800{d~JWd@L^cGh1cK4fi=k>Uv3c6pmKOI5!9CgjYCDVcThT z>d?}qiQ#|jMEVwVtqS`1Xy)3Fe*`t}FSTiCKk(3xy_b1vhw@sBmPx@4a}07foVGB2 z`KQ2aZs_C2j1w0GFD?*#c%uB~cI7hN@Ap@Hp6&G5%*oug#_we3x+RHi;S29@1qGx| zOes*ic4gwl&&TF0SY@E+m$O=x^Tn67pH~J=Ox5a^RQ+8HoSrU}-gL$ALH69n^{Q5Ev8L}>e;&PeGAB8^aNfkP z>lQFeEA^f`y-w3#p>pk%!2DEw=|$7;D`!pYTX04>=*q^tCAa4WB`YbIa;$%#I_X@w zx=yQk@S!X6*JjSEOSm(O^T$c2(yeZ?CcHCOeB8jic*E=MCFwua6gV6ongs0h+NN$7 zEU9u~{t^|(f5+t|A6BY#ip`Mwm29Zfc|RgJpl`|7b1U*cG(5U=L5(y0%PFZ@s&`Dg z3}UleH>`A)N!$Hu$E2BQcWozU`!4%>Vs6|Gv$reWR!^z9D!1VNOK02jSNV^aeURJ` z*5p;dP;qwBV^Pbvxfgtw7R)-}?zxlo>AR^P+znlNi#D?EW1Mj8&T}pObK~%`^AVa)>LKv(Qd@A5&Co*wjPHaWRAuMFRcsVy5)F8(YbV!g4UxIp&CxD0oq$$B^13BH_7yf zijiTx-qbAL9m+1A9xEHe>iB{A$jOVI7hS#n#0O;vK0a7zfA4PfoxRL0Rh^k($1N7T z6g8IY?|gY?l|)5rLte{;{zr_V=g}Hz?c6h5%iL^S zWdcp-ernxvTI;#)xu}(=W_^F6&y)6bYU;YnGHx>65lt+DT&pw|wQw!k@@h$h$ECV6 zhwY#IP%YAYqSZ7pnK3nEf~@@y`9JTjo$~eD;dxNv!q24J^2!bg;u%+Re*eC)O;k zSzMj{?(r8!kHGLw=?4!4B+dqZ+jV^R?pxKrzx!<7FaLRBQOVk%Q|B2N7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq{X&#M9T6{RtDNkhyu`#ks#37#Ji=Tq8=H z^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-85pE|JY5_^DsH`^}9^0X`6 zsoq77$`^AUyP5jEkPw2D*)`+uw(-^H%g>qK@Lif0 zC>wU^)MlR70SRgb>@zrIIC|K*8fp$OBstg%u$VEfJrI>3yFrFy2CrImlf>@ewy+W{%r?7NL6s# zR(!Ip_{4MIfLDadBF{+^Sx(N_x;b7{G~r)ff=*seMo$mpq6Q7deQYs&KBup2dZgJZ z5+*t!{Mq5~SBJx29G(3B=EKspEv|d?9c^UP#dl8J)#;tHyxR1M*;`|+_QC|GI=?89_r1bKzd3SVs0#Wm zdCQc?R+nQoL$+F7q4dH0*Y+$sL}#Sue|sX?Gds}j=0DX6?mfGgm`8bb@5@cxb)R40 zZRhLVRt@iGYM-^fu|=HmQT&VV2_NPk=x?z3-6y*Fl%)CAlI8ytt{*7bciDN5zHjn8 zhJATvGtO4qDEzDXpYk9sVc*`h74x06_*WkYf0SH4CFPFN2geEPt}>di-{+e%okM+I zPTir}m_2%pg(@F(3OE`b8n2jV-pI+`e>-=JQu6yR5+Y%u0gv>RZi%W2`Z0+xKd<;? z^H=83>c8*5zPD_UXl47y`tNe%@dmGkrc*U)^CNr%OBt)XD!BJdc^BQ3>R4ZWWt+-; zJrA)r(PoR^TzqgVp=i5#Wa;v&6VLe1W4@Eh99!nVIki1BMZe}Q>!sTw%W@;t!;Df7 z%Wd3nE+;Fa$TigF<|Sjs$9d8{AB#_|v`YFT$IIs6=_?rQx9(W}r&tD;ObWf1wc2JDnynST$`-MxEb;KF>h;DZs7(r@TE6y!* zI3^!+ZbxS7o3)Qleh;u&I^n{!4R3>=9bNo!TSncNvp>H5Soc+NYj>9If!YIh+nCo| zteCSm_S30PGfHZf=Jl;#Z?)movp>jWyTkEO>R| zqh?RT@4sLFt@(0HaORqm>OOWcN?QHL(+!>;c@=xi{jHYfiWBOBeZp`17(*C>Po+<{ z7l{x)v9|4s&YF)5+m)3oL*4uC=dKjko_c7Z=ntYSf;qoi^z4ZaB=)_1AUE z6|v8SqW<&RUsYy0TbciQ{r9J(ab%MEbcUmC>}vAit?K6wACIh2wG*1ia&eu6lXxlX zHMVI_y`1-Hn=ef&v)q>?pUm_)ed_C;BU}Gf)z5t0@Zeaj7E10KNdj)o+sXSIr5kbI@$lU#c43H|6ywoF8J=GDD*LGrtTbuCer>OK@0NYJiHB}0yHqEc9p7?#iOJr@ zaYZ*m+j;FhBpwxtFUgDAo_**}hJR1o=Kc%U3_e~^*fWvQbuyRcTJ1$UmT~m!ZF*1uR(oXS6Oo5sl( zeeACvEwrfh6>O6K_UNPJlkg{r5<4H4@bo7#GhL91kgl*?EtQm5%ca4naofIp-(jz) zFKhTOeSPP?qQfji^TqB1X(5>zng+}kT%prm`5v28vgfXEL9xDY|00zj&VI7pgVZ{#o;PVMbEkv7>8uxZeKcw|6rgot9!(F0~~WBaf%)zA-g;b~9=UcPamNw-=G}muipJY(5xcf9bWU zsfnt$lWI7lIit#A&s*UoyZ%{!I`zrGX63zV7qib3ZhmY3^U3DAZ|L#cccbK==WISG zQ=0mA*YfL)vp#)bbJ($T{=R1$c2Atf$Qr7tYZ>BGAI4zm@jN@`YTq=DjSgD-ckC|C zeZKkTu5C9Hjx~0(WQ1zXvfdoZbtQ#+!mbdDXP*>85|Y=ileK>xeR=xRiYeud>nNzd+`o==ki_()*Ii&xV=^T;6ZD_v`%VyQdb-XRZ=ecqis-{bS$B#cV2>DvrGO zcE=qM@P5ARUfFBA-fn5(16mFL{K|c&EpFMCa-~6H8e_nehmUTWM{eA5WcTUR`rVud zx*}C#Q`%+!ME+aB=y`ko?W)yFPG6S~IKHI2WUpa~TZ%=)m)n+3d{=Mh*6lYajh|m_ zdv?>BGjkJ;sChR^ZCI>ee)QpDwVga2@&`^B$Cw@sQ{tWQVFhDmPKFQTBeVaL!zZzw zSh!Acq0zIK3_l-#DkxsaaQsE;^%abQnapo?mc2XrW@+WFskX2ytqW9vU1PIJ~MPg?oa?rjH%F z)4a7kzb>p;o-Y$q?{%2wxzG+^X`=)%Uf&T0w z#;j|?sqE7pl=- zuc(vvf4u&CxUT8*jQ0Ka_H$Io-r&D-NiHwD-6%Zs+LNhk7?nP`ymEW{F5B~9OO2Xr z@XGvMQWdx3-`mfPfB)yttn=3&tp9#Ke_ehZTSQODYw`ENCyw}sy>ec?&NDxG{=9mf za^?vwy8>s#czm>T^_dsHHuy$ygZm%vzq9{*{l{INFi%Z_^_bU#$_K&UzI8>W`q=Ec z6uL@9G?w*oRm;~YHxtx0ad~`idlz1?tM)^6v&bgPMOIIk%zXG|N~Jj$iW}#6EZG~c&$9o1%?X~}Odg+4pLM*VH1SBa zaLerC<*H$aE@f}M)tTmt*n+fkMoJ}Lx)`T^D*=1L9~P~CI7{aYTe0i~hAf+1>s8I8 zgnlS2iOk5mnQ1L=!uXD1gU;4_p?XWKYY#TW&-8ZNw&iC5=iK=xniqbaEB9Q%=bQ5h z2cPwPmA4*$%#nGtvV74pO@SW<&#rtpN_|sK&t-_b-?y2eBS@DGXKfk~8I_3va)?41h zh$=i2nmef{n#F7hL;f+TDvr#r(F>L-tvFNJU471W$Iftl%_@oR=Wed@yx&YejWOEOW1gux-{n|wlXP{g=FiU7MM2j8tCc za=rd}Hh!DUhSU<<^GTdR=S2P(n5<$@xpeLPxA4nc9(sn-XT&#Wa=F`Hy1!$GA?KV< zshP^RWEVeOx=k>Mw8nXubL1pTft@y>F&9aA@2;aPojrK=Oy%^DZz7eN0r=m1$o*lT|p0?UZuapZlMJtYhE5o%7wxZE_2n z)8(!EZ0>X4%$ok?$&}*vrsePMJlFv&Ivge|>X4d{Xa9ww{{Eazpm)%W&?%T*;#V%{NVUpOvUd1!&+h6Yt zRsXQ_!L_&d)QSwg+VAimEGlHqEZ`bP;;ef7*L~bGqa0 z*>hDwOT^gD@vq@cDGf_Y$W;il+x&;&K}U*-=fx#W{c9v8@5wDJjZ{DATWgiDo@u_R z^qK9yX5W=>EGhkzkdT{D`}54F-2tJ`jU6|xZ{$@J`pa448n>r4PD%Ffmo?t5;or?{ zFO|%f{=DK;`n2terH9)Vu8LmM;u^pCly22EHcyuz^LNbajy{rpCbW6BjHjQMVV3yS zq{wTT2l6k9DKlKD3bQ+0H<|Z9U|RFfUD|JdBB+ETDLxSNEzFYb ztJEIR1G5jz_lW=e(&CECyzqvH}=X+s(Fht%WyA`g5wj`=)$$@!`OJOBJ|+VZjc z*1pOE^^0Hiu4i4A@jLDGK6|G4^cUS>^)6xypEXDH?GHP-ELoS^IL!zwM3d zt%Q!wUv#Xxj&J4m7d63~e%dqJPssM4T05V)YDw>OChf*{w>kEi{4cUEar|cdtIVvx zctvOV^sTw!Cknr9W7*(P71BPfT-1@WD;rl;rseyH#^rga<3E@!`~WxiLog)Z_q zq~F6ZAzjAgvPH52+eM+zr4+NLSN;lb8`EFd((_J{JI&$rt$i8qtO=Esiu`4 z8WT&CPEEM?J~<(@ZG%dKnY&5jnboED6x3GCY_!yD-uw4W;>$+4i)?d)?RhH#8MZBD zu86WacKGm{CHtrQEuCEw5d3V85&Kr5`(kIg6sA4lFg)ta<`SRbt^Rj6>jWQTwYOT2 z%Z`^G%f8~n8P(e5v25n=vr-w>lV2Z6iB+t7l(zAE?WJ=*+<)_mZ~R=?Rjk^UwKGhO z>&m>?FU;CeR%EV zo$mka8l(I-ddXxk~*Uvn@~-SK1h zj2qmlD{ju*!t`JD`CWx+$*X>BT6$o6fbtY}&kuoYGQ5Aep~AM47Tc)vuXH$bvgqPA zpYH7~Dp|8t=RQ~4sWh=GY&vX(Z;x{yw`arW30vMOF#fi*JU;a$Q`L>?#}RUKZ6&L(-jYyAe$*D?amo1l!9rPv zEBv3ME~`$wJ@E{Ko&71Z>0J5WHoj`P?<%Gx*Y<~{;<(^EtIa>=b3U|)X$qMxta@wK zk3yy+$3IN3JbPKlU#04I_v0Bgy&Gh@d|aNbvR;x_Uf*zY-RW71k)NwS{Z*-)F*$I} zbIBF0ldfByvy6H4d8dX^anl_0=q>5XT9&;wxnFKnVAsVrUuj`sjNN~)b8nsZ&dBb* zVE$F;*!-TT6KR_l|5f)sv@6iNPv3Fl_K!Tr-+%M_YjNr3P40lnf8S5svnal3*8i)0 zmX1EME52`e&S@N=dVt}K`^Ezq4*&i7?zTx?-{JqwSG4}&&#gp4-%Z~0Fps@7 ziJ?4m%4ydFn=ctEP0Ie8;BOpx-(m07v(xr_En2>QV@Y4i_iZ)ZUqY|HJCm?U&w1^a z#r8I_eUs*#*mwS?q|db&%ViEm&*Qe3Zhf-Z*QakfOa8van~%yoEA8j0mRFy<_isSm zhYT^hE!z3qN54GDW;__6qVeUN<*jYSsnG(V#$waYmzmtu&$T<1tNvzN3I8Vp_h8|& zwjZ;Ut}Hn{Q6%lY=9gnjKh;hY+jQIRP1$kF)hsh?r6%N@zcIf}iRFC5m03!`6GL~j zE9!T=v~fQ4Q0`_M!=2Xd*B9PeD_(rL?if%*6$skmCxV`7(ho=P(DiRsCNhF_7o_@-61yirrl?|>dj|(#0HgS9? z_v7(8*K5rs9;!35*Vg%3CGON-61B*MS+n~Rqvg~_uCJ}t3JS|7ob$bTN$+P@@Hyvd z^{aYilCB!pZmni6(pz;PTlwYJ;NXBQJJ>@r%2rJac-O8~deWWu@Vp}o?xu4YALTPL zPkmT=AX4al_0xR4tQZ#E`kCEY2RE*qSRAmpVb{#N{6D&4igy^_7B@JMd~@&D?nysx z_N;S%^ZVu!@e5}idq0MFFRNd(?Y#0^8-EFw-;t6bxR`RV5cr5zfYf@UU zn*G$j^QYz9p7iA6zU}@di{>}J6@~>I-IXpGnIJ!yWQG6 zyCsk#>-itQ#U*c6iil-xSmU8FW63w`ealr(u|KY8{AgJeu=h(5x9NXJ_9tpDcX~hh zUDNx2XIReH>`%4!j7KKDDO;Ek8MC5abHzbz?$C8rtu=89-(%GGrmo7_A8u?cmbK`d z_otsCS2B`rb1;7Fip&<3N}ILitC!_>9m_hyt`Z#~hd1A@o%-qcGGJQDXVw);mirAj zr)`nHk`PtmUUOTy>E2ByuPKd;iqaDv%RH!!W=>i5EJBy@0NWC$Z*$e|ufG;z(I^!( zS0k!&x=jps=#2#C4X$#pveq(xnGh$lv7)8n%!K5;;y3%9+SZhQVgSvtFux z)n39rzgOz=zg>6kt10D+i|&i4x#ae9zKHsch^kv`7iWYfMfnNw+UBwI?~U=9{df8K z;-3L$&N77r9ya-?xjwt)<=g}IOMR`QI*zp`wY+z{Dyy#YqVj6t+WL-ZrD?lPaDNi` z+jqlOaoYv6NNE%HZ7#*Hrloo5T-m~Kd!;pZx4uw7$?~|he`kcOz_2rS?+H~LPFV1>~`@4nql%L?ga`s$^ z=cBO6b|F@t=R8k+%?Z69ertcox2tJ8?oX6FbMyBj?n692{3|9VD+{H5%{-qtE902a z&AJVD-rK(2KJBFQI^nZh*E&sBj+v+TFJF>*a(kQVwl{(JaZG%Q-e|yQz{EjrrIztFl%InM3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTcwn`Gt*5rFf&&$ zx70HIbD3=a&{Grv{~_DTCZpVC7ttnpl!w6q28x0}I7~jQo=P;*9(P z1!re)s3~apCMIX*fdn-Dsl_-GBZ=G+?-qtj4WN;T%FA= z3=LgPEzK;QoQ%v(Ee%W^jh&p0V0vBhlS^|`^GaZPQ{Z}C4RGoOB?wTUSh=JYWtOF; zxE1B+Du6w1m5JLeE;!AD>P^Av78h5XdiCuTZ1h3Vixk~3p&%DG5EGm-L8;VE0g?Pu z^HOY;ij?f_if&}2Ffgc{_H=O!skrqfmc1e*^qYO=(l*W><$9VyM#SjU|meu}H9A*Aub6t%_)_tf|PKmUG@`N<{fpYQpootg7~ z_kES%d%NG?yKnn<-fJg5r;q-!{71RBTjXub>VDMr{qPRf;?Iws-F&h9>77$Mo)(^d zHtn$P+~`TS{EDnAK5X1)*=NwFm#%5i^dr?~yXPIZBI#4Qw@z*MeLU?%F8_AjJKGF9 zKFw{|=-(g_QgG%`8RK@vvJW|1@9-5wAI~*)IKr^1fN9xh2d0aLlW*JPi5Gv~{8>-D z@OR&BuDonXo2PyUZm?-2|9Hxm7hc5uVo`;8QS{MVN#^wB!Un&ZkIar2D~MjwHG6ZX z!nSEezZ(t)zhdbzTX3Li=k(imSD6-@39ngWzH{%n11HOvmOXZ;oN(LrPR+@UD`wo5 zz7w~_{lShKk^y@{7uX!oogg!tYscOtOv|ru&S-ORv|sn|o6UB)Co08W&%UYW%{MH_ zl9e;ynf7mk*bd*)q{X4PI9^Y1EWV=1c-W!v`E=Dg|J;1HTl+D^y7(e*}daz@&%dgUwdP%8FkD*pSG)J?T$89ew0+dP32hLe5+~c>g|EL z3KlD#-9Ej7zvIJ_jT`O0Ts&v<^MB*Zhg;NlPN}nrQu%*g=86C0Uq2>kD?hvb#VBg0 z`TSF>voZ^&h*$2|8Ia|u`cx!5(D(VOMe;?_Dcatr?z$y(KAnDkXYYou8EwCJUS2Wp z-WBB=4i_0uJ!Vo+FV;G7`tVe?PfwDsCY(F1m3{L1f(Xok9t(WkFQ9vQa->Yd-Xr@3hSHqKwGX8Br`PMGhX=%;c z9~t`l(sWbBG}+GN3Oi>;+0SOZXn5@PRm1mH4G;U219nWBqGPsN_=qo?e^yYQ>Qk}s z%g2&kLk|98lT!PzEAU{+%?l0>9S$e$N&WhKx<*4sfF+Yl$kbI69z@wj_B1|b$SC*c zTs+Zs&sm1YewBZ!i$5B-9KG>yixFeSg6+~r+az3k8mrnRBbNL;X}iWl;`P*5H_ByY z+pPZx?6*l?>&O0k$3@kTj3VM$3u5M(yik!2aTT4+R=`rRbK*uH#v?E9aQ*ykE2b?V z{@s^*`3wbqK}&(q@O}=Z#|yH!zLqZcFVkN1?D_rfr%~Q%E&-;^9CtYGn?5&K$@*1B z{mOOUlG*FONk9ExJmazBe#=QK|D>_Kw*SFMcrtP^C8`%@eah*YQb468Yve{Rzj}PweJdyrP_|3`t$4h-g9YHNTF(EK_xqB0I$h@yYoA%Ov8=N#k5Fhe`hM^$W01y`rGLIB znq9psX(2FC(rvXx-f}k;9li5+KHL)9&D^799>1|I^3HtAhRi0z!hQ4drX2X?AhQ0| zrLHKhM8T{5>Rbv;jfW2;S+t~+E8@lM~og6YFy zNsAB9-&hBG-EFp6b9L%doA8x9v*ug-s;rc|!<%w6<&A=wzhTGe$b)mQ-S0oPVcvw; z7*(#^y3DN_J1>ZS*uFQYRWh8V-R8ieqMAAUy{}fbsQ%ipuhrnlKI7C+GevbDS?bIS z+f=csV*iwGwhad~H-`H2znc+fXQFT^IHi8ktI*cg!skx{w6s<){Bp?4$jBhc**5Y| zN^oK&Z>cL&d1OtTh4x#$O#%-DS{`w)UbSV@L*s+|A#2vhZJvJH#XH$Q%H>kf-UCfj z&C4?yDzg0zckg?4MgtNncgYNE)BJ)~*X`f6Y}ziZgTJD7S{`++#eaKp%%bma zpGVJUH+czP2t5A?vppfSaXQ!G>cX>u-Iz zwZokw?$zF#F0tP(P8E1JLqaRfSZKP;R0gRI*@maT0uOHa=`!(!Nr&^n=9<$#0<30) zX?6RsAL^31b?+|6y0nCLzKy|#k8 z+T=c?KFhQG?p&E~*S9K7oA9$-y}K}?{{!FaR{t|=t&Z>NRLL=#y{i3Z4}+q}&Qq_X zX35GcG#4uEw(Dp=ue~b!q^FDgr$>%){6*OUDXv{EWr16Dv~=`3^eh-k7p#0Glg-}q zYC&~ecE7;A`huz*FEk2VbZ^g6wiADH_8Z5yf<=oZjb8rjXlOQwd%yX`vERk*Y+j!) z`g7LB&3%1Myf!+%!z1F4!TvK>Z%MOoDt4tEXYaCSjbXhQ%fPv*>if$eb*HEWdxTVj z{$FKO?k*CKIv^JO-^2gcl&^baJyj=pF|J#4@y@ZhvL#M`QZ`;%9TsTeD3#>8!?FCC zLdVwwd+n#3J$ky0waZ$@&#FM$Wp1~2)|?X=%@3LmykoU6eAsWev_|2ufJ0S%v|gsj zvjDl@+rms2=}P}`yd)7Z=fdsq5>bKGx|6gzD>!8W10KZPns73q@RiQntp;-cv)mtHJ6Y{q}2t%^lbC9dhOL%^e^J+Z3N zZ!^+%3Uf{?%AdElbB}`HOEz}?FGY*5o27L}J24+*mboo7y)fIg{HO8$IqRREJJF)8 zv3B9!bg$OXI17u02`2mJh96vc$BVINvW~LKp~DN?H=J7b_~@GRPfk|<mhp|ZgF?H zFAkUMH2?5(pL+7+vV%wLn~O1AEz#U}o|@I|^qQP@Ugy#YFTFC!zV6Rc?}&EDKe>Cz zMyF6~=PZt}XUme0@(LYSc=de4O55T9hTQbmE3XxuIk0o`r5L#aZ?E;wdIMhQZ2BfB zzbj#ZeeBsP9-$>+tEwl=UDA8zxPbKAbFW{!2mktYO3C$B3!kRKfdiM!Tqi}bm$%>J z?=bOJ;i=uGeqZfQYSxvsR}YJq1*;kFTws(hgsAy7jBNbKXy< zWa;aId3}fPB=)j5&uN{0DXb*$Ow=sV&Fg|0Hd{Sqn$39Z_5-cov;Q3zTOnE#dBBPJ zzz(xVdLJC4_so>O_{`piclwdH=ayZ{(r@2kZnL)_{D6~FLy=2){>n_|VCi2y$4ol3 zLw&ZKNYqo|?c4S6PGosof@9>?9A?J^!GkU@jJNqUXs!J8(&WI6U-xXAZB-6(waCth zbiJCSnRs9LPuwyiRk47EuFmzdo*MXE&wTlVr9w*bW9?xZ)r7DUTsJDVO?cMNyY1%^ z(a^Gck)qr7nNK=1FK)KtyY4AXTEG5n2%NNL!}*s1vz|%ZEj_EX_m!a0hW)x#Q7nS_ z^Ch$@rEHyTRMrZuDLVOuBdUH&N1bJC($s^uiXQT4ty@>_79Lg|5ZSBVTKOzsMf&p} zRYj+qHFn!f*%Na*Qsqi`#fMVuWuDn}8*bGK?yP(9hvOpyvrfE<*o%#}5}oD?mo2V7 z<9bQuQb7w(5c|fRIZpZVo_$S^IqW1h96Mrst=olNsz=1bZIe1vfHm_P52@p2ciws) z{c@Hu)tm3stOb6&MqhPQ>_w%erI?>7>CSZ(lXz2KAo{{c!2jb##z}W_x&I!Gc?$wfbJJ*jir32MYo)PXzP`7mETw* z6AsSo2cK#W@kR-~Dm-;}lGT9~=_*k*d>47#3|^gTytXklXk(dGwlAUN7f~8p8d&V zc~^CiYi}dZI@#_!)53RL(d_zh`|<_D3lHY)D4%=3>37S%nZL4fnF1y>x7@N2@Le%U zRQi$UXE)Z1;(B7*2lcev!gkNr+#?nk(y)n{!BCljUAE@?^O(YWruQQ9c)iZZI&tdM z*~DmPx_BtPJte34{`!?&r&xG7EUq~gUipyk?|huGr+PL=tKR852d_IsI zv@WP9Y_XQ*Nf`rW-Mw6wBp&#>ycN4r$auSXS>EbT(z}aZ?Y2`b%9c%VINnnm&En&_ zl)G4967TJ02iJz~?6Tahsj((~Z;;bHSH?hZF2i@3elLQHYqyG-F2C{U=Y(GkN9X2M zW^S4I%Tj!nG$zj3$i^WO)VtBNG z*Y0C&6&;7V+Yac9nQl}0fBlnfe3M}L*CQ3({EY33TJP|fG_YvSd|-9sRTlTEr>g%` zKjrMIK42}9b7FC%;s3?!CyVksCdJjf?$di8_36P$eS=+I`wFvLYHl59kouIN%zf+6 zycb~GvU5we9DbnTzpKbaAoZh+!uO2+SaJChia7ZAc=k@NrnnmiJJznhaBO2~ zivOnE?L9T0ew&)?|IYR4vqsVboyDaqIYYwUy1MuNeRB2m+NZ1h7#utbc)R7qSFOmX zbK+g|gYDP#ZIN8}O8g_A*7$#MjafRi?vi`-MaOIE^}gpb7C9d}+t|8Baj%Npt;jh? z<$Sk&7M$C*soOz(72lot0(obxa?b`OF16oV`$g>M?%DoQckO?aw*J1lYwO8W2ZpA6 z?dTmJBCF5w9@typFYv2jU&96SFBijFv=%)}aJ)Z=vigz91O};q0B3Z=EyO z?6>*vthRTvY5Tmm*_syv=ln{{{`KQ~_DhF*mY=?t7HThTG)wo%S#EiER{XNsT7$c% z|NMI){Og(|%if}kPXcc4=@*F+cxnD%$+B(Z?4{}eSUAd^>y$3Dq~ikr+e~1l$Ds?mFAPRe^lmI z1uQ8ti0HbxQb%?PkNCBk!f6*Zyz6*(_N@vuSnO*gC&RvS#);OKIWH%;r?z5edO zISEXEF`C-b+dLT)sNbtjtUt7+9Zhi20(cAy-$GLw`uod{$u9&s<#WcN~vr#g4 z@ADp*b46*|5t~#M_YFp&ak1Vnk9q0dmM&SG;B5Cd_r_%t+p6T*_gN!u8BM?aS@y!O zEi1pcJW|%_YkHxxM1_HE={y~~R=H_H+sqV#WJMo1N;34w+CE&;k-O!|obVOf>nDZ2 z|6HA@v$x5KzwXFkqQVt%fFc;4c?dzri9?6;cCn&I_NB-7dC$v!Uyj+-D=!FTXas#Yv##oUH7vjobqTdTD2@lIJU9s z=iFuIm)%j>d0?7AQSthpFO{uAuS}NdIknNI#B#xM?a;F0F8V*8%9p;JBO9!C_vv;% z4zU19hRM%6{QDdp+FHji`_uJp_ks_xf0pfKJiB?qCx#h0?zL4v(%0SC(X`KN-;U5& zmiZ5@f9TacJ}`w>HjVec;bfUPhxTsDbo;_qm2#q+_ug^2#qyVgG*;{M%yG%yxaQK_ z#|}&#ZzGdu?dktMCt>B{5(c%CmV8`Cf6mRiUd`v@>33kp#SIhwzO6cck+JxaB_Ee> z=bxRi?=21HvLx_X9dA_m%h(y-%lSUi+H?{3MaS#S{a;-L7n-=scV;JtM}C>f94NIR zsmM;n>XXNUALsAPyT9d!rQPc_Sz%=^O@hJ+-z+|P{3-k({p9VnqDdBZhs$N=e4D|X z*1fpzP|F8dljX;^=hpGxKUgk1W7`boH0g<@!G#;2GVWG>+bOWMF7HY5+kbZZy6;;k zTwNs*$k2Ss=}*xCsd6cam!9=AMg64zUFepZA(v&Ye8K*K#a{D7K~~9I@n;$CAI<*| zU9GTWiq0$_2SNi+92*98~4_~p7PwGaKY?j zY!}z_^xO_#;>q>Q*=FDM-k?jS0kSePClpVcdrdh!v$VLOF{oK-pV-w`th?-I$t&MZ zzqnsl-AkoaSSj+TGWdULj(uWXlFum9fhVeXT+VQ$P#{v|tv zmMv|mUg)6gXY3f&V)|Wc=A_;C_o#V&Q%GcgrM{ah!+p{t|3it1i9Y*p z!geMq@5aj9i=AqomKv{Oyf&ZvxcIu+Gq0_Sga6#KcxLiG?!NCn=2r8MJ*7Lj4}3cJ zqdIq8cn`mY!{gnWN0;Q^|7MkYS}J>Mb)sWabBxUT41tI_`s>dxbUd?nW5W5j4_)W~ zO}bL`ZE@gHm(LA}*MiR_aW+nFopz6r>+PlN#V_Z7UevmqK}RFGjs1|Fq)p3K?VPF| zW&Z>luf1~K?ohs~zDmP(x87{Iq>rD)UK=ppTUVm7bG+i6P~%k zUk82gCfG^t$wgzaq#^D=D&$i9dqXXJj8FQbT58~&Lq2Cn#;~TUutaH z-8k*t7e>wY+?P%_Htnpb19P2tL`irr^CCeEhk=NI{26WHT%}sf}XPxV&Ba-RW$8?x>&aB z`k!^02a^oX_FZ4v^m4Wq+pV*S4jN^vSAMgW6Y`Ssnzhz0M&;M3)6zv6dRLnNmDH`6 zQB(iV$eHa?oi&%wE$P~A%NzFDMtHD2Q>vdU>X#oct{e00V*aKhZ~KpKE2!BJl3brW zIqmd{h`GPhRvvZIn<*Wq-RTj*Q{Qt`eQt_)Xt#Tjhq?a67xjFt;0rEz)VKaY()*Kb(lM>ag2y7iH6`#}bVg)TQ2)i2MstU2Ve z-k|*FuEPzCh6&#$7Twr-^i$IFl|h}=KJqWL#V*hMqjjrn)0AgCAJcC}Ypd@(Y;vTL ztGMlFw;%I@g$5Iqh3^P?&)|-?xAIuC@GwuG^PUX}9uDOPtHnQ*Z}=dPQS*AaO;mBj z=5D5)a@U(8x1=#{_sU87-x~jKUFhLvOA&I#RWzqBXsm&VqEA8W-f z#n0SrbMuz?tu?yGV%SP+0%guU@|tZ?C^pqh(5NHzFY7O#%+$Y!4|>hIa@_sKyV-k! z7W|GmB*XFM+x8x=b|#)0UGC%To#}tJiDrJOTr_dtjqn>OG6xF7#xbyga`pbt) zyq}r%@AO`6wAPn7?&`GvOCk$@FLl_ncf*uBQkHR9S0;H_EN3vB^z(GEO3jDknG5-z zFW&j;4ntsy{2!&*8odwUa|4)rKWtZUJ>v4?PoMwg7a{BPJcH`9P8z)uNbvc5Hg|DY z`n}rKmsHu9u5l_TJYy-`nw7sW!Y3m3frCZox9@MfG+p~$6o1Ieu$n)t%QLcDD(ZXm z^y_f<&d=w#c3zaeYN-~>aQKAt`~2t2G|%MdB^Az4J#yi(czd_`4^gx2iDq`@>OmF) z=d>MOFmM^j)SZZIU12qw<9y}sBMGw%H`u+@vRv;qr(il??kj)CcibFa>-t(O_r}gm zzSMn~!NkJmBj??!$fXgEnm@Zv#B5ycux9zei}P|MSuVxzJGrD)et8h9_JM?>3=$&g zDpMXiyx)9S=+n~bwU&uJ9+=I{XDSZ^Y8n$Zl}W5YA|G8-YE33!0*jl=jr_X z0`Ho$=Ej~aW;U#T{zTxS>xBJAUGwGd-JYRPe(iqO)0q#pJJp%&+2*l=|4Z5Ami!uV zw!_mqTdPXh+0N>&d9m$w`^Cho4QF#?rZWHUdG;jqg*L}LMgAYB|F#xwP(8#J&?mm$ zC*SD8{d+fqnWil(-k6xCq#CHc^!zH8z05P)1F{4yT#ns2d&co$!SDCEwomr5U%3+2 zz*4yIC9@Qtq0D^#nt6Jn`$`omO4^OfUtX9e*aOj%dQ zswL6(p2FM*<~*2vps#uFncjE*bb8;-6jDn2b*Fq%YxGTR*Ugveq+e@J=lw4JRQ6r# z^00JIxe1=jcNh97bT2S4?0v4|z0P>z!NB9ke@?JI-8k2C=_B3i6Bp~HY}j-EqI_gd zjX{RpgXur3zU~t*7BA>uEGfEZ`wZa}%PDaY_rw2d&+JRNGJB@$*@~9L%0$-kGR=sB z3+vy#(EP=|XG_4Xz(ap0EnO~M;9B$VU$5b&j01@WGS~RX8%2mkELjnKCP`RK`MU7) zzizKTvV2HO6AKGgUUMR0UsdXq4J9lO_ZdvS-`mLA^+fdV-&ot1w&n0oris;c4xT zIOo%%?SAGrr)CKGdd%DZ;q2vIU)BpQJn}B%nVzTEZl*1F<_69>KPOH5f2FPIeEBt< z1{>GMit5HZnz{Anlo^+{Nx%5!sc2-_;c9zqS*4fb(ugq5zqP6s)6dVzIokB@%ZW1v zvyMOez0~|saEJ8TgRvWg%w@Hw#j?LORDH;C_?e}^q>F}*53~}#clj+$S={@r~c$2Bh{LQ+6fIfR?1P%=X6LCl5vyy%Hqp0ShT{3e<3Xx#M>H(1WOS2VEsgjF5) zg&D$&-YI;x5xKK}=|81*)@O$6OzYR2J=eO&d#>^(?gJ|pI9~d2_*%uSuCh~~I#Z$^sI}pL@0pbgI@(srsI1;l*Ce>xuyfHPx3KA*$$yi5r@aulu##y{%-Jbl zUs?SNHTDQu`q62w0VM=jf zFKljn>GNcFbU(QDL5gv1Fl%G5W90E~p^MrciTv_Al)XIXp?%Zs|B<%(E2;z9tbgp- zYT=vB;%{K~vspUv(E|1b3=Cg7`L{jqzPjXv{wXO&3x&21b@8S3{M)|I+Q-h+A+Wt^ zx7;pnHK~?}=`Xh!3kw{qoWPjQ^q4nUq>x#5jpZiB2)VH5PT`xpcnzmsPRQJws(s*q z(ZMGnp~0)yeJ+@KILA8jP?DSF30C31m!3{sG=Gip?M_R@bM9Ar_hg*CYbza*FJOLx zgQbJPBjwv;DOJ&jLfaS=<+i;|$xJu6z59!Za~OM%=kml0DIe#b_H_0usOFS;eDD93 zSfN8l5+A6n30@Z(z9)O}WE1r-VPC{Mlq?<=b*+{tcvo_KNdhCs4(^hP)2}`6FtRR> zU}!!$)vq}I!|bp7MQ=-Kq^>ee*?Q^VZX3rb>;lftPPyMPKGKoow)tLN&nx1oF6U`jA{BlANk9lm@~>2OX4QczhKzPT(ri7iv|8Dy}eKo`P1>f;5iTou*b|0B}N7G1vl{wkx#gECpo-S6jInK0?H8*Z?+XC9m6 zWcrESmrTN$2H|B)&*j*+EKB&iXCc$kcYF)Czm{F0RS;0{ zJuff4`lwF^t6 zOvko8aI90w`j~kCJL{?&uim7u4n4}txBO70bMzU1)|abF!luP0GAQ27-NUu0cqgy& zT(dh{oh*J!yMKLTBQr;T%h{4QcW=7z1>f&7E$gg8u(oHe`cByp{vP|+FaNVjFlbKwDz@D?GZD1l)6><@Wt~$(696Qf BI${6- literal 0 HcmV?d00001 diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f41b.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f41b.svg new file mode 100644 index 000000000..f8986dd78 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f41b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg new file mode 100644 index 000000000..5843060c4 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f477.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4a5.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4a5.svg new file mode 100644 index 000000000..36c50d63b --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4a5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4c8.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4c8.svg new file mode 100644 index 000000000..cbf108fc0 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4c8.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4dd.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4dd.svg new file mode 100644 index 000000000..1697ffbec --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f4dd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f512.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f512.svg new file mode 100644 index 000000000..4cd1facae --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f512.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f525.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f525.svg new file mode 100644 index 000000000..e7dee6dd2 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f525.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f527.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f527.svg new file mode 100644 index 000000000..73a06d0da --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f527.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f528.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f528.svg new file mode 100644 index 000000000..1a0485e53 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f528.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f69a.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f69a.svg new file mode 100644 index 000000000..7441d1bba --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f69a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f6a8.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f6a8.svg new file mode 100644 index 000000000..5ed7ec85b --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/1f6a8.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a1.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a1.svg new file mode 100644 index 000000000..9d9ae7d92 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/26a1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2705.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2705.svg new file mode 100644 index 000000000..9817a091d --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2705.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/270f.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/270f.svg new file mode 100644 index 000000000..a9b69e1b2 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/270f.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2728.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2728.svg new file mode 100644 index 000000000..347ad12ab --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2728.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2795.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2795.svg new file mode 100644 index 000000000..5d55ec2d5 --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2795.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2b06.svg b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2b06.svg new file mode 100644 index 000000000..080ca199c --- /dev/null +++ b/assets/external/cdn.jsdelivr.net/gh/jdecked/twemoji@15.1.0/assets/svg/2b06.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/external/cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.39674748.js b/assets/external/cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.39674748.js new file mode 100644 index 000000000..82455198e --- /dev/null +++ b/assets/external/cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.39674748.js @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2016 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.0";MathJax.fileversion="2.7.0";MathJax.cdnVersion="2.7.0";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/assets/external/cloud.githubusercontent.com/assets/159488/22399173/aebe8f7a-e597-11e6-930f-7494ee615827.png b/assets/external/cloud.githubusercontent.com/assets/159488/22399173/aebe8f7a-e597-11e6-930f-7494ee615827.png new file mode 100644 index 0000000000000000000000000000000000000000..3c75535743a93e6da5185f3d4fdc954c95409f16 GIT binary patch literal 323042 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 qxZ`19XJT8Z2@Jtcao!#-EQ8aXw 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

    LbG77JZI-rO_-F0s+4p%` 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

    k{^DI9|8FNs+I(@3Pw3FTa(~?O1Fh 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Ð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 FCID^kT_30t=z-%0P9Hd!Fmpys%mWF5 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

    r}zFUNTBa2O1dH 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

    p#W!_ccDc%e1{I(&TCUrINk#hmx* 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dba4034c27ec7eee39bde37f42d56a6d2cd3d36b GIT binary patch literal 7124 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 KRj9mYX8-^N?6iFV literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e556f112d189a21a308f507d75221589f2e9509d GIT binary patch literal 9844 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 L=lZEuGB5xD3_II~ literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..23f554e06d43e8197f38894f62fd25e476f1cbfe GIT binary patch literal 1744 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 A@&Et; literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..44267b4b70062fbc3cbb781822443b704b029cfd GIT binary patch literal 6284 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..289de93149abef2225658543048409ac53b344fa GIT binary patch literal 1640 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 J*>?w|834;VN+^m;lU%yd<^hB(_q?)um5qsfVT$ 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a53d52d6d02cb4a799de8891ab08cbe1fed95cdf GIT binary patch literal 6836 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 O@X`J&Rf)$L7#ILps3J@N literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..de39acbc40690eba8a6e4beb11ed8aa26656b07f GIT binary patch literal 8872 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 Tx3qduGv9tQ<7!I}J8lL5su1Kk literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..db6584950e7ad916f312c32575b9a16129a71103 GIT binary patch literal 18800 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7c9cbed63f40a45970988e42e4c3d025b09cf11f GIT binary patch literal 44192 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

    -xj~-rKZtuOeeDCfx2Fcrn=aru7 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e0aa393978b6a429fd4cb28b161c1510967c33e7 GIT binary patch literal 39456 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%0DP74+S2kCB?tXpYUuNIbGf}PquU~X8wJ5t)m2>G? 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 Sm)Npk>X|+@hJZwM9tHq{NEcfG literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b67713018ad65e5c947d140598ba7922d86cd990 GIT binary patch literal 28536 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 GfdK$UW(t)6 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..669ba7930083cc54d66376033bb6713713f0f32c GIT binary patch literal 13888 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 NjYuN!xDFAv^qpSb` literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ded8a41e2a8c6d3f3865b3c2b77d196fc9d9ea5c GIT binary patch literal 22288 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 aM9LjrFF)j|zF+6wEr+W{arO)h3=9Bh&>OM< literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8e0eec69f14f5ba83041d31475734ed412caaa96 GIT binary patch literal 17628 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 J*p_o!*Z_*J@f837 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0ddf16c6c8e4be24f5e208ff8cff03e80cfae398 GIT binary patch literal 4340 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7bd3c2efc4ea83c0ae8f0584e11d1115fe521a85 GIT binary patch literal 35568 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8e43aa428d1f437719a76186fa10251039848217 GIT binary patch literal 26428 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 T1x)Sdj2}v8i7%`YWMBXQ2G-US literal 0 HcmV?d00001 diff --git a/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2 b/assets/external/fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2c6ba19bed39d65cccb312e94a213327c0986267 GIT binary patch literal 13004 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

    !kF6YuR@QrJAPVQc~K=b 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: v3.7.3podv3.7.3 \ No newline at end of file diff --git a/assets/external/img.shields.io/conda/v/conda-forge/nlohmann_json.svg b/assets/external/img.shields.io/conda/v/conda-forge/nlohmann_json.svg new file mode 100644 index 000000000..d6b279de1 --- /dev/null +++ b/assets/external/img.shields.io/conda/v/conda-forge/nlohmann_json.svg @@ -0,0 +1 @@ +conda | conda-forge: v3.11.3conda | conda-forgev3.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/tiny-repos/nlohmann-json.svg b/assets/external/repology.org/badge/tiny-repos/nlohmann-json.svg new file mode 100644 index 000000000..19b03e0b2 --- /dev/null +++ b/assets/external/repology.org/badge/tiny-repos/nlohmann-json.svg @@ -0,0 +1 @@ +in repositoriesin repositories3838 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/conancenter/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/conancenter/nlohmann-json.svg new file mode 100644 index 000000000..ea89df763 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/conancenter/nlohmann-json.svg @@ -0,0 +1 @@ +ConanCenter packageConanCenter package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/homebrew/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/homebrew/nlohmann-json.svg new file mode 100644 index 000000000..49637ce37 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/homebrew/nlohmann-json.svg @@ -0,0 +1 @@ +Homebrew packageHomebrew package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/macports/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/macports/nlohmann-json.svg new file mode 100644 index 000000000..2e0ac5d90 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/macports/nlohmann-json.svg @@ -0,0 +1 @@ +MacPorts packageMacPorts package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/msys2_clang64/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/msys2_clang64/nlohmann-json.svg new file mode 100644 index 000000000..3f013b850 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/msys2_clang64/nlohmann-json.svg @@ -0,0 +1 @@ +MSYS2 clang64 packageMSYS2 clang64 package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/msys2_clangarm64/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/msys2_clangarm64/nlohmann-json.svg new file mode 100644 index 000000000..6dca96698 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/msys2_clangarm64/nlohmann-json.svg @@ -0,0 +1 @@ +MSYS2 clangarm64 packageMSYS2 clangarm64 package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/msys2_mingw/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/msys2_mingw/nlohmann-json.svg new file mode 100644 index 000000000..cb4a22f69 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/msys2_mingw/nlohmann-json.svg @@ -0,0 +1 @@ +MSYS2 mingw packageMSYS2 mingw package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/msys2_ucrt64/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/msys2_ucrt64/nlohmann-json.svg new file mode 100644 index 000000000..14c9bafad --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/msys2_ucrt64/nlohmann-json.svg @@ -0,0 +1 @@ +MSYS2 ucrt64 packageMSYS2 ucrt64 package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/spack/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/spack/nlohmann-json.svg new file mode 100644 index 000000000..207f5bc1b --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/spack/nlohmann-json.svg @@ -0,0 +1 @@ +Spack packageSpack package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/version-for-repo/vcpkg/nlohmann-json.svg b/assets/external/repology.org/badge/version-for-repo/vcpkg/nlohmann-json.svg new file mode 100644 index 000000000..0db827cb7 --- /dev/null +++ b/assets/external/repology.org/badge/version-for-repo/vcpkg/nlohmann-json.svg @@ -0,0 +1 @@ +Vcpkg packageVcpkg package3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg b/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg new file mode 100644 index 000000000..8f1777499 --- /dev/null +++ b/assets/external/repology.org/badge/vertical-allrepos/nlohmann-json.svg @@ -0,0 +1 @@ +Packaging statusPackaging statusAdélie Linux currentAdélie Linux current3.11.33.11.3Alpine Linux 3.13Alpine Linux 3.133.9.13.9.1Alpine Linux 3.14Alpine Linux 3.143.9.13.9.1Alpine Linux 3.15Alpine Linux 3.153.10.43.10.4Alpine Linux 3.16Alpine Linux 3.163.10.53.10.5Alpine Linux 3.17Alpine Linux 3.173.11.23.11.2Alpine Linux 3.18Alpine Linux 3.183.11.23.11.2Alpine Linux 3.19Alpine Linux 3.193.11.33.11.3Alpine Linux 3.20Alpine Linux 3.203.11.33.11.3Alpine Linux 3.21Alpine Linux 3.213.11.33.11.3Alpine Linux EdgeAlpine Linux Edge3.11.33.11.3ALT Linux p10ALT Linux p103.10.43.10.4ALT Linux p11ALT Linux p113.11.33.11.3ALT SisyphusALT Sisyphus3.11.33.11.3AOSCAOSC3.11.33.11.3Apertis v2021Apertis v20213.5.03.5.0Apertis v2022Apertis v20223.9.13.9.1Apertis v2023Apertis v20233.9.13.9.1Apertis v2024Apertis v20243.11.23.11.2Apertis v2025Apertis v20253.11.23.11.2Apertis v2026 DevelopmentApertis v2026 Development3.11.23.11.2Arch LinuxArch Linux3.11.33.11.3Arch Linux 32 i486Arch Linux 32 i4863.11.33.11.3Arch Linux 32 i686Arch Linux 32 i6863.11.33.11.3Arch Linux 32 pentium4Arch Linux 32 pentium43.11.33.11.3Arch Linux ARM aarch64Arch Linux ARM aarch643.11.33.11.3ArchPOWER powerpcArchPOWER powerpc3.11.33.11.3ArchPOWER powerpc64leArchPOWER powerpc64le3.11.33.11.3ArchPOWER riscv64ArchPOWER riscv643.11.33.11.3AURAUR3.11.33.11.3ArtixArtix3.11.33.11.3Chimera LinuxChimera Linux3.11.33.11.3ConanCenterConanCenter3.11.33.11.3CRUX 3.6CRUX 3.63.11.23.11.2CRUX 3.7CRUX 3.73.11.33.11.3Debian 10Debian 103.5.03.5.0Debian 10 BackportsDebian 10 Backports3.7.03.7.0Debian 11Debian 113.9.13.9.1Debian 12Debian 123.11.23.11.2Debian 13Debian 133.11.33.11.3Debian UnstableDebian Unstable3.11.33.11.3deepin 20deepin 203.9.13.9.1deepin 23deepin 233.11.33.11.3Devuan 3.0Devuan 3.03.5.03.5.0Devuan 4.0Devuan 4.03.9.13.9.1Devuan UnstableDevuan Unstable3.11.33.11.3EPEL 7EPEL 73.6.13.6.1EPEL 8EPEL 83.6.13.6.1EPEL 9EPEL 93.11.33.11.3EPEL 10EPEL 103.11.33.11.3ExherboExherbo3.11.33.11.3Fedora 26Fedora 262.0.22.0.2Fedora 27Fedora 272.0.22.0.2Fedora 28Fedora 283.5.03.5.0Fedora 29Fedora 293.6.13.6.1Fedora 30Fedora 303.7.03.7.0Fedora 31Fedora 313.7.33.7.3Fedora 32Fedora 323.7.33.7.3Fedora 33Fedora 333.9.13.9.1Fedora 34Fedora 343.10.53.10.5Fedora 35Fedora 353.10.53.10.5Fedora 36Fedora 363.10.53.10.5Fedora 37Fedora 373.11.23.11.2Fedora 38Fedora 383.11.23.11.2Fedora 39Fedora 393.11.23.11.2Fedora 40Fedora 403.11.33.11.3Fedora 41Fedora 413.11.33.11.3Fedora RawhideFedora Rawhide3.11.33.11.3FreeBSD PortsFreeBSD Ports3.11.33.11.3GentooGentoo3.11.33.11.3GNU GuixGNU Guix3.11.23.11.2HaikuPorts masterHaikuPorts master3.11.23.11.2HomebrewHomebrew3.11.33.11.3Kali Linux RollingKali Linux Rolling3.11.33.11.3KaOSKaOS3.11.33.11.3LiGurOS stableLiGurOS stable3.11.33.11.3LiGurOS developLiGurOS develop3.11.33.11.3MacPortsMacPorts3.11.33.11.3Mageia 8Mageia 83.9.13.9.1Mageia 9Mageia 93.11.23.11.2Mageia cauldronMageia cauldron3.11.33.11.3Manjaro StableManjaro Stable3.11.33.11.3Manjaro TestingManjaro Testing3.11.33.11.3Manjaro UnstableManjaro Unstable3.11.33.11.3MidnightBSD mportsMidnightBSD mports3.11.33.11.3MSYS2 clang64MSYS2 clang643.11.33.11.3MSYS2 clangarm64MSYS2 clangarm643.11.33.11.3MSYS2 mingwMSYS2 mingw3.11.33.11.3MSYS2 ucrt64MSYS2 ucrt643.11.33.11.3nixpkgs stable 21.11nixpkgs stable 21.113.10.23.10.2nixpkgs stable 22.05nixpkgs stable 22.053.10.53.10.5nixpkgs stable 22.11nixpkgs stable 22.113.11.23.11.2nixpkgs stable 23.05nixpkgs stable 23.053.11.23.11.2nixpkgs stable 23.11nixpkgs stable 23.113.11.23.11.2nixpkgs stable 24.05nixpkgs stable 24.053.11.33.11.3nixpkgs stable 24.11nixpkgs stable 24.113.11.33.11.3nixpkgs unstablenixpkgs unstable3.11.33.11.3OpenBSD PortsOpenBSD Ports3.11.23.11.2OpenIndiana packagesOpenIndiana packages3.11.33.11.3openmambaopenmamba3.11.33.11.3OpenMandriva 4.3OpenMandriva 4.33.10.53.10.5OpenMandriva 5.0OpenMandriva 5.03.11.23.11.2OpenMandriva RollingOpenMandriva Rolling3.11.33.11.3OpenMandriva CookerOpenMandriva Cooker3.11.33.11.3openSUSE Leap 15.0openSUSE Leap 15.03.1.23.1.2openSUSE Leap 15.1openSUSE Leap 15.13.6.13.6.1openSUSE Leap 15.2openSUSE Leap 15.23.7.33.7.3openSUSE Leap 15.3openSUSE Leap 15.33.7.33.7.3openSUSE Leap 15.4openSUSE Leap 15.43.10.23.10.2openSUSE Leap 15.5openSUSE Leap 15.53.11.23.11.2openSUSE Leap 15.6openSUSE Leap 15.63.11.23.11.2openSUSE TumbleweedopenSUSE Tumbleweed3.11.33.11.3openSUSE hardware:sdr TumbleweedopenSUSE hardware:sdr Tumbleweed3.11.33.11.3PackMan openSUSE Leap 42.3PackMan openSUSE Leap 42.33.1.23.1.2PackMan SLE 12PackMan SLE 123.1.23.1.2ParabolaParabola3.11.33.11.3Pardus 21Pardus 213.9.13.9.1ParrotParrot3.11.23.11.2Pisi LinuxPisi Linux3.11.23.11.2pkgsrc currentpkgsrc current3.11.33.11.3PLD LinuxPLD Linux3.11.33.11.3PureOS amberPureOS amber3.5.03.5.0PureOS byzantiumPureOS byzantium3.9.13.9.1PureOS landingPureOS landing3.11.33.11.3Raspbian OldstableRaspbian Oldstable3.9.13.9.1Raspbian StableRaspbian Stable3.11.23.11.2Raspbian TestingRaspbian Testing3.11.33.11.3Rosa 2021.1Rosa 2021.13.11.33.11.3SlackBuildsSlackBuilds3.11.23.11.2SolusSolus3.11.33.11.3SpackSpack3.11.33.11.3T2 SDET2 SDE3.11.23.11.2TermuxTermux3.11.33.11.3Terra 37Terra 373.11.33.11.3Terra 38Terra 383.11.33.11.3Trisquel 10.0Trisquel 10.03.7.33.7.3Trisquel 11.0Trisquel 11.03.10.53.10.5Ubuntu 18.04Ubuntu 18.042.1.12.1.1Ubuntu 20.04Ubuntu 20.043.7.33.7.3Ubuntu 22.04Ubuntu 22.043.10.53.10.5Ubuntu 24.04Ubuntu 24.043.11.33.11.3Ubuntu 24.10Ubuntu 24.103.11.33.11.3Ubuntu 25.04Ubuntu 25.043.11.33.11.3VcpkgVcpkg3.11.33.11.3Void Linux x86_64Void Linux x86_643.11.33.11.3YACPYACP3.11.33.11.3 \ No newline at end of file diff --git a/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js b/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js new file mode 100644 index 000000000..b01ad01a2 --- /dev/null +++ b/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js @@ -0,0 +1,2314 @@ +"use strict";var __esbuild_esm_mermaid=(()=>{var cxe=Object.create;var R1=Object.defineProperty;var uxe=Object.getOwnPropertyDescriptor;var hxe=Object.getOwnPropertyNames;var fxe=Object.getPrototypeOf,dxe=Object.prototype.hasOwnProperty;var o=(t,e)=>R1(t,"name",{value:e,configurable:!0});var M=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ni=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),vr=(t,e)=>{for(var r in e)R1(t,r,{get:e[r],enumerable:!0})},Cb=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of hxe(e))!dxe.call(t,i)&&i!==r&&R1(t,i,{get:()=>e[i],enumerable:!(n=uxe(e,i))||n.enumerable});return t},Er=(t,e,r)=>(Cb(t,e,"default"),r&&Cb(r,e,"default")),ka=(t,e,r)=>(r=t!=null?cxe(fxe(t)):{},Cb(e||!t||!t.__esModule?R1(r,"default",{value:t,enumerable:!0}):r,t)),pxe=t=>Cb(R1({},"__esModule",{value:!0}),t);var Ab=Ni((wS,TS)=>{"use strict";(function(t,e){typeof wS=="object"&&typeof TS<"u"?TS.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(wS,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(k){var R=["th","st","nd","rd"],S=k%100;return"["+k+(R[(S-20)%10]||R[S]||R[0])+"]"},"ordinal")},x=o(function(k,R,S){var O=String(k);return!O||O.length>=R?k:""+Array(R+1-O.length).join(S)+k},"m"),b={s:x,z:o(function(k){var R=-k.utcOffset(),S=Math.abs(R),O=Math.floor(S/60),N=S%60;return(R<=0?"+":"-")+x(O,2,"0")+":"+x(N,2,"0")},"z"),m:o(function k(R,S){if(R.date()1)return k(F[0])}else{var B=R.name;_[B]=R,N=B}return!O&&N&&(w=N),N||!O&&w},"t"),C=o(function(k,R){if(E(k))return k.clone();var S=typeof R=="object"?R:{};return S.date=k,S.args=arguments,new I(S)},"O"),A=b;A.l=L,A.i=E,A.w=function(k,R){return C(k,{locale:R.$L,utc:R.$u,x:R.$x,$offset:R.$offset})};var I=function(){function k(S){this.$L=L(S.locale,null,!0),this.parse(S),this.$x=this.$x||S.x||{},this[T]=!0}o(k,"M");var R=k.prototype;return R.parse=function(S){this.$d=function(O){var N=O.date,P=O.utc;if(N===null)return new Date(NaN);if(A.u(N))return new Date;if(N instanceof Date)return new Date(N);if(typeof N=="string"&&!/Z$/i.test(N)){var F=N.match(g);if(F){var B=F[2]-1||0,$=(F[7]||"0").substring(0,3);return P?new Date(Date.UTC(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,$)):new Date(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,$)}}return new Date(N)}(S),this.init()},R.init=function(){var S=this.$d;this.$y=S.getFullYear(),this.$M=S.getMonth(),this.$D=S.getDate(),this.$W=S.getDay(),this.$H=S.getHours(),this.$m=S.getMinutes(),this.$s=S.getSeconds(),this.$ms=S.getMilliseconds()},R.$utils=function(){return A},R.isValid=function(){return this.$d.toString()!==m},R.isSame=function(S,O){var N=C(S);return this.startOf(O)<=N&&N<=this.endOf(O)},R.isAfter=function(S,O){return C(S){"use strict";EF=ka(Ab(),1),jc={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},M1=o(function(t="fatal"){let e=jc.fatal;typeof t=="string"?t.toLowerCase()in jc&&(e=jc[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=jc.fatal&&(Y.fatal=console.error?console.error.bind(console,bo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",bo("FATAL"))),e<=jc.error&&(Y.error=console.error?console.error.bind(console,bo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",bo("ERROR"))),e<=jc.warn&&(Y.warn=console.warn?console.warn.bind(console,bo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",bo("WARN"))),e<=jc.info&&(Y.info=console.info?console.info.bind(console,bo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",bo("INFO"))),e<=jc.debug&&(Y.debug=console.debug?console.debug.bind(console,bo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("DEBUG"))),e<=jc.trace&&(Y.trace=console.debug?console.debug.bind(console,bo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("TRACE")))},"setLogLevel"),bo=o(t=>`%c${(0,EF.default)().format("ss.SSS")} : ${t} : `,"format")});var mxe,Z0,kS,SF,_b=M(()=>{"use strict";mxe=Object.freeze({left:0,top:0,width:16,height:16}),Z0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),kS=Object.freeze({...mxe,...Z0}),SF=Object.freeze({...kS,body:"",hidden:!1})});var gxe,CF,AF=M(()=>{"use strict";_b();gxe=Object.freeze({width:null,height:null}),CF=Object.freeze({...gxe,...Z0})});var Lb,ES,Db,_F=M(()=>{"use strict";Lb=/^[a-z0-9]+(-[a-z0-9]+)*$/,ES=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!Db(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!Db(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!Db(l,r)?null:l}return null},"stringToIcon"),Db=o((t,e)=>t?!!((t.provider===""||t.provider.match(Lb))&&(e&&t.prefix===""||t.prefix.match(Lb))&&t.name.match(Lb)):!1,"validateIconName")});function LF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var DF=M(()=>{"use strict";o(LF,"mergeIconTransformations")});function SS(t,e){let r=LF(t,e);for(let n in SF)n in Z0?n in t&&!(n in r)&&(r[n]=Z0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var NF=M(()=>{"use strict";_b();DF();o(SS,"mergeIconData")});function RF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var MF=M(()=>{"use strict";o(RF,"getIconsTree")});function IF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=SS(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),SS(t,a)}function CS(t,e){if(t.icons[e])return IF(t,e,[]);let r=RF(t,[e])[e];return r?IF(t,e,r):null}var OF=M(()=>{"use strict";NF();MF();o(IF,"internalGetIconData");o(CS,"getIconData")});function AS(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(yxe);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=vxe.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var yxe,vxe,PF=M(()=>{"use strict";yxe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,vxe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(AS,"calculateSize")});function xxe(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function bxe(t,e){return t?""+t+""+e:e}function BF(t,e,r){let n=xxe(t);return bxe(n.defs,e+n.content+r)}var FF=M(()=>{"use strict";o(xxe,"splitSVGDefs");o(bxe,"mergeDefsAndContent");o(BF,"wrapSVGContent")});function _S(t,e){let r={...kS,...t},n={...CF,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let _;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:_=i.height/2+i.top,v.unshift("rotate(90 "+_.toString()+" "+_.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:_=i.width/2+i.left,v.unshift("rotate(-90 "+_.toString()+" "+_.toString()+")");break}w%2===1&&(i.left!==i.top&&(_=i.left,i.left=i.top,i.top=_),i.width!==i.height&&(_=i.width,i.width=i.height,i.height=_)),v.length&&(a=BF(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=AS(d,u/h)):(f=s==="auto"?u:s,d=l===null?AS(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{wxe(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var wxe,zF=M(()=>{"use strict";_b();AF();PF();FF();wxe=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(_S,"iconToSVG")});function LS(t,e=kxe){let r=[],n;for(;n=Txe.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(Exe++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var Txe,kxe,Exe,GF=M(()=>{"use strict";Txe=/\sid="(\S+)"/g,kxe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Exe=0;o(LS,"replaceIDs")});function DS(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var $F=M(()=>{"use strict";o(DS,"iconToHTML")});var UF=Ni((lst,VF)=>{"use strict";var J0=1e3,ep=J0*60,tp=ep*60,Ff=tp*24,Sxe=Ff*7,Cxe=Ff*365.25;VF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Axe(t);if(r==="number"&&isFinite(t))return e.long?Lxe(t):_xe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Axe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*Cxe;case"weeks":case"week":case"w":return r*Sxe;case"days":case"day":case"d":return r*Ff;case"hours":case"hour":case"hrs":case"hr":case"h":return r*tp;case"minutes":case"minute":case"mins":case"min":case"m":return r*ep;case"seconds":case"second":case"secs":case"sec":case"s":return r*J0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(Axe,"parse");function _xe(t){var e=Math.abs(t);return e>=Ff?Math.round(t/Ff)+"d":e>=tp?Math.round(t/tp)+"h":e>=ep?Math.round(t/ep)+"m":e>=J0?Math.round(t/J0)+"s":t+"ms"}o(_xe,"fmtShort");function Lxe(t){var e=Math.abs(t);return e>=Ff?Nb(t,e,Ff,"day"):e>=tp?Nb(t,e,tp,"hour"):e>=ep?Nb(t,e,ep,"minute"):e>=J0?Nb(t,e,J0,"second"):t+" ms"}o(Lxe,"fmtLong");function Nb(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(Nb,"plural")});var WF=Ni((ust,HF)=>{"use strict";function Dxe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=a,r.enable=i,r.enabled=s,r.humanize=UF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p{if(E==="%%")return"%";_++;let C=r.formatters[L];if(typeof C=="function"){let A=v[_];E=C.call(x,A),v.splice(_,1),_--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d,p=(typeof f=="string"?f:"").split(/[\s,]+/),m=p.length;for(d=0;d"-"+d)].join(",");return r.enable(""),f}o(a,"disable");function s(f){if(f[f.length-1]==="*")return!0;let d,p;for(d=0,p=r.skips.length;d{"use strict";Us.formatArgs=Rxe;Us.save=Mxe;Us.load=Ixe;Us.useColors=Nxe;Us.storage=Oxe();Us.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Us.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Nxe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(Nxe,"useColors");function Rxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Rb.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(Rxe,"formatArgs");Us.log=console.debug||console.log||(()=>{});function Mxe(t){try{t?Us.storage.setItem("debug",t):Us.storage.removeItem("debug")}catch{}}o(Mxe,"save");function Ixe(){let t;try{t=Us.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(Ixe,"load");function Oxe(){try{return localStorage}catch{}}o(Oxe,"localstorage");Rb.exports=WF()(Us);var{formatters:Pxe}=Rb.exports;Pxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var dst,qF=M(()=>{"use strict";_F();OF();zF();GF();$F();dst=ka(YF(),1)});var RS,NS,XF,Mb,Bxe,wo,Kc=M(()=>{"use strict";ht();qF();RS={body:'?',height:80,width:80},NS=new Map,XF=new Map,Mb=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)XF.set(e.name,e.loader);else if("icons"in e)NS.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),Bxe=o(async(t,e)=>{let r=ES(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=NS.get(n);if(!i){let s=XF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},NS.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=CS(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),wo=o(async(t,e)=>{let r;try{r=await Bxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=RS}let n=_S(r,e);return DS(LS(n.body),n.attributes)},"getIconSVG")});function Ib(t){for(var e=[],r=1;r{"use strict";o(Ib,"dedent")});var Ob,zf,jF,Pb=M(()=>{"use strict";Ob=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,zf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,jF=/\s*%%.*\n/gm});var rp,IS=M(()=>{"use strict";rp=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Gf,np,Bb,OS,KF,$f=M(()=>{"use strict";ht();Pb();IS();Gf={},np=o(function(t,e){t=t.replace(Ob,"").replace(zf,"").replace(jF,` +`);for(let[r,{detector:n}]of Object.entries(Gf))if(n(t,e))return r;throw new rp(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Bb=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)OS(e,r,n)},"registerLazyLoadedDiagrams"),OS=o((t,e,r)=>{Gf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Gf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),KF=o(t=>Gf[t].loader,"getDiagramLoader")});var I1,QF,PS=M(()=>{"use strict";I1=function(){var t=o(function(He,xe,X,fe){for(X=X||{},fe=He.length;fe--;X[He[fe]]=xe);return X},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],_=[1,36],T=[1,37],E=[1,38],L=[1,39],C=[1,40],A=[1,41],I=[1,42],D=[1,43],k=[1,44],R=[1,45],S=[1,46],O=[1,47],N=[1,48],P=[1,50],F=[1,51],B=[1,52],$=[1,53],z=[1,54],W=[1,55],j=[1,56],K=[1,57],ie=[1,58],Q=[1,59],ee=[1,60],J=[14,42],H=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Z=[1,82],ae=[1,83],ue=[1,84],ce=[1,85],te=[12,14,42],De=[12,14,33,42],oe=[12,14,33,42,76,77,79,80],ke=[12,33],Fe=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Be={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(xe,X,fe,he,ge,ne,ye){var U=ne.length-1;switch(ge){case 3:he.setDirection("TB");break;case 4:he.setDirection("BT");break;case 5:he.setDirection("RL");break;case 6:he.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:he.setC4Type(ne[U-3]);break;case 19:he.setTitle(ne[U].substring(6)),this.$=ne[U].substring(6);break;case 20:he.setAccDescription(ne[U].substring(15)),this.$=ne[U].substring(15);break;case 21:this.$=ne[U].trim(),he.setTitle(this.$);break;case 22:case 23:this.$=ne[U].trim(),he.setAccDescription(this.$);break;case 28:ne[U].splice(2,0,"ENTERPRISE"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 29:ne[U].splice(2,0,"SYSTEM"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 30:he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 31:ne[U].splice(2,0,"CONTAINER"),he.addContainerBoundary(...ne[U]),this.$=ne[U];break;case 32:he.addDeploymentNode("node",...ne[U]),this.$=ne[U];break;case 33:he.addDeploymentNode("nodeL",...ne[U]),this.$=ne[U];break;case 34:he.addDeploymentNode("nodeR",...ne[U]),this.$=ne[U];break;case 35:he.popBoundaryParseStack();break;case 39:he.addPersonOrSystem("person",...ne[U]),this.$=ne[U];break;case 40:he.addPersonOrSystem("external_person",...ne[U]),this.$=ne[U];break;case 41:he.addPersonOrSystem("system",...ne[U]),this.$=ne[U];break;case 42:he.addPersonOrSystem("system_db",...ne[U]),this.$=ne[U];break;case 43:he.addPersonOrSystem("system_queue",...ne[U]),this.$=ne[U];break;case 44:he.addPersonOrSystem("external_system",...ne[U]),this.$=ne[U];break;case 45:he.addPersonOrSystem("external_system_db",...ne[U]),this.$=ne[U];break;case 46:he.addPersonOrSystem("external_system_queue",...ne[U]),this.$=ne[U];break;case 47:he.addContainer("container",...ne[U]),this.$=ne[U];break;case 48:he.addContainer("container_db",...ne[U]),this.$=ne[U];break;case 49:he.addContainer("container_queue",...ne[U]),this.$=ne[U];break;case 50:he.addContainer("external_container",...ne[U]),this.$=ne[U];break;case 51:he.addContainer("external_container_db",...ne[U]),this.$=ne[U];break;case 52:he.addContainer("external_container_queue",...ne[U]),this.$=ne[U];break;case 53:he.addComponent("component",...ne[U]),this.$=ne[U];break;case 54:he.addComponent("component_db",...ne[U]),this.$=ne[U];break;case 55:he.addComponent("component_queue",...ne[U]),this.$=ne[U];break;case 56:he.addComponent("external_component",...ne[U]),this.$=ne[U];break;case 57:he.addComponent("external_component_db",...ne[U]),this.$=ne[U];break;case 58:he.addComponent("external_component_queue",...ne[U]),this.$=ne[U];break;case 60:he.addRel("rel",...ne[U]),this.$=ne[U];break;case 61:he.addRel("birel",...ne[U]),this.$=ne[U];break;case 62:he.addRel("rel_u",...ne[U]),this.$=ne[U];break;case 63:he.addRel("rel_d",...ne[U]),this.$=ne[U];break;case 64:he.addRel("rel_l",...ne[U]),this.$=ne[U];break;case 65:he.addRel("rel_r",...ne[U]),this.$=ne[U];break;case 66:he.addRel("rel_b",...ne[U]),this.$=ne[U];break;case 67:ne[U].splice(0,1),he.addRel("rel",...ne[U]),this.$=ne[U];break;case 68:he.updateElStyle("update_el_style",...ne[U]),this.$=ne[U];break;case 69:he.updateRelStyle("update_rel_style",...ne[U]),this.$=ne[U];break;case 70:he.updateLayoutConfig("update_layout_config",...ne[U]),this.$=ne[U];break;case 71:this.$=[ne[U]];break;case 72:ne[U].unshift(ne[U-1]),this.$=ne[U];break;case 73:case 75:this.$=ne[U].trim();break;case 74:let Te={};Te[ne[U-1].trim()]=ne[U].trim(),this.$=Te;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{14:[1,74]},t(J,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee}),t(J,[2,14]),t(H,[2,16],{12:[1,76]}),t(J,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:Z,77:ae,79:ue,80:ce},{35:86,75:81,76:Z,77:ae,79:ue,80:ce},{35:87,75:81,76:Z,77:ae,79:ue,80:ce},{35:88,75:81,76:Z,77:ae,79:ue,80:ce},{35:89,75:81,76:Z,77:ae,79:ue,80:ce},{35:90,75:81,76:Z,77:ae,79:ue,80:ce},{35:91,75:81,76:Z,77:ae,79:ue,80:ce},{35:92,75:81,76:Z,77:ae,79:ue,80:ce},{35:93,75:81,76:Z,77:ae,79:ue,80:ce},{35:94,75:81,76:Z,77:ae,79:ue,80:ce},{35:95,75:81,76:Z,77:ae,79:ue,80:ce},{35:96,75:81,76:Z,77:ae,79:ue,80:ce},{35:97,75:81,76:Z,77:ae,79:ue,80:ce},{35:98,75:81,76:Z,77:ae,79:ue,80:ce},{35:99,75:81,76:Z,77:ae,79:ue,80:ce},{35:100,75:81,76:Z,77:ae,79:ue,80:ce},{35:101,75:81,76:Z,77:ae,79:ue,80:ce},{35:102,75:81,76:Z,77:ae,79:ue,80:ce},{35:103,75:81,76:Z,77:ae,79:ue,80:ce},{35:104,75:81,76:Z,77:ae,79:ue,80:ce},t(te,[2,59]),{35:105,75:81,76:Z,77:ae,79:ue,80:ce},{35:106,75:81,76:Z,77:ae,79:ue,80:ce},{35:107,75:81,76:Z,77:ae,79:ue,80:ce},{35:108,75:81,76:Z,77:ae,79:ue,80:ce},{35:109,75:81,76:Z,77:ae,79:ue,80:ce},{35:110,75:81,76:Z,77:ae,79:ue,80:ce},{35:111,75:81,76:Z,77:ae,79:ue,80:ce},{35:112,75:81,76:Z,77:ae,79:ue,80:ce},{35:113,75:81,76:Z,77:ae,79:ue,80:ce},{35:114,75:81,76:Z,77:ae,79:ue,80:ce},{35:115,75:81,76:Z,77:ae,79:ue,80:ce},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee},{12:[1,118],33:[1,117]},{35:119,75:81,76:Z,77:ae,79:ue,80:ce},{35:120,75:81,76:Z,77:ae,79:ue,80:ce},{35:121,75:81,76:Z,77:ae,79:ue,80:ce},{35:122,75:81,76:Z,77:ae,79:ue,80:ce},{35:123,75:81,76:Z,77:ae,79:ue,80:ce},{35:124,75:81,76:Z,77:ae,79:ue,80:ce},{35:125,75:81,76:Z,77:ae,79:ue,80:ce},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(J,[2,15]),t(H,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(J,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:C,56:A,57:I,58:D,59:k,60:R,61:S,62:O,63:N,64:P,65:F,66:B,67:$,68:z,69:W,70:j,71:K,72:ie,73:Q,74:ee}),t(q,[2,21]),t(q,[2,22]),t(te,[2,39]),t(De,[2,71],{75:81,35:132,76:Z,77:ae,79:ue,80:ce}),t(oe,[2,73]),{78:[1,133]},t(oe,[2,75]),t(oe,[2,76]),t(te,[2,40]),t(te,[2,41]),t(te,[2,42]),t(te,[2,43]),t(te,[2,44]),t(te,[2,45]),t(te,[2,46]),t(te,[2,47]),t(te,[2,48]),t(te,[2,49]),t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),t(te,[2,57]),t(te,[2,58]),t(te,[2,60]),t(te,[2,61]),t(te,[2,62]),t(te,[2,63]),t(te,[2,64]),t(te,[2,65]),t(te,[2,66]),t(te,[2,67]),t(te,[2,68]),t(te,[2,69]),t(te,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ke,[2,28]),t(ke,[2,29]),t(ke,[2,30]),t(ke,[2,31]),t(ke,[2,32]),t(ke,[2,33]),t(ke,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(H,[2,18]),t(J,[2,38]),t(De,[2,72]),t(oe,[2,74]),t(te,[2,24]),t(te,[2,35]),t(Fe,[2,25]),t(Fe,[2,26],{12:[1,138]}),t(Fe,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(xe,X){if(X.recoverable)this.trace(xe);else{var fe=new Error(xe);throw fe.hash=X,fe}},"parseError"),parse:o(function(xe){var X=this,fe=[0],he=[],ge=[null],ne=[],ye=this.table,U="",Te=0,se=0,Ee=0,Ae=2,Pe=1,Me=ne.slice.call(arguments,1),me=Object.create(this.lexer),We={yy:{}};for(var Re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Re)&&(We.yy[Re]=this.yy[Re]);me.setInput(xe,We.yy),We.yy.lexer=me,We.yy.parser=this,typeof me.yylloc>"u"&&(me.yylloc={});var tt=me.yylloc;ne.push(tt);var gt=me.options&&me.options.ranges;typeof We.yy.parseError=="function"?this.parseError=We.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Et(zt){fe.length=fe.length-2*zt,ge.length=ge.length-zt,ne.length=ne.length-zt}o(Et,"popStack");function vt(){var zt;return zt=he.pop()||me.lex()||Pe,typeof zt!="number"&&(zt instanceof Array&&(he=zt,zt=he.pop()),zt=X.symbols_[zt]||zt),zt}o(vt,"lex");for(var Ye,Tt,$e,rt,ft,kt,er={},dt,Xe,ct,Lt;;){if($e=fe[fe.length-1],this.defaultActions[$e]?rt=this.defaultActions[$e]:((Ye===null||typeof Ye>"u")&&(Ye=vt()),rt=ye[$e]&&ye[$e][Ye]),typeof rt>"u"||!rt.length||!rt[0]){var Rt="";Lt=[];for(dt in ye[$e])this.terminals_[dt]&&dt>Ae&&Lt.push("'"+this.terminals_[dt]+"'");me.showPosition?Rt="Parse error on line "+(Te+1)+`: +`+me.showPosition()+` +Expecting `+Lt.join(", ")+", got '"+(this.terminals_[Ye]||Ye)+"'":Rt="Parse error on line "+(Te+1)+": Unexpected "+(Ye==Pe?"end of input":"'"+(this.terminals_[Ye]||Ye)+"'"),this.parseError(Rt,{text:me.match,token:this.terminals_[Ye]||Ye,line:me.yylineno,loc:tt,expected:Lt})}if(rt[0]instanceof Array&&rt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$e+", token: "+Ye);switch(rt[0]){case 1:fe.push(Ye),ge.push(me.yytext),ne.push(me.yylloc),fe.push(rt[1]),Ye=null,Tt?(Ye=Tt,Tt=null):(se=me.yyleng,U=me.yytext,Te=me.yylineno,tt=me.yylloc,Ee>0&&Ee--);break;case 2:if(Xe=this.productions_[rt[1]][1],er.$=ge[ge.length-Xe],er._$={first_line:ne[ne.length-(Xe||1)].first_line,last_line:ne[ne.length-1].last_line,first_column:ne[ne.length-(Xe||1)].first_column,last_column:ne[ne.length-1].last_column},gt&&(er._$.range=[ne[ne.length-(Xe||1)].range[0],ne[ne.length-1].range[1]]),kt=this.performAction.apply(er,[U,se,Te,We.yy,rt[1],ge,ne].concat(Me)),typeof kt<"u")return kt;Xe&&(fe=fe.slice(0,-1*Xe*2),ge=ge.slice(0,-1*Xe),ne=ne.slice(0,-1*Xe)),fe.push(this.productions_[rt[1]][0]),ge.push(er.$),ne.push(er._$),ct=ye[fe[fe.length-2]][fe[fe.length-1]],fe.push(ct);break;case 3:return!0}}return!0},"parse")},Ve=function(){var He={EOF:1,parseError:o(function(X,fe){if(this.yy.parser)this.yy.parser.parseError(X,fe);else throw new Error(X)},"parseError"),setInput:o(function(xe,X){return this.yy=X||this.yy||{},this._input=xe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var X=xe.match(/(?:\r\n?|\n).*/g);return X?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},"input"),unput:o(function(xe){var X=xe.length,fe=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-X),this.offset-=X;var he=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),fe.length-1&&(this.yylineno-=fe.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:fe?(fe.length===he.length?this.yylloc.first_column:0)+he[he.length-fe.length].length-fe[0].length:this.yylloc.first_column-X},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-X]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(xe){this.unput(this.match.slice(xe))},"less"),pastInput:o(function(){var xe=this.matched.substr(0,this.matched.length-this.match.length);return(xe.length>20?"...":"")+xe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var xe=this.match;return xe.length<20&&(xe+=this._input.substr(0,20-xe.length)),(xe.substr(0,20)+(xe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var xe=this.pastInput(),X=new Array(xe.length+1).join("-");return xe+this.upcomingInput()+` +`+X+"^"},"showPosition"),test_match:o(function(xe,X){var fe,he,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),he=xe[0].match(/(?:\r\n?|\n).*/g),he&&(this.yylineno+=he.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:he?he[he.length-1].length-he[he.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xe[0].length},this.yytext+=xe[0],this.match+=xe[0],this.matches=xe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(xe[0].length),this.matched+=xe[0],fe=this.performAction.call(this,this.yy,this,X,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),fe)return fe;if(this._backtrack){for(var ne in ge)this[ne]=ge[ne];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xe,X,fe,he;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),ne=0;neX[0].length)){if(X=fe,he=ne,this.options.backtrack_lexer){if(xe=this.test_match(fe,ge[ne]),xe!==!1)return xe;if(this._backtrack){X=!1;continue}else return!1}else if(!this.options.flex)break}return X?(xe=this.test_match(X,ge[he]),xe!==!1?xe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var X=this.next();return X||this.lex()},"lex"),begin:o(function(X){this.conditionStack.push(X)},"begin"),popState:o(function(){var X=this.conditionStack.length-1;return X>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(X){return X=this.conditionStack.length-1-Math.abs(X||0),X>=0?this.conditionStack[X]:"INITIAL"},"topState"),pushState:o(function(X){this.begin(X)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(X,fe,he,ge){var ne=ge;switch(he){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return He}();Be.lexer=Ve;function Ge(){this.yy={}}return o(Ge,"Parser"),Ge.prototype=Be,Be.Parser=Ge,new Ge}();I1.parser=I1;QF=I1});var BS,Gn,ip=M(()=>{"use strict";BS=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>BS(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=BS(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=BS});var Fb,ZF,JF=M(()=>{"use strict";Fb={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Fb.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return Fb.hue2rgb(a,i,t)*255;case"b":return Fb.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";Fxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},ez=Fxe});var zxe,rz,nz=M(()=>{"use strict";zxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},rz=zxe});var Gxe,Yt,jl=M(()=>{"use strict";JF();tz();nz();Gxe={channel:ZF,lang:ez,unit:rz},Yt=Gxe});var Qc,Ri,O1=M(()=>{"use strict";jl();Qc={};for(let t=0;t<=255;t++)Qc[t]=Yt.unit.dec2hex(t);Ri={ALL:0,RGB:1,HSL:2}});var FS,iz,az=M(()=>{"use strict";O1();FS=class{static{o(this,"Type")}constructor(){this.type=Ri.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ri.ALL}is(e){return this.type===e}},iz=FS});var zS,sz,oz=M(()=>{"use strict";jl();az();O1();zS=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new iz}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ri.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=Yt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=Yt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=Yt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=Yt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=Yt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=Yt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ri.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ri.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ri.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ri.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ri.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ri.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ri.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ri.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ri.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ri.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ri.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ri.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},sz=zS});var $xe,th,P1=M(()=>{"use strict";oz();$xe=new sz({r:0,g:0,b:0,a:0},"transparent"),th=$xe});var lz,Vf,GS=M(()=>{"use strict";P1();O1();lz={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(lz.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return th.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${Qc[Math.round(e)]}${Qc[Math.round(r)]}${Qc[Math.round(n)]}${Qc[Math.round(i*255)]}`:`#${Qc[Math.round(e)]}${Qc[Math.round(r)]}${Qc[Math.round(n)]}`},"stringify")},Vf=lz});var zb,B1,cz=M(()=>{"use strict";jl();P1();zb={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(zb.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return Yt.channel.clamp.h(parseFloat(r)*.9);case"rad":return Yt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return Yt.channel.clamp.h(parseFloat(r)*360)}}return Yt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(zb.re);if(!r)return;let[,n,i,a,s,l]=r;return th.set({h:zb._hue2deg(n),s:Yt.channel.clamp.s(parseFloat(i)),l:Yt.channel.clamp.l(parseFloat(a)),a:s?Yt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%, ${i})`:`hsl(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%)`},"stringify")},B1=zb});var Gb,$S,uz=M(()=>{"use strict";GS();Gb={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=Gb.colors[t];if(e)return Vf.parse(e)},"parse"),stringify:o(t=>{let e=Vf.stringify(t);for(let r in Gb.colors)if(Gb.colors[r]===e)return r},"stringify")},$S=Gb});var hz,F1,fz=M(()=>{"use strict";jl();P1();hz={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(hz.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return th.set({r:Yt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:Yt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:Yt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?Yt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)}, ${Yt.lang.round(i)})`:`rgb(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)})`},"stringify")},F1=hz});var Vxe,Mi,Zc=M(()=>{"use strict";GS();cz();uz();fz();O1();Vxe={format:{keyword:$S,hex:Vf,rgb:F1,rgba:F1,hsl:B1,hsla:B1},parse:o(t=>{if(typeof t!="string")return t;let e=Vf.parse(t)||F1.parse(t)||B1.parse(t)||$S.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ri.HSL)||t.data.r===void 0?B1.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?F1.stringify(t):Vf.stringify(t),"stringify")},Mi=Vxe});var Uxe,$b,VS=M(()=>{"use strict";jl();Zc();Uxe=o((t,e)=>{let r=Mi.parse(t);for(let n in e)r[n]=Yt.channel.clamp[n](e[n]);return Mi.stringify(r)},"change"),$b=Uxe});var Hxe,Hs,US=M(()=>{"use strict";jl();P1();Zc();VS();Hxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return $b(t,{a:e});let i=th.set({r:Yt.channel.clamp.r(t),g:Yt.channel.clamp.g(e),b:Yt.channel.clamp.b(r),a:Yt.channel.clamp.a(n)});return Mi.stringify(i)},"rgba"),Hs=Hxe});var Wxe,z1,dz=M(()=>{"use strict";jl();Zc();Wxe=o((t,e)=>Yt.lang.round(Mi.parse(t)[e]),"channel"),z1=Wxe});var Yxe,pz,mz=M(()=>{"use strict";jl();Zc();Yxe=o(t=>{let{r:e,g:r,b:n}=Mi.parse(t),i=.2126*Yt.channel.toLinear(e)+.7152*Yt.channel.toLinear(r)+.0722*Yt.channel.toLinear(n);return Yt.lang.round(i)},"luminance"),pz=Yxe});var qxe,gz,yz=M(()=>{"use strict";mz();qxe=o(t=>pz(t)>=.5,"isLight"),gz=qxe});var Xxe,aa,vz=M(()=>{"use strict";yz();Xxe=o(t=>!gz(t),"isDark"),aa=Xxe});var jxe,Vb,HS=M(()=>{"use strict";jl();Zc();jxe=o((t,e,r)=>{let n=Mi.parse(t),i=n[e],a=Yt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Mi.stringify(n)},"adjustChannel"),Vb=jxe});var Kxe,Dt,xz=M(()=>{"use strict";HS();Kxe=o((t,e)=>Vb(t,"l",e),"lighten"),Dt=Kxe});var Qxe,Bt,bz=M(()=>{"use strict";HS();Qxe=o((t,e)=>Vb(t,"l",-e),"darken"),Bt=Qxe});var Zxe,Ne,wz=M(()=>{"use strict";Zc();VS();Zxe=o((t,e)=>{let r=Mi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return $b(t,n)},"adjust"),Ne=Zxe});var Jxe,Tz,kz=M(()=>{"use strict";Zc();US();Jxe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Mi.parse(t),{r:l,g:u,b:h,a:f}=Mi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,_=s*d+f*(1-d);return Hs(x,b,w,_)},"mix"),Tz=Jxe});var ebe,pt,Ez=M(()=>{"use strict";Zc();kz();ebe=o((t,e=100)=>{let r=Mi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,Tz(r,t,e)},"invert"),pt=ebe});var Sz=M(()=>{"use strict";US();dz();vz();xz();bz();wz();Ez()});var To=M(()=>{"use strict";Sz()});var rh,nh,G1=M(()=>{"use strict";rh="#ffffff",nh="#f2f2f2"});var wi,ap=M(()=>{"use strict";To();wi=o((t,e)=>e?Ne(t,{s:-40,l:10}):Ne(t,{s:-40,l:-10}),"mkBorder")});var WS,Az,_z=M(()=>{"use strict";To();G1();ap();WS=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Ne(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Ne(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||wi(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||wi(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||pt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||pt(this.tertiaryColor),this.lineColor=this.lineColor||pt(this.background),this.arrowheadColor=this.arrowheadColor||pt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Bt(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Bt(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||pt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Dt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Ne(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Ne(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Az=o(t=>{let e=new WS;return e.calculate(t),e},"getThemeVariables")});var YS,Lz,Dz=M(()=>{"use strict";To();ap();YS=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Ne(this.primaryColor,{h:-160}),this.primaryBorderColor=pt(this.background),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=pt(this.primaryColor),this.secondaryTextColor=pt(this.secondaryColor),this.tertiaryTextColor=pt(this.tertiaryColor),this.lineColor=pt(this.background),this.textColor=pt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(pt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Hs(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Bt("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Bt(this.sectionBkgColor,10),this.taskBorderColor=Hs(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Hs(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Dt(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Ne(this.primaryColor,{h:64}),this.fillType3=Ne(this.secondaryColor,{h:64}),this.fillType4=Ne(this.primaryColor,{h:-64}),this.fillType5=Ne(this.secondaryColor,{h:-64}),this.fillType6=Ne(this.primaryColor,{h:128}),this.fillType7=Ne(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Ne(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Lz=o(t=>{let e=new YS;return e.calculate(t),e},"getThemeVariables")});var qS,sp,Ub=M(()=>{"use strict";To();ap();G1();qS=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Ne(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Ne(this.primaryColor,{h:-160}),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=pt(this.primaryColor),this.secondaryTextColor=pt(this.secondaryColor),this.tertiaryTextColor=pt(this.tertiaryColor),this.lineColor=pt(this.background),this.textColor=pt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Hs(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Ne(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Bt(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Bt(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},sp=o(t=>{let e=new qS;return e.calculate(t),e},"getThemeVariables")});var XS,Nz,Rz=M(()=>{"use strict";To();G1();ap();XS=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Dt("#cde498",10),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=pt(this.primaryColor),this.secondaryTextColor=pt(this.secondaryColor),this.tertiaryTextColor=pt(this.primaryColor),this.lineColor=pt(this.background),this.textColor=pt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Bt(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Ne(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Ne(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Ne(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Ne(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Ne(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Ne(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Ne(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Ne(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Ne(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Bt(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Bt(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Nz=o(t=>{let e=new XS;return e.calculate(t),e},"getThemeVariables")});var jS,Mz,Iz=M(()=>{"use strict";To();ap();G1();jS=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Ne(this.primaryColor,{h:-160}),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=pt(this.primaryColor),this.secondaryTextColor=pt(this.secondaryColor),this.tertiaryTextColor=pt(this.tertiaryColor),this.lineColor=pt(this.background),this.textColor=pt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Mz=o(t=>{let e=new jS;return e.calculate(t),e},"getThemeVariables")});var ko,Hb=M(()=>{"use strict";_z();Dz();Ub();Rz();Iz();ko={base:{getThemeVariables:Az},dark:{getThemeVariables:Lz},default:{getThemeVariables:sp},forest:{getThemeVariables:Nz},neutral:{getThemeVariables:Mz}}});var Jc,Oz=M(()=>{"use strict";Jc={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Pz,Bz,Fz,ur,hs=M(()=>{"use strict";Hb();Oz();Pz={...Jc,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:ko.default.getThemeVariables(),sequence:{...Jc.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...Jc.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Jc.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...Jc.pie,useWidth:984},xyChart:{...Jc.xyChart,useWidth:void 0},requirement:{...Jc.requirement,useWidth:void 0},packet:{...Jc.packet}},Bz=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...Bz(t[n],"")]:[...r,e+n],[]),"keyify"),Fz=new Set(Bz(Pz,"")),ur=Pz});var op,tbe,KS=M(()=>{"use strict";hs();ht();op=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>op(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Fz.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),op(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=tbe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),tbe=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";ip();ht();Hb();hs();KS();ih=Object.freeze(ur),fs=Gn({},ih),lp=[],$1=Gn({},ih),Wb=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)Uz(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in ko){let i=Gn({},Gz),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in ko&&(r.themeVariables=ko[r.theme].getThemeVariables(a))}return $1=r,Wz($1),$1},"updateCurrentConfig"),QS=o(t=>(fs=Gn({},ih),fs=Gn(fs,t),t.theme&&ko[t.theme]&&(fs.themeVariables=ko[t.theme].getThemeVariables(t.themeVariables)),Wb(fs,lp),fs),"setSiteConfig"),$z=o(t=>{Gz=Gn({},t)},"saveConfigFromInitialize"),Vz=o(t=>(fs=Gn(fs,t),Wb(fs,lp),fs),"updateSiteConfig"),ZS=o(()=>Gn({},fs),"getSiteConfig"),Yb=o(t=>(Wz(t),Gn($1,t),Sr()),"setConfig"),Sr=o(()=>Gn({},$1),"getConfig"),Uz=o(t=>{t&&(["secure",...fs.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Uz(t[e])}))},"sanitize"),Hz=o(t=>{op(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),lp.push(t),Wb(fs,lp)},"addDirective"),V1=o((t=fs)=>{lp=[],Wb(t,lp)},"reset"),rbe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},zz={},nbe=o(t=>{zz[t]||(Y.warn(rbe[t]),zz[t]=!0)},"issueWarning"),Wz=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&nbe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ws(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i2&&arguments[2]!==void 0?arguments[2]:jb;Yz&&Yz(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(ibe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function ube(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:wbe(),e=o(yt=>iG(yt),"DOMPurify");if(e.version="3.2.1",e.removed=[],!t||!t.document||t.document.nodeType!==q1.document)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Y1(g,"cloneNode"),v=Y1(g,"remove"),x=Y1(g,"nextSibling"),b=Y1(g,"childNodes"),w=Y1(g,"parentNode");if(typeof s=="function"){let yt=r.createElement("template");yt.content&&yt.content.ownerDocument&&(r=yt.content.ownerDocument)}let _,T="",{implementation:E,createNodeIterator:L,createDocumentFragment:C,getElementsByTagName:A}=r,{importNode:I}=n,D={};e.isSupported=typeof eG=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:R,TMPLIT_EXPR:S,DATA_ATTR:O,ARIA_ATTR:N,IS_SCRIPT_OR_DATA:P,ATTR_WHITESPACE:F,CUSTOM_ELEMENT:B}=Jz,{IS_ALLOWED_URI:$}=Jz,z=null,W=Ar({},[...jz,...eC,...tC,...rC,...Kz]),j=null,K=Ar({},[...Qz,...nC,...Zz,...Xb]),ie=Object.seal(tG(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Q=null,ee=null,J=!0,H=!0,q=!1,Z=!0,ae=!1,ue=!0,ce=!1,te=!1,De=!1,oe=!1,ke=!1,Fe=!1,Be=!0,Ve=!1,Ge="user-content-",He=!0,xe=!1,X={},fe=null,he=Ar({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),ge=null,ne=Ar({},["audio","video","img","source","image","track"]),ye=null,U=Ar({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Te="http://www.w3.org/1998/Math/MathML",se="http://www.w3.org/2000/svg",Ee="http://www.w3.org/1999/xhtml",Ae=Ee,Pe=!1,Me=null,me=Ar({},[Te,se,Ee],JS),We=Ar({},["mi","mo","mn","ms","mtext"]),Re=Ar({},["annotation-xml"]),tt=Ar({},["title","style","font","a","script"]),gt=null,Et=["application/xhtml+xml","text/html"],vt="text/html",Ye=null,Tt=null,$e=r.createElement("form"),rt=o(function(Se){return Se instanceof RegExp||Se instanceof Function},"isRegexOrFunction"),ft=o(function(){let Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Tt&&Tt===Se)){if((!Se||typeof Se!="object")&&(Se={}),Se=Uf(Se),gt=Et.indexOf(Se.PARSER_MEDIA_TYPE)===-1?vt:Se.PARSER_MEDIA_TYPE,Ye=gt==="application/xhtml+xml"?JS:jb,z=ul(Se,"ALLOWED_TAGS")?Ar({},Se.ALLOWED_TAGS,Ye):W,j=ul(Se,"ALLOWED_ATTR")?Ar({},Se.ALLOWED_ATTR,Ye):K,Me=ul(Se,"ALLOWED_NAMESPACES")?Ar({},Se.ALLOWED_NAMESPACES,JS):me,ye=ul(Se,"ADD_URI_SAFE_ATTR")?Ar(Uf(U),Se.ADD_URI_SAFE_ATTR,Ye):U,ge=ul(Se,"ADD_DATA_URI_TAGS")?Ar(Uf(ne),Se.ADD_DATA_URI_TAGS,Ye):ne,fe=ul(Se,"FORBID_CONTENTS")?Ar({},Se.FORBID_CONTENTS,Ye):he,Q=ul(Se,"FORBID_TAGS")?Ar({},Se.FORBID_TAGS,Ye):{},ee=ul(Se,"FORBID_ATTR")?Ar({},Se.FORBID_ATTR,Ye):{},X=ul(Se,"USE_PROFILES")?Se.USE_PROFILES:!1,J=Se.ALLOW_ARIA_ATTR!==!1,H=Se.ALLOW_DATA_ATTR!==!1,q=Se.ALLOW_UNKNOWN_PROTOCOLS||!1,Z=Se.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ae=Se.SAFE_FOR_TEMPLATES||!1,ue=Se.SAFE_FOR_XML!==!1,ce=Se.WHOLE_DOCUMENT||!1,oe=Se.RETURN_DOM||!1,ke=Se.RETURN_DOM_FRAGMENT||!1,Fe=Se.RETURN_TRUSTED_TYPE||!1,De=Se.FORCE_BODY||!1,Be=Se.SANITIZE_DOM!==!1,Ve=Se.SANITIZE_NAMED_PROPS||!1,He=Se.KEEP_CONTENT!==!1,xe=Se.IN_PLACE||!1,$=Se.ALLOWED_URI_REGEXP||rG,Ae=Se.NAMESPACE||Ee,We=Se.MATHML_TEXT_INTEGRATION_POINTS||We,Re=Se.HTML_INTEGRATION_POINTS||Re,ie=Se.CUSTOM_ELEMENT_HANDLING||{},Se.CUSTOM_ELEMENT_HANDLING&&rt(Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ie.tagNameCheck=Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Se.CUSTOM_ELEMENT_HANDLING&&rt(Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ie.attributeNameCheck=Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Se.CUSTOM_ELEMENT_HANDLING&&typeof Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ie.allowCustomizedBuiltInElements=Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ae&&(H=!1),ke&&(oe=!0),X&&(z=Ar({},Kz),j=[],X.html===!0&&(Ar(z,jz),Ar(j,Qz)),X.svg===!0&&(Ar(z,eC),Ar(j,nC),Ar(j,Xb)),X.svgFilters===!0&&(Ar(z,tC),Ar(j,nC),Ar(j,Xb)),X.mathMl===!0&&(Ar(z,rC),Ar(j,Zz),Ar(j,Xb))),Se.ADD_TAGS&&(z===W&&(z=Uf(z)),Ar(z,Se.ADD_TAGS,Ye)),Se.ADD_ATTR&&(j===K&&(j=Uf(j)),Ar(j,Se.ADD_ATTR,Ye)),Se.ADD_URI_SAFE_ATTR&&Ar(ye,Se.ADD_URI_SAFE_ATTR,Ye),Se.FORBID_CONTENTS&&(fe===he&&(fe=Uf(fe)),Ar(fe,Se.FORBID_CONTENTS,Ye)),He&&(z["#text"]=!0),ce&&Ar(z,["html","head","body"]),z.table&&(Ar(z,["tbody"]),delete Q.tbody),Se.TRUSTED_TYPES_POLICY){if(typeof Se.TRUSTED_TYPES_POLICY.createHTML!="function")throw W1('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Se.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw W1('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=Se.TRUSTED_TYPES_POLICY,T=_.createHTML("")}else _===void 0&&(_=Tbe(m,i)),_!==null&&typeof T=="string"&&(T=_.createHTML(""));Wa&&Wa(Se),Tt=Se}},"_parseConfig"),kt=Ar({},[...eC,...tC,...hbe]),er=Ar({},[...rC,...fbe]),dt=o(function(Se){let at=w(Se);(!at||!at.tagName)&&(at={namespaceURI:Ae,tagName:"template"});let At=jb(Se.tagName),pr=jb(at.tagName);return Me[Se.namespaceURI]?Se.namespaceURI===se?at.namespaceURI===Ee?At==="svg":at.namespaceURI===Te?At==="svg"&&(pr==="annotation-xml"||We[pr]):!!kt[At]:Se.namespaceURI===Te?at.namespaceURI===Ee?At==="math":at.namespaceURI===se?At==="math"&&Re[pr]:!!er[At]:Se.namespaceURI===Ee?at.namespaceURI===se&&!Re[pr]||at.namespaceURI===Te&&!We[pr]?!1:!er[At]&&(tt[At]||!kt[At]):!!(gt==="application/xhtml+xml"&&Me[Se.namespaceURI]):!1},"_checkValidNamespace"),Xe=o(function(Se){U1(e.removed,{element:Se});try{w(Se).removeChild(Se)}catch{v(Se)}},"_forceRemove"),ct=o(function(Se,at){try{U1(e.removed,{attribute:at.getAttributeNode(Se),from:at})}catch{U1(e.removed,{attribute:null,from:at})}if(at.removeAttribute(Se),Se==="is"&&!j[Se])if(oe||ke)try{Xe(at)}catch{}else try{at.setAttribute(Se,"")}catch{}},"_removeAttribute"),Lt=o(function(Se){let at=null,At=null;if(De)Se=""+Se;else{let On=Xz(Se,/^[\r\n\t ]+/);At=On&&On[0]}gt==="application/xhtml+xml"&&Ae===Ee&&(Se=''+Se+"");let pr=_?_.createHTML(Se):Se;if(Ae===Ee)try{at=new p().parseFromString(pr,gt)}catch{}if(!at||!at.documentElement){at=E.createDocument(Ae,"template",null);try{at.documentElement.innerHTML=Pe?T:pr}catch{}}let In=at.body||at.documentElement;return Se&&At&&In.insertBefore(r.createTextNode(At),In.childNodes[0]||null),Ae===Ee?A.call(at,ce?"html":"body")[0]:ce?at.documentElement:In},"_initDocument"),Rt=o(function(Se){return L.call(Se.ownerDocument||Se,Se,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),zt=o(function(Se){return Se instanceof d&&(typeof Se.nodeName!="string"||typeof Se.textContent!="string"||typeof Se.removeChild!="function"||!(Se.attributes instanceof f)||typeof Se.removeAttribute!="function"||typeof Se.setAttribute!="function"||typeof Se.namespaceURI!="string"||typeof Se.insertBefore!="function"||typeof Se.hasChildNodes!="function")},"_isClobbered"),Xn=o(function(Se){return typeof l=="function"&&Se instanceof l},"_isNode");function or(yt,Se,at){D[yt]&&qb(D[yt],At=>{At.call(e,Se,at,Tt)})}o(or,"_executeHook");let hn=o(function(Se){let at=null;if(or("beforeSanitizeElements",Se,null),zt(Se))return Xe(Se),!0;let At=Ye(Se.nodeName);if(or("uponSanitizeElement",Se,{tagName:At,allowedTags:z}),Se.hasChildNodes()&&!Xn(Se.firstElementChild)&&Ha(/<[/\w]/g,Se.innerHTML)&&Ha(/<[/\w]/g,Se.textContent)||Se.nodeType===q1.progressingInstruction||ue&&Se.nodeType===q1.comment&&Ha(/<[/\w]/g,Se.data))return Xe(Se),!0;if(!z[At]||Q[At]){if(!Q[At]&&Ur(At)&&(ie.tagNameCheck instanceof RegExp&&Ha(ie.tagNameCheck,At)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(At)))return!1;if(He&&!fe[At]){let pr=w(Se)||Se.parentNode,In=b(Se)||Se.childNodes;if(In&&pr){let On=In.length;for(let Ir=On-1;Ir>=0;--Ir){let kn=y(In[Ir],!0);kn.__removalCount=(Se.__removalCount||0)+1,pr.insertBefore(kn,x(Se))}}}return Xe(Se),!0}return Se instanceof u&&!dt(Se)||(At==="noscript"||At==="noembed"||At==="noframes")&&Ha(/<\/no(script|embed|frames)/i,Se.innerHTML)?(Xe(Se),!0):(ae&&Se.nodeType===q1.text&&(at=Se.textContent,qb([k,R,S],pr=>{at=H1(at,pr," ")}),Se.textContent!==at&&(U1(e.removed,{element:Se.cloneNode()}),Se.textContent=at)),or("afterSanitizeElements",Se,null),!1)},"_sanitizeElements"),Tn=o(function(Se,at,At){if(Be&&(at==="id"||at==="name")&&(At in r||At in $e))return!1;if(!(H&&!ee[at]&&Ha(O,at))){if(!(J&&Ha(N,at))){if(!j[at]||ee[at]){if(!(Ur(Se)&&(ie.tagNameCheck instanceof RegExp&&Ha(ie.tagNameCheck,Se)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(Se))&&(ie.attributeNameCheck instanceof RegExp&&Ha(ie.attributeNameCheck,at)||ie.attributeNameCheck instanceof Function&&ie.attributeNameCheck(at))||at==="is"&&ie.allowCustomizedBuiltInElements&&(ie.tagNameCheck instanceof RegExp&&Ha(ie.tagNameCheck,At)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(At))))return!1}else if(!ye[at]){if(!Ha($,H1(At,F,""))){if(!((at==="src"||at==="xlink:href"||at==="href")&&Se!=="script"&&obe(At,"data:")===0&&ge[Se])){if(!(q&&!Ha(P,H1(At,F,"")))){if(At)return!1}}}}}}return!0},"_isValidAttribute"),Ur=o(function(Se){return Se!=="annotation-xml"&&Xz(Se,B)},"_isBasicCustomElement"),ri=o(function(Se){or("beforeSanitizeAttributes",Se,null);let{attributes:at}=Se;if(!at)return;let At={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:j,forceKeepAttr:void 0},pr=at.length;for(;pr--;){let In=at[pr],{name:On,namespaceURI:Ir,value:kn}=In,_t=Ye(On),St=On==="value"?kn:lbe(kn);if(At.attrName=_t,At.attrValue=St,At.keepAttr=!0,At.forceKeepAttr=void 0,or("uponSanitizeAttribute",Se,At),St=At.attrValue,Ve&&(_t==="id"||_t==="name")&&(ct(On,Se),St=Ge+St),ue&&Ha(/((--!?|])>)|<\/(style|title)/i,St)){ct(On,Se);continue}if(At.forceKeepAttr||(ct(On,Se),!At.keepAttr))continue;if(!Z&&Ha(/\/>/i,St)){ct(On,Se);continue}ae&&qb([k,R,S],Ue=>{St=H1(St,Ue," ")});let bt=Ye(Se.nodeName);if(Tn(bt,_t,St)){if(_&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Ir)switch(m.getAttributeType(bt,_t)){case"TrustedHTML":{St=_.createHTML(St);break}case"TrustedScriptURL":{St=_.createScriptURL(St);break}}try{Ir?Se.setAttributeNS(Ir,On,St):Se.setAttribute(On,St),zt(Se)?Xe(Se):qz(e.removed)}catch{}}}or("afterSanitizeAttributes",Se,null)},"_sanitizeAttributes"),Mn=o(function yt(Se){let at=null,At=Rt(Se);for(or("beforeSanitizeShadowDOM",Se,null);at=At.nextNode();)or("uponSanitizeShadowNode",at,null),!hn(at)&&(at.content instanceof a&&yt(at.content),ri(at));or("afterSanitizeShadowDOM",Se,null)},"_sanitizeShadowDOM");return e.sanitize=function(yt){let Se=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},at=null,At=null,pr=null,In=null;if(Pe=!yt,Pe&&(yt=""),typeof yt!="string"&&!Xn(yt))if(typeof yt.toString=="function"){if(yt=yt.toString(),typeof yt!="string")throw W1("dirty is not a string, aborting")}else throw W1("toString is not a function");if(!e.isSupported)return yt;if(te||ft(Se),e.removed=[],typeof yt=="string"&&(xe=!1),xe){if(yt.nodeName){let kn=Ye(yt.nodeName);if(!z[kn]||Q[kn])throw W1("root node is forbidden and cannot be sanitized in-place")}}else if(yt instanceof l)at=Lt(""),At=at.ownerDocument.importNode(yt,!0),At.nodeType===q1.element&&At.nodeName==="BODY"||At.nodeName==="HTML"?at=At:at.appendChild(At);else{if(!oe&&!ae&&!ce&&yt.indexOf("<")===-1)return _&&Fe?_.createHTML(yt):yt;if(at=Lt(yt),!at)return oe?null:Fe?T:""}at&&De&&Xe(at.firstChild);let On=Rt(xe?yt:at);for(;pr=On.nextNode();)hn(pr)||(pr.content instanceof a&&Mn(pr.content),ri(pr));if(xe)return yt;if(oe){if(ke)for(In=C.call(at.ownerDocument);at.firstChild;)In.appendChild(at.firstChild);else In=at;return(j.shadowroot||j.shadowrootmode)&&(In=I.call(n,In,!0)),In}let Ir=ce?at.outerHTML:at.innerHTML;return ce&&z["!doctype"]&&at.ownerDocument&&at.ownerDocument.doctype&&at.ownerDocument.doctype.name&&Ha(nG,at.ownerDocument.doctype.name)&&(Ir=" +`+Ir),ae&&qb([k,R,S],kn=>{Ir=H1(Ir,kn," ")}),_&&Fe?_.createHTML(Ir):Ir},e.setConfig=function(){let yt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};ft(yt),te=!0},e.clearConfig=function(){Tt=null,te=!1},e.isValidAttribute=function(yt,Se,at){Tt||ft({});let At=Ye(yt),pr=Ye(Se);return Tn(At,pr,at)},e.addHook=function(yt,Se){typeof Se=="function"&&(D[yt]=D[yt]||[],U1(D[yt],Se))},e.removeHook=function(yt){if(D[yt])return qz(D[yt])},e.removeHooks=function(yt){D[yt]&&(D[yt]=[])},e.removeAllHooks=function(){D={}},e}var eG,Yz,ibe,abe,sbe,Wa,Eo,tG,iC,aC,qb,qz,U1,jb,JS,Xz,H1,obe,lbe,ul,Ha,W1,jz,eC,tC,hbe,rC,fbe,Kz,Qz,nC,Zz,Xb,dbe,pbe,mbe,gbe,ybe,rG,vbe,xbe,nG,bbe,Jz,q1,wbe,Tbe,ah,sC=M(()=>{"use strict";({entries:eG,setPrototypeOf:Yz,isFrozen:ibe,getPrototypeOf:abe,getOwnPropertyDescriptor:sbe}=Object),{freeze:Wa,seal:Eo,create:tG}=Object,{apply:iC,construct:aC}=typeof Reflect<"u"&&Reflect;Wa||(Wa=o(function(e){return e},"freeze"));Eo||(Eo=o(function(e){return e},"seal"));iC||(iC=o(function(e,r,n){return e.apply(r,n)},"apply"));aC||(aC=o(function(e,r){return new e(...r)},"construct"));qb=Ws(Array.prototype.forEach),qz=Ws(Array.prototype.pop),U1=Ws(Array.prototype.push),jb=Ws(String.prototype.toLowerCase),JS=Ws(String.prototype.toString),Xz=Ws(String.prototype.match),H1=Ws(String.prototype.replace),obe=Ws(String.prototype.indexOf),lbe=Ws(String.prototype.trim),ul=Ws(Object.prototype.hasOwnProperty),Ha=Ws(RegExp.prototype.test),W1=cbe(TypeError);o(Ws,"unapply");o(cbe,"unconstruct");o(Ar,"addToSet");o(ube,"cleanArray");o(Uf,"clone");o(Y1,"lookupGetter");jz=Wa(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),eC=Wa(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),tC=Wa(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),hbe=Wa(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),rC=Wa(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),fbe=Wa(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Kz=Wa(["#text"]),Qz=Wa(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),nC=Wa(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Zz=Wa(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Xb=Wa(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),dbe=Eo(/\{\{[\w\W]*|[\w\W]*\}\}/gm),pbe=Eo(/<%[\w\W]*|[\w\W]*%>/gm),mbe=Eo(/\${[\w\W]*}/gm),gbe=Eo(/^data-[\-\w.\u00B7-\uFFFF]/),ybe=Eo(/^aria-[\-\w]+$/),rG=Eo(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),vbe=Eo(/^(?:\w+script|data):/i),xbe=Eo(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),nG=Eo(/^html$/i),bbe=Eo(/^[a-z][.\w]*(-[.\w]+)+$/i),Jz=Object.freeze({__proto__:null,ARIA_ATTR:ybe,ATTR_WHITESPACE:xbe,CUSTOM_ELEMENT:bbe,DATA_ATTR:gbe,DOCTYPE_NAME:nG,ERB_EXPR:pbe,IS_ALLOWED_URI:rG,IS_SCRIPT_OR_DATA:vbe,MUSTACHE_EXPR:dbe,TMPLIT_EXPR:mbe}),q1={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},wbe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Tbe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy");o(iG,"createDOMPurify");ah=iG()});var N$={};vr(N$,{default:()=>g3e});function Lbe(t){return String(t).replace(_be,e=>Abe[e])}function Mbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function Gbe(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function BG(t){for(var e=0;e=l4[e]&&t<=l4[e+1])return!0;return!1}function Qbe(t,e){Zl[t]=e}function RC(t,e,r){if(!Zl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=Zl[e][n];if(!i&&t[0]in sG&&(n=sG[t[0]].charCodeAt(0),i=Zl[e][n]),!i&&r==="text"&&BG(n)&&(i=Zl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function Zbe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!oC[e]){var r=oC[e]={cssEmPerMu:Kb.quad[e]/18};for(var n in Kb)Kb.hasOwnProperty(n)&&(r[n]=Kb[n][e])}return oC[e]}function cG(t){if(t instanceof ms)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function r4e(t){if(t instanceof qf)return t;throw new Error("Expected span but got "+String(t)+".")}function G(t,e,r,n,i,a){En[t][i]={font:e,group:r,replace:n},a&&n&&(En[t][n]=En[t][i])}function Ct(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(n4(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(n4(s,e));var h;r?(h=n4(Ii(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=iu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=mt(f.height+f.depth),f.depth&&(d.style.verticalAlign=mt(-f.depth))}return f}function jG(t){return new Yf(t)}function pG(t,e,r,n,i){var a=gs(t,r),s;a.length===1&&a[0]instanceof ps&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new st.MathNode("mrow",a);var l=new st.MathNode("annotation",[new st.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new st.MathNode("semantics",[s,l]),h=new st.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Ie.makeSpan([f],[h])}function yr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function PC(t){var e=x4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function x4(t){return t&&(t.type==="atom"||i4e.hasOwnProperty(t.type))?t:null}function JG(t,e){var r=Ii(t.body,e,!0);return I4e([t.mclass],r,e)}function e$(t,e){var r,n=gs(t.body,e);return t.mclass==="minner"?r=new st.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new st.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new st.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function B4e(t,e,r){var n=O4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function F4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new ut("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=B4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=mG()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function w4(t,e){var r=x4(t);if(r&&Jt.contains(Q4e,r.text))return r;throw r?new ut("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new ut("Invalid delimiter type '"+t.type+"'",t)}function vG(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function ec(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Ys=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Co=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Ys.range(this,e))}},ut=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},_be=/[&><"']/g;o(Lbe,"escape");PG=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),Dbe=o(function(e){var r=PG(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),Nbe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),Rbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:kbe,deflt:Ebe,escape:Lbe,hyphenate:Cbe,getBaseElem:PG,isCharacterBox:Dbe,protocolFromUrl:Rbe},o4={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(Mbe,"getDefaultValue");Z1=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in o4)if(o4.hasOwnProperty(r)){var n=o4[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:Mbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new ut("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Kl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Ql[Ibe[this.id]]}sub(){return Ql[Obe[this.id]]}fracNum(){return Ql[Pbe[this.id]]}fracDen(){return Ql[Bbe[this.id]]}cramp(){return Ql[Fbe[this.id]]}text(){return Ql[zbe[this.id]]}isTight(){return this.size>=2}},NC=0,c4=1,hp=2,ru=3,J1=4,So=5,fp=6,Ya=7,Ql=[new Kl(NC,0,!1),new Kl(c4,0,!0),new Kl(hp,1,!1),new Kl(ru,1,!0),new Kl(J1,2,!1),new Kl(So,2,!0),new Kl(fp,3,!1),new Kl(Ya,3,!0)],Ibe=[J1,So,J1,So,fp,Ya,fp,Ya],Obe=[So,So,So,So,Ya,Ya,Ya,Ya],Pbe=[hp,ru,J1,So,fp,Ya,fp,Ya],Bbe=[ru,ru,So,So,Ya,Ya,Ya,Ya],Fbe=[c4,c4,ru,ru,So,So,Ya,Ya],zbe=[NC,c4,hp,ru,hp,ru,hp,ru],rr={DISPLAY:Ql[NC],TEXT:Ql[hp],SCRIPT:Ql[J1],SCRIPTSCRIPT:Ql[fp]},xC=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(Gbe,"scriptFromCodepoint");l4=[];xC.forEach(t=>t.blocks.forEach(e=>l4.push(...e)));o(BG,"supportedCodepoint");up=80,$be=o(function(e,r){return"M95,"+(622+e+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),Vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),Ube=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),Hbe=o(function(e,r){return"M424,"+(2398+e+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),Wbe=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Ybe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),qbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Xbe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=$be(r,up);break;case"sqrtSize1":i=Vbe(r,up);break;case"sqrtSize2":i=Ube(r,up);break;case"sqrtSize3":i=Hbe(r,up);break;case"sqrtSize4":i=Wbe(r,up);break;case"sqrtTall":i=qbe(r,up,n)}return i},"sqrtPath"),jbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),aG={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Kbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),Yf=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},Zl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Kb={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},sG={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Qbe,"setFontMetrics");o(RC,"getCharacterMetrics");oC={};o(Zbe,"getGlobalMetrics");Jbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],oG=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],lG=o(function(e,r){return r.size<2?e:Jbe[e-1][r.size-1]},"sizeAtStyle"),u4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=oG[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:lG(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:oG[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=lG(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Zbe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};u4.BASESIZE=6;bC={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},e4e={ex:!0,em:!0,mu:!0},FG=o(function(e){return typeof e!="string"&&(e=e.unit),e in bC||e in e4e||e==="ex"},"validUnit"),Qn=o(function(e,r){var n;if(e.unit in bC)n=bC[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new ut("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),mt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),lh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),zG=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),GG=o(function(e){var r=document.createElement(e);r.className=lh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a",r},"toMarkup"),qf=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,zG.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return GG.call(this,"span")}toMarkup(){return $G.call(this,"span")}},ey=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,zG.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return GG.call(this,"a")}toMarkup(){return $G.call(this,"a")}},wC=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Jt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=mt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=lh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},fl=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},ty=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);G(V,re,we,"\u2208","\\in",!0);G(V,re,we,"\uE020","\\@not");G(V,re,we,"\u2282","\\subset",!0);G(V,re,we,"\u2283","\\supset",!0);G(V,re,we,"\u2286","\\subseteq",!0);G(V,re,we,"\u2287","\\supseteq",!0);G(V,ve,we,"\u2288","\\nsubseteq",!0);G(V,ve,we,"\u2289","\\nsupseteq",!0);G(V,re,we,"\u22A8","\\models");G(V,re,we,"\u2190","\\leftarrow",!0);G(V,re,we,"\u2264","\\le");G(V,re,we,"\u2264","\\leq",!0);G(V,re,we,"<","\\lt",!0);G(V,re,we,"\u2192","\\rightarrow",!0);G(V,re,we,"\u2192","\\to");G(V,ve,we,"\u2271","\\ngeq",!0);G(V,ve,we,"\u2270","\\nleq",!0);G(V,re,su,"\xA0","\\ ");G(V,re,su,"\xA0","\\space");G(V,re,su,"\xA0","\\nobreakspace");G(it,re,su,"\xA0","\\ ");G(it,re,su,"\xA0"," ");G(it,re,su,"\xA0","\\space");G(it,re,su,"\xA0","\\nobreakspace");G(V,re,su,null,"\\nobreak");G(V,re,su,null,"\\allowbreak");G(V,re,y4,",",",");G(V,re,y4,";",";");G(V,ve,Nt,"\u22BC","\\barwedge",!0);G(V,ve,Nt,"\u22BB","\\veebar",!0);G(V,re,Nt,"\u2299","\\odot",!0);G(V,re,Nt,"\u2295","\\oplus",!0);G(V,re,Nt,"\u2297","\\otimes",!0);G(V,re,_e,"\u2202","\\partial",!0);G(V,re,Nt,"\u2298","\\oslash",!0);G(V,ve,Nt,"\u229A","\\circledcirc",!0);G(V,ve,Nt,"\u22A1","\\boxdot",!0);G(V,re,Nt,"\u25B3","\\bigtriangleup");G(V,re,Nt,"\u25BD","\\bigtriangledown");G(V,re,Nt,"\u2020","\\dagger");G(V,re,Nt,"\u22C4","\\diamond");G(V,re,Nt,"\u22C6","\\star");G(V,re,Nt,"\u25C3","\\triangleleft");G(V,re,Nt,"\u25B9","\\triangleright");G(V,re,qs,"{","\\{");G(it,re,_e,"{","\\{");G(it,re,_e,"{","\\textbraceleft");G(V,re,qa,"}","\\}");G(it,re,_e,"}","\\}");G(it,re,_e,"}","\\textbraceright");G(V,re,qs,"{","\\lbrace");G(V,re,qa,"}","\\rbrace");G(V,re,qs,"[","\\lbrack",!0);G(it,re,_e,"[","\\lbrack",!0);G(V,re,qa,"]","\\rbrack",!0);G(it,re,_e,"]","\\rbrack",!0);G(V,re,qs,"(","\\lparen",!0);G(V,re,qa,")","\\rparen",!0);G(it,re,_e,"<","\\textless",!0);G(it,re,_e,">","\\textgreater",!0);G(V,re,qs,"\u230A","\\lfloor",!0);G(V,re,qa,"\u230B","\\rfloor",!0);G(V,re,qs,"\u2308","\\lceil",!0);G(V,re,qa,"\u2309","\\rceil",!0);G(V,re,_e,"\\","\\backslash");G(V,re,_e,"\u2223","|");G(V,re,_e,"\u2223","\\vert");G(it,re,_e,"|","\\textbar",!0);G(V,re,_e,"\u2225","\\|");G(V,re,_e,"\u2225","\\Vert");G(it,re,_e,"\u2225","\\textbardbl");G(it,re,_e,"~","\\textasciitilde");G(it,re,_e,"\\","\\textbackslash");G(it,re,_e,"^","\\textasciicircum");G(V,re,we,"\u2191","\\uparrow",!0);G(V,re,we,"\u21D1","\\Uparrow",!0);G(V,re,we,"\u2193","\\downarrow",!0);G(V,re,we,"\u21D3","\\Downarrow",!0);G(V,re,we,"\u2195","\\updownarrow",!0);G(V,re,we,"\u21D5","\\Updownarrow",!0);G(V,re,Ti,"\u2210","\\coprod");G(V,re,Ti,"\u22C1","\\bigvee");G(V,re,Ti,"\u22C0","\\bigwedge");G(V,re,Ti,"\u2A04","\\biguplus");G(V,re,Ti,"\u22C2","\\bigcap");G(V,re,Ti,"\u22C3","\\bigcup");G(V,re,Ti,"\u222B","\\int");G(V,re,Ti,"\u222B","\\intop");G(V,re,Ti,"\u222C","\\iint");G(V,re,Ti,"\u222D","\\iiint");G(V,re,Ti,"\u220F","\\prod");G(V,re,Ti,"\u2211","\\sum");G(V,re,Ti,"\u2A02","\\bigotimes");G(V,re,Ti,"\u2A01","\\bigoplus");G(V,re,Ti,"\u2A00","\\bigodot");G(V,re,Ti,"\u222E","\\oint");G(V,re,Ti,"\u222F","\\oiint");G(V,re,Ti,"\u2230","\\oiiint");G(V,re,Ti,"\u2A06","\\bigsqcup");G(V,re,Ti,"\u222B","\\smallint");G(it,re,dp,"\u2026","\\textellipsis");G(V,re,dp,"\u2026","\\mathellipsis");G(it,re,dp,"\u2026","\\ldots",!0);G(V,re,dp,"\u2026","\\ldots",!0);G(V,re,dp,"\u22EF","\\@cdots",!0);G(V,re,dp,"\u22F1","\\ddots",!0);G(V,re,_e,"\u22EE","\\varvdots");G(V,re,$n,"\u02CA","\\acute");G(V,re,$n,"\u02CB","\\grave");G(V,re,$n,"\xA8","\\ddot");G(V,re,$n,"~","\\tilde");G(V,re,$n,"\u02C9","\\bar");G(V,re,$n,"\u02D8","\\breve");G(V,re,$n,"\u02C7","\\check");G(V,re,$n,"^","\\hat");G(V,re,$n,"\u20D7","\\vec");G(V,re,$n,"\u02D9","\\dot");G(V,re,$n,"\u02DA","\\mathring");G(V,re,tr,"\uE131","\\@imath");G(V,re,tr,"\uE237","\\@jmath");G(V,re,_e,"\u0131","\u0131");G(V,re,_e,"\u0237","\u0237");G(it,re,_e,"\u0131","\\i",!0);G(it,re,_e,"\u0237","\\j",!0);G(it,re,_e,"\xDF","\\ss",!0);G(it,re,_e,"\xE6","\\ae",!0);G(it,re,_e,"\u0153","\\oe",!0);G(it,re,_e,"\xF8","\\o",!0);G(it,re,_e,"\xC6","\\AE",!0);G(it,re,_e,"\u0152","\\OE",!0);G(it,re,_e,"\xD8","\\O",!0);G(it,re,$n,"\u02CA","\\'");G(it,re,$n,"\u02CB","\\`");G(it,re,$n,"\u02C6","\\^");G(it,re,$n,"\u02DC","\\~");G(it,re,$n,"\u02C9","\\=");G(it,re,$n,"\u02D8","\\u");G(it,re,$n,"\u02D9","\\.");G(it,re,$n,"\xB8","\\c");G(it,re,$n,"\u02DA","\\r");G(it,re,$n,"\u02C7","\\v");G(it,re,$n,"\xA8",'\\"');G(it,re,$n,"\u02DD","\\H");G(it,re,$n,"\u25EF","\\textcircled");VG={"--":!0,"---":!0,"``":!0,"''":!0};G(it,re,_e,"\u2013","--",!0);G(it,re,_e,"\u2013","\\textendash");G(it,re,_e,"\u2014","---",!0);G(it,re,_e,"\u2014","\\textemdash");G(it,re,_e,"\u2018","`",!0);G(it,re,_e,"\u2018","\\textquoteleft");G(it,re,_e,"\u2019","'",!0);G(it,re,_e,"\u2019","\\textquoteright");G(it,re,_e,"\u201C","``",!0);G(it,re,_e,"\u201C","\\textquotedblleft");G(it,re,_e,"\u201D","''",!0);G(it,re,_e,"\u201D","\\textquotedblright");G(V,re,_e,"\xB0","\\degree",!0);G(it,re,_e,"\xB0","\\degree");G(it,re,_e,"\xB0","\\textdegree",!0);G(V,re,_e,"\xA3","\\pounds");G(V,re,_e,"\xA3","\\mathsterling",!0);G(it,re,_e,"\xA3","\\pounds");G(it,re,_e,"\xA3","\\textsterling",!0);G(V,ve,_e,"\u2720","\\maltese");G(it,ve,_e,"\u2720","\\maltese");uG='0123456789/@."';for(Qb=0;Qb0)return hl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=o4e(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=WG[u].fontName,p=[u]):(d=r4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(v4(a,d,i).metrics)return hl(a,d,i,r,s.concat(p));if(VG.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(lh(t.classes)!==lh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),u4e=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),ds=o(function(e,r,n,i){var a=new qf(e,r,n,i);return MC(a),a},"makeSpan"),UG=o((t,e,r,n)=>new qf(t,e,r,n),"makeSvgSpan"),h4e=o(function(e,r,n){var i=ds([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=mt(i.height),i.maxFontSize=1,i},"makeLineSpan"),f4e=o(function(e,r,n,i){var a=new ey(e,r,n,i);return MC(a),a},"makeAnchor"),HG=o(function(e){var r=new Yf(e);return MC(r),r},"makeFragment"),d4e=o(function(e,r){return e instanceof Yf?ds([],[e],r):e},"wrapFragment"),p4e=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=ds(["mspace"],[],e),n=Qn(t,e);return r.style.marginRight=mt(n),r},"makeGlue"),r4=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),WG={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},YG={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},y4e=o(function(e,r){var[n,i,a]=YG[e],s=new Jl(n),l=new fl([s],{width:mt(i),height:mt(a),style:"width:"+mt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=UG(["overlay"],[l],r);return u.height=a,u.style.height=mt(a),u.style.width=mt(i),u},"staticSvg"),Ie={fontMap:WG,makeSymbol:hl,mathsym:s4e,makeSpan:ds,makeSvgSpan:UG,makeLineSpan:h4e,makeAnchor:f4e,makeFragment:HG,wrapFragment:d4e,makeVList:m4e,makeOrd:l4e,makeGlue:g4e,staticSvg:y4e,svgData:YG,tryCombineChars:u4e},Kn={number:3,unit:"mu"},Hf={number:4,unit:"mu"},tu={number:5,unit:"mu"},v4e={mord:{mop:Kn,mbin:Hf,mrel:tu,minner:Kn},mop:{mord:Kn,mop:Kn,mrel:tu,minner:Kn},mbin:{mord:Hf,mop:Hf,mopen:Hf,minner:Hf},mrel:{mord:tu,mop:tu,mopen:tu,minner:tu},mopen:{},mclose:{mop:Kn,mbin:Hf,mrel:tu,minner:Kn},mpunct:{mord:Kn,mop:Kn,mrel:tu,mopen:Kn,mclose:Kn,mpunct:Kn,minner:Kn},minner:{mord:Kn,mop:Kn,mbin:Hf,mrel:tu,mopen:Kn,mpunct:Kn,minner:Kn}},x4e={mord:{mop:Kn},mop:{mord:Kn,mop:Kn},mbin:{},mrel:{},mopen:{},mclose:{mop:Kn},mpunct:{},minner:{mop:Kn}},qG={},f4={},d4={};o(Ct,"defineFunction");o(Xf,"defineFunctionBuilders");p4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),iu=Ie.makeSpan,b4e=["leftmost","mbin","mopen","mrel","mop","mpunct"],w4e=["rightmost","mrel","mclose","mpunct"],T4e={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT},k4e={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Ii=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(w4e,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(b4e,v)&&(g.classes[0]="mord")},{node:d},p,m),dG(a,(g,y)=>{var v=kC(y),x=kC(g),b=v&&x?g.hasClass("mtight")?x4e[v][x]:v4e[v][x]:null;if(b)return Ie.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),dG=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),XG=o(function(e){return e instanceof Yf||e instanceof ey||e instanceof qf&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),E4e=o(function t(e,r){var n=XG(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),kC=o(function(e,r){return e?(r&&(e=E4e(e,r)),k4e[e.classes[0]]||null):null},"getTypeOfDomTree"),ry=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return iu(r.concat(n))},"makeNullDelimiter"),Or=o(function(e,r,n){if(!e)return iu();if(f4[e.type]){var i=f4[e.type](e,r);if(n&&r.size!==n.size){i=iu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new ut("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(n4,"buildHTMLUnbreakable");o(EC,"buildHTML");o(jG,"newDocumentFragment");ps=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=lh(this.classes));for(var n=0;n0&&(e+=' class ="'+Jt.escape(lh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},Wf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},SC=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",mt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},st={MathNode:ps,TextNode:Wf,SpaceNode:SC,newDocumentFragment:jG},Ao=o(function(e,r,n){return En[r][e]&&En[r][e].replace&&e.charCodeAt(0)!==55349&&!(VG.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=En[r][e].replace),new st.TextNode(e)},"makeText"),IC=o(function(e){return e.length===1?e[0]:new st.MathNode("mrow",e)},"makeRow"),OC=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;En[i][a]&&En[i][a].replace&&(a=En[i][a].replace);var s=Ie.fontMap[n].fontName;return RC(a,s,i)?Ie.fontMap[n].variant:null},"getVariant"),gs=o(function(e,r,n){if(e.length===1){var i=mn(e[0],r);return n&&i instanceof ps&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),ch=o(function(e,r,n){return IC(gs(e,r,n))},"buildExpressionRow"),mn=o(function(e,r){if(!e)return new st.MathNode("mrow");if(d4[e.type]){var n=d4[e.type](e,r);return n}else throw new ut("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(pG,"buildMathML");KG=o(function(e){return new u4({style:e.displayMode?rr.DISPLAY:rr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),QG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Ie.makeSpan(n,[e])}return e},"displayWrap"),S4e=o(function(e,r,n){var i=KG(n),a;if(n.output==="mathml")return pG(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=EC(e,i);a=Ie.makeSpan(["katex"],[s])}else{var l=pG(e,r,i,n.displayMode,!1),u=EC(e,i);a=Ie.makeSpan(["katex"],[l,u])}return QG(a,n)},"buildTree"),C4e=o(function(e,r,n){var i=KG(n),a=EC(e,i),s=Ie.makeSpan(["katex"],[a]);return QG(s,n)},"buildHTMLTree"),A4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},_4e=o(function(e){var r=new st.MathNode("mo",[new st.TextNode(A4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),L4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},D4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),N4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=D4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Jl(p),v=new fl([y],{width:"100%",height:mt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Ie.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=L4e[u],[w,_,T]=b,E=T/1e3,L=w.length,C,A;if(L===1){var I=b[3];C=["hide-tail"],A=[I]}else if(L===2)C=["halfarrow-left","halfarrow-right"],A=["xMinYMin","xMaxYMin"];else if(L===3)C=["brace-left","brace-center","brace-right"],A=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+L+" children.");for(var D=0;D0&&(i.style.minWidth=mt(a)),i},"svgSpan"),R4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Ie.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new ty({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new ty({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new fl(h,{width:"100%",height:mt(l)});s=Ie.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=mt(l),s},"encloseSpan"),au={encloseSpan:R4e,mathMLnode:_4e,svgSpan:N4e};o(yr,"assertNodeType");o(PC,"assertSymbolNodeType");o(x4,"checkSymbolNodeType");BC=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=yr(t.base,"accent"),r=n.base,t.base=r,i=r4e(Or(t,e)),t.base=n):(n=yr(t,"accent"),r=n.base);var a=Or(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Or(u,e.havingCrampedStyle());l=cG(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=au.svgSpan(n,e),p=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+mt(2*l)+")",marginLeft:mt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Ie.staticSvg("vec",e),g=Ie.svgData.vec[1]):(m=Ie.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=cG(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Ie.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=mt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Ie.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),ZG=o((t,e)=>{var r=t.isStretchy?au.mathMLnode(t.label):new st.MathNode("mo",[Ao(t.label,t.mode)]),n=new st.MathNode("mover",[mn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),M4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Ct({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=p4(e[0]),n=!M4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:BC,mathmlBuilder:ZG});Ct({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:BC,mathmlBuilder:ZG});Ct({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Or(t.base,e),n=au.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Ie.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Ie.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=au.mathMLnode(t.label),n=new st.MathNode("munder",[mn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});i4=o(t=>{var e=new st.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Ct({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Ie.wrapFragment(Or(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Ie.wrapFragment(Or(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=au.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Ie.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Ie.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Ie.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=au.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=i4(mn(t.body,e));if(t.below){var a=i4(mn(t.below,e));n=new st.MathNode("munderover",[r,a,i])}else n=new st.MathNode("mover",[r,i])}else if(t.below){var s=i4(mn(t.below,e));n=new st.MathNode("munder",[r,s])}else n=i4(),n=new st.MathNode("mover",[r,n]);return n}});I4e=Ie.makeSpan;o(JG,"htmlBuilder$9");o(e$,"mathmlBuilder$8");Ct({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:JG,mathmlBuilder:e$});b4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Ct({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:b4(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Ct({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=b4(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:JG,mathmlBuilder:e$});Ct({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:b4(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Ii(t.body,e,!0),n=Ie.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=gs(t.body,e),n=new st.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});O4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},mG=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),gG=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),P4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(B4e,"cdArrow");o(F4e,"parseCD");Ct({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Ie.wrapFragment(Or(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=mt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new st.MathNode("mrow",[mn(t.label,e)]);return r=new st.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new st.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Ct({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Ie.wrapFragment(Or(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new st.MathNode("mrow",[mn(t.fragment,e)])}});Ct({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=yr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new ut("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});t$=o((t,e)=>{var r=Ii(t.body,e.withColor(t.color),!1);return Ie.makeFragment(r)},"htmlBuilder$8"),r$=o((t,e)=>{var r=gs(t.body,e.withColor(t.color)),n=new st.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Ct({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=yr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:t$,mathmlBuilder:r$});Ct({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=yr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:t$,mathmlBuilder:r$});Ct({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&yr(i,"size").value}},htmlBuilder(t,e){var r=Ie.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=mt(Qn(t.size,e)))),r},mathmlBuilder(t,e){var r=new st.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",mt(Qn(t.size,e)))),r}});CC={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},n$=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new ut("Expected a control sequence",t);return e},"checkControlSequence"),z4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),i$=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Ct({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(CC[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=CC[n.text]),yr(e.parseFunction(),"internal");throw new ut("Invalid token after macro prefix",n)}});Ct({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new ut("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new ut('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new ut('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new ut("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===CC[r]),{type:"internal",mode:e.mode}}});Ct({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=n$(e.gullet.popToken());e.gullet.consumeSpaces();var i=z4e(e);return i$(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Ct({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=n$(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return i$(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});K1=o(function(e,r,n){var i=En.math[e]&&En.math[e].replace,a=RC(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),FC=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Ie.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),a$=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=mt(a),e.height-=a,e.depth+=a},"centerSpan"),G4e=o(function(e,r,n,i,a,s){var l=Ie.makeSymbol(e,"Main-Regular",a,i),u=FC(l,r,i,s);return n&&a$(u,i,r),u},"makeSmallDelim"),$4e=o(function(e,r,n,i){return Ie.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),s$=o(function(e,r,n,i,a,s){var l=$4e(e,r,a,i),u=FC(Ie.makeSpan(["delimsizing","size"+r],[l],i),rr.TEXT,i,s);return n&&a$(u,i,rr.TEXT),u},"makeLargeDelim"),uC=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Ie.makeSpan(["delimsizinginner",i],[Ie.makeSpan([],[Ie.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),hC=o(function(e,r,n){var i=Zl["Size4-Regular"][e.charCodeAt(0)]?Zl["Size4-Regular"][e.charCodeAt(0)][4]:Zl["Size1-Regular"][e.charCodeAt(0)][4],a=new Jl("inner",jbe(e,Math.round(1e3*r))),s=new fl([a],{width:mt(i),height:mt(r),style:"width:"+mt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Ie.makeSvgSpan([],[s],n);return l.height=r,l.style.height=mt(r),l.style.width=mt(i),{type:"elem",elem:l}},"makeInner"),AC=.008,a4={type:"kern",size:-1*AC},V4e=["|","\\lvert","\\rvert","\\vert"],U4e=["\\|","\\lVert","\\rVert","\\Vert"],o$=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(V4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(U4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=K1(l,m,a),y=g.height+g.depth,v=K1(h,m,a),x=v.height+v.depth,b=K1(f,m,a),w=b.height+b.depth,_=0,T=1;if(u!==null){var E=K1(u,m,a);_=E.height+E.depth,T=2}var L=y+w+_,C=Math.max(0,Math.ceil((r-L)/(T*x))),A=L+C*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=A/2-I,k=[];if(d.length>0){var R=A-y-w,S=Math.round(A*1e3),O=Kbe(d,Math.round(R*1e3)),N=new Jl(d,O),P=(p/1e3).toFixed(3)+"em",F=(S/1e3).toFixed(3)+"em",B=new fl([N],{width:P,height:F,viewBox:"0 0 "+p+" "+S}),$=Ie.makeSvgSpan([],[B],i);$.height=S/1e3,$.style.width=P,$.style.height=F,k.push({type:"elem",elem:$})}else{if(k.push(uC(f,m,a)),k.push(a4),u===null){var z=A-y-w+2*AC;k.push(hC(h,z,i))}else{var W=(A-y-w-_)/2+2*AC;k.push(hC(h,W,i)),k.push(a4),k.push(uC(u,m,a)),k.push(a4),k.push(hC(h,W,i))}k.push(a4),k.push(uC(l,m,a))}var j=i.havingBaseStyle(rr.TEXT),K=Ie.makeVList({positionType:"bottom",positionData:D,children:k},j);return FC(Ie.makeSpan(["delimsizing","mult"],[K],j),rr.TEXT,i,s)},"makeStackedDelim"),fC=80,dC=.08,pC=o(function(e,r,n,i,a){var s=Xbe(e,i,n),l=new Jl(e,s),u=new fl([l],{width:"400em",height:mt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Ie.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),H4e=o(function(e,r){var n=r.havingBaseSizing(),i=h$("\\surd",e*n.sizeMultiplier,u$,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+fC,e<1?a=1:e<1.4&&(a=.7),u=(1+s+dC)/a,h=(1+s)/a,l=pC("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+fC)*Q1[i.size],h=(Q1[i.size]+s)/a,u=(Q1[i.size]+s+dC)/a,l=pC("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+dC,h=e+s,f=Math.floor(1e3*e+s)+fC,l=pC("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=mt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),l$=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],W4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],c$=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Q1=[0,1.2,1.8,2.4,3],Y4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(l$,e)||Jt.contains(c$,e))return s$(e,r,!1,n,i,a);if(Jt.contains(W4e,e))return o$(e,Q1[r],!1,n,i,a);throw new ut("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),q4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],X4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"stack"}],u$=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],j4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),h$=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),f$=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(c$,e)?l=q4e:Jt.contains(l$,e)?l=u$:l=X4e;var u=h$(e,r,l,i);return u.type==="small"?G4e(e,u.style,n,i,a,s):u.type==="large"?s$(e,u.size,n,i,a,s):o$(e,r,n,i,a,s)},"makeCustomSizedDelim"),K4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return f$(e,d,!0,i,a,s)},"makeLeftRightDelim"),nu={sqrtImage:H4e,sizedDelim:Y4e,sizeToMaxHeight:Q1,customSizedDelim:f$,leftRightDelim:K4e},yG={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Q4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(w4,"checkDelimiter");Ct({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=w4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:yG[t.funcName].size,mclass:yG[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Ie.makeSpan([t.mclass]):nu.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Ao(t.delim,t.mode));var r=new st.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=mt(nu.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(vG,"assertParsed");Ct({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new ut("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:w4(e[0],t).text,color:r}},"handler")});Ct({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=w4(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=yr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{vG(t);for(var r=Ii(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{vG(t);var r=gs(t.body,e);if(t.left!=="."){var n=new st.MathNode("mo",[Ao(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new st.MathNode("mo",[Ao(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return IC(r)},"mathmlBuilder")});Ct({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=w4(e[0],t);if(!t.parser.leftrightDepth)throw new ut("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=ry(e,[]);else{r=nu.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Ao("|","text"):Ao(t.delim,t.mode),n=new st.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});zC=o((t,e)=>{var r=Ie.wrapFragment(Or(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Ie.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=Qn({number:.6,unit:"pt"},e),h=Qn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=mt(d/2+u);var p=Math.floor(1e3*d*i),m=Ybe(p),g=new fl([new Jl("phase",m)],{width:"400em",height:mt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Ie.makeSvgSpan(["hide-tail"],[g],e),a.style.height=mt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=au.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=mt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=mt(x),a.style.borderRightWidth=mt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Ie.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Ie.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Ie.makeSpan(["mord","cancel-lap"],[b],e):Ie.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),GC=o((t,e)=>{var r=0,n=new st.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[mn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Ct({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=yr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:zC,mathmlBuilder:GC});Ct({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=yr(e[0],"color-token").color,s=yr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:zC,mathmlBuilder:GC});Ct({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Ct({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:zC,mathmlBuilder:GC});Ct({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});d$={};o(ec,"defineEnvironment");p$={};o(le,"defineMacro");o(xG,"getHLines");T4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new ut("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o($C,"getAutoTag");o(uh,"parseArray");o(VC,"dCellStyle");tc=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(rr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?Qn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function _(ke){for(var Fe=0;Fe0&&(w+=.25),h.push({pos:w,isDashed:ke[Fe]})}for(o(_,"setHLinePos"),_(s[0]),n=0;n0&&(D+=b,Lke))for(n=0;n=l)){var ee=void 0;(i>0||e.hskipBeforeAndAfter)&&(ee=Jt.deflt(W.pregap,p),ee!==0&&(O=Ie.makeSpan(["arraycolsep"],[]),O.style.width=mt(ee),S.push(O)));var J=[];for(n=0;n0){for(var ae=Ie.makeLineSpan("hline",r,f),ue=Ie.makeLineSpan("hdashline",r,f),ce=[{type:"elem",elem:u,shift:0}];h.length>0;){var te=h.pop(),De=te.pos-k;te.isDashed?ce.push({type:"elem",elem:ue,shift:De}):ce.push({type:"elem",elem:ae,shift:De})}u=Ie.makeVList({positionType:"individualShift",children:ce},r)}if(P.length===0)return Ie.makeSpan(["mord"],[u],r);var oe=Ie.makeVList({positionType:"individualShift",children:P},r);return oe=Ie.makeSpan(["tag"],[oe],r),Ie.makeFragment([u,oe])},"htmlBuilder"),Z4e={c:"center ",l:"left ",r:"right "},rc=o(function(e,r){for(var n=[],i=new st.MathNode("mtd",[],["mtr-glue"]),a=new st.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w0?"left ":"",p+=C[C.length-1].length>0?"right ":"";for(var A=1;A-1?"alignat":"align",a=e.envName==="split",s=uh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:$C(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");ec({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=x4(e[0]),n=r?[e[0]]:yr(e[0],"ordgroup").body,i=n.map(function(s){var l=PC(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new ut("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return uh(t.parser,a,VC(t.envName))},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new ut("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=uh(t.parser,n,VC(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=uh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=x4(e[0]),n=r?[e[0]]:yr(e[0],"ordgroup").body,i=n.map(function(s){var l=PC(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new ut("Unknown column alignment: "+u,s)});if(i.length>1)throw new ut("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=uh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new ut("{subarray} can contain only one column");return a},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=uh(t.parser,e,VC(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:m$,htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&T4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:$C(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return uh(t.parser,e,"display")},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:m$,htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){T4(t);var e={autoTag:$C(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return uh(t.parser,e,"display")},htmlBuilder:tc,mathmlBuilder:rc});ec({type:"array",names:["CD"],props:{numArgs:0},handler(t){return T4(t),F4e(t.parser)},htmlBuilder:tc,mathmlBuilder:rc});le("\\nonumber","\\gdef\\@eqnsw{0}");le("\\notag","\\nonumber");Ct({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new ut(t.funcName+" valid only within array environment")}});bG=d$;Ct({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new ut("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Or(t.body,n)},"htmlBuilder$5"),y$=o((t,e)=>{var r=t.font,n=e.withFont(r);return mn(t.body,n)},"mathmlBuilder$4"),wG={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Ct({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=p4(e[0]),a=n;return a in wG&&(a=wG[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:g$,mathmlBuilder:y$});Ct({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:b4(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Ct({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:g$,mathmlBuilder:y$});v$=o((t,e)=>{var r=e;return t==="display"?r=r.id>=rr.SCRIPT.id?r.text():rr.DISPLAY:t==="text"&&r.size===rr.DISPLAY.size?r=rr.TEXT:t==="script"?r=rr.SCRIPT:t==="scriptscript"&&(r=rr.SCRIPTSCRIPT),r},"adjustStyle"),UC=o((t,e)=>{var r=v$(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Or(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new st.MathNode("mfrac",[mn(t.numer,e),mn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=Qn(t.barSize,e);r.setAttribute("linethickness",mt(n))}var i=v$(t.size,e.style);if(i.size!==e.style.size){r=new st.MathNode("mstyle",[r]);var a=i.size===rr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new st.MathNode("mo",[new st.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new st.MathNode("mo",[new st.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return IC(s)}return r},"mathmlBuilder$3");Ct({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:UC,mathmlBuilder:HC});Ct({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Ct({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});TG=["display","text","script","scriptscript"],kG=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Ct({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=p4(e[0]),s=a.type==="atom"&&a.family==="open"?kG(a.text):null,l=p4(e[1]),u=l.type==="atom"&&l.family==="close"?kG(l.text):null,h=yr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=yr(m.body[0],"textord");p=TG[Number(g.text)]}}else m=yr(m,"textord"),p=TG[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:UC,mathmlBuilder:HC});Ct({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:yr(e[0],"size").value,token:i}}});Ct({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=Nbe(yr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:UC,mathmlBuilder:HC});x$=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Or(t.sup,e.havingStyle(r.sup()),e):Or(t.sub,e.havingStyle(r.sub()),e),i=yr(t.base,"horizBrace")):i=yr(t,"horizBrace");var a=Or(i.base,e.havingBaseStyle(rr.DISPLAY)),s=au.svgSpan(i,e),l;if(i.isOver?(l=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Ie.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Ie.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Ie.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Ie.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),J4e=o((t,e)=>{var r=au.mathMLnode(t.label);return new st.MathNode(t.isOver?"mover":"munder",[mn(t.base,e),r])},"mathmlBuilder$2");Ct({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:x$,mathmlBuilder:J4e});Ct({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=yr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.body,e,!1);return Ie.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ch(t.body,e);return r instanceof ps||(r=new ps("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Ct({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=yr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=yr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Ii(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Ie.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>ch(t.body,e),"mathmlBuilder")});Ct({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.html,e,!1);return Ie.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>ch(t.mathml,e),"mathmlBuilder")});mC=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new ut("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!FG(n))throw new ut("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Ct({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=yr(r[0],"raw").string,h=u.split(","),f=0;f{var r=Qn(t.height,e),n=0;t.totalheight.number>0&&(n=Qn(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=Qn(t.width,e));var a={height:mt(r+n)};i>0&&(a.width=mt(i)),n>0&&(a.verticalAlign=mt(-n));var s=new wC(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new st.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=Qn(t.height,e),i=0;if(t.totalheight.number>0&&(i=Qn(t.totalheight,e)-n,r.setAttribute("valign",mt(-i))),r.setAttribute("height",mt(n+i)),t.width.number>0){var a=Qn(t.width,e);r.setAttribute("width",mt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Ct({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=yr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Ie.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=Qn(t.dimension,e);return new st.SpaceNode(r)}});Ct({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Ie.makeSpan([],[Or(t.body,e)]),r=Ie.makeSpan(["inner"],[r],e)):r=Ie.makeSpan(["inner"],[Or(t.body,e)]);var n=Ie.makeSpan(["fix"],[]),i=Ie.makeSpan([t.alignment],[r,n],e),a=Ie.makeSpan(["strut"]);return a.style.height=mt(i.height+i.depth),i.depth&&(a.style.verticalAlign=mt(-i.depth)),i.children.unshift(a),i=Ie.makeSpan(["thinbox"],[i],e),Ie.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new st.MathNode("mpadded",[mn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Ct({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Ct({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new ut("Mismatched "+t.funcName)}});EG=o((t,e)=>{switch(e.style.size){case rr.DISPLAY.size:return t.display;case rr.TEXT.size:return t.text;case rr.SCRIPT.size:return t.script;case rr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Ct({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=EG(t,e),n=Ii(r,e,!1);return Ie.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=EG(t,e);return ch(r,e)},"mathmlBuilder")});b$=o((t,e,r,n,i,a,s)=>{t=Ie.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Or(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Or(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Ie.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:mt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:mt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Ie.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:mt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Ie.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:mt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Ie.makeSpan(["mspace"],[],n);x.style.marginRight=mt(a),v.unshift(x)}return Ie.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),w$=["\\smallint"],pp=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=yr(t.base,"op"),i=!0):a=yr(t,"op");var s=e.style,l=!1;s.size===rr.DISPLAY.size&&a.symbol&&!Jt.contains(w$,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Ie.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Ie.staticSvg(f+"Size"+(l?"2":"1"),e);u=Ie.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Ii(a.body,e,!0);m.length===1&&m[0]instanceof ms?(u=m[0],u.classes[0]="mop"):u=Ie.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ps("mo",[Ao(t.name,t.mode)]),Jt.contains(w$,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ps("mo",gs(t.body,e));else{r=new ps("mi",[new Wf(t.name.slice(1))]);var n=new ps("mo",[Ao("\u2061","text")]);t.parentIsSupSub?r=new ps("mrow",[r,n]):r=jG([r,n])}return r},"mathmlBuilder$1"),e3e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Ct({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=e3e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:pp,mathmlBuilder:ny});Ct({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:pp,mathmlBuilder:ny});t3e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Ct({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pp,mathmlBuilder:ny});Ct({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pp,mathmlBuilder:ny});Ct({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=t3e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:pp,mathmlBuilder:ny});T$=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=yr(t.base,"operatorname"),i=!0):a=yr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Ii(l,e.withFont("mathrm"),!0),h=0;h{for(var r=gs(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new st.TextNode(l)]}var u=new st.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new st.MathNode("mo",[Ao("\u2061","text")]);return t.parentIsSupSub?new st.MathNode("mrow",[u,h]):st.newDocumentFragment([u,h])},"mathmlBuilder");Ct({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:T$,mathmlBuilder:r3e});le("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");Xf({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Ie.makeFragment(Ii(t.body,e,!1)):Ie.makeSpan(["mord"],Ii(t.body,e,!0),e)},mathmlBuilder(t,e){return ch(t.body,e,!0)}});Ct({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Or(t.body,e.havingCrampedStyle()),n=Ie.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Ie.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new st.MathNode("mo",[new st.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new st.MathNode("mover",[mn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Ct({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.body,e.withPhantom(),!1);return Ie.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=gs(t.body,e);return new st.MathNode("mphantom",r)},"mathmlBuilder")});Ct({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Ie.makeSpan([],[Or(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=gs(di(t.body),e),n=new st.MathNode("mphantom",r),i=new st.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Ct({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Ie.makeSpan(["inner"],[Or(t.body,e.withPhantom())]),n=Ie.makeSpan(["fix"],[]);return Ie.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=gs(di(t.body),e),n=new st.MathNode("mphantom",r),i=new st.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Ct({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=yr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Or(t.body,e),n=Qn(t.dy,e);return Ie.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new st.MathNode("mpadded",[mn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Ct({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Ct({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=yr(e[0],"size"),s=yr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&yr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Ie.makeSpan(["mord","rule"],[],e),n=Qn(t.width,e),i=Qn(t.height,e),a=t.shift?Qn(t.shift,e):0;return r.style.borderRightWidth=mt(n),r.style.borderTopWidth=mt(i),r.style.bottom=mt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=Qn(t.width,e),n=Qn(t.height,e),i=t.shift?Qn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new st.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",mt(r)),s.setAttribute("height",mt(n));var l=new st.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",mt(i)):(l.setAttribute("height",mt(i)),l.setAttribute("depth",mt(-i))),l.setAttribute("voffset",mt(i)),l}});o(k$,"sizingGroup");SG=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],n3e=o((t,e)=>{var r=e.havingSize(t.size);return k$(t.body,r,e)},"htmlBuilder");Ct({type:"sizing",names:SG,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:SG.indexOf(n)+1,body:a}},"handler"),htmlBuilder:n3e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=gs(t.body,r),i=new st.MathNode("mstyle",n);return i.setAttribute("mathsize",mt(r.sizeMultiplier)),i},"mathmlBuilder")});Ct({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&yr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Ie.makeSpan([],[Or(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new st.MathNode("mpadded",[mn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Ct({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Or(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Ie.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=mt(f);var m=Ie.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(rr.SCRIPTSCRIPT),y=Or(t.index,g,e),v=.6*(m.height-m.depth),x=Ie.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Ie.makeSpan(["root"],[x]);return Ie.makeSpan(["mord","sqrt"],[b,m],e)}else return Ie.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new st.MathNode("mroot",[mn(r,e),mn(n,e)]):new st.MathNode("msqrt",[mn(r,e)])}});CG={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT};Ct({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=CG[t.style],n=e.havingStyle(r).withFont("");return k$(t.body,n,e)},mathmlBuilder(t,e){var r=CG[t.style],n=e.havingStyle(r),i=gs(t.body,n),a=new st.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});i3e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===rr.DISPLAY.size||n.alwaysHandleSupSub);return i?pp:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===rr.DISPLAY.size||n.limits);return a?T$:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?BC:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?x$:null}else return null}else return null},"htmlBuilderDelegate");Xf({type:"supsub",htmlBuilder(t,e){var r=i3e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Or(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Or(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Or(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===rr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=mt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof ms||w)&&(b=mt(-s.italic))}var _;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)0&&(f+=L,d-=L)}var C=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];_=Ie.makeVList({positionType:"individualShift",children:C},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var A=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];_=Ie.makeVList({positionType:"shift",positionData:d,children:A},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),_=Ie.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=kC(s,"right")||"mord";return Ie.makeSpan([I],[s,Ie.makeSpan(["msupsub"],[_])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[mn(t.base,e)];t.sub&&a.push(mn(t.sub,e)),t.sup&&a.push(mn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===rr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===rr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===rr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===rr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===rr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===rr.DISPLAY)?s="mover":s="msup"}return new st.MathNode(s,a)}});Xf({type:"atom",htmlBuilder(t,e){return Ie.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new st.MathNode("mo",[Ao(t.text,t.mode)]);if(t.family==="bin"){var n=OC(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});E$={mi:"italic",mn:"normal",mtext:"normal"};Xf({type:"mathord",htmlBuilder(t,e){return Ie.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new st.MathNode("mi",[Ao(t.text,t.mode,e)]),n=OC(t,e)||"italic";return n!==E$[r.type]&&r.setAttribute("mathvariant",n),r}});Xf({type:"textord",htmlBuilder(t,e){return Ie.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Ao(t.text,t.mode,e),n=OC(t,e)||"normal",i;return t.mode==="text"?i=new st.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new st.MathNode("mn",[r]):t.text==="\\prime"?i=new st.MathNode("mo",[r]):i=new st.MathNode("mi",[r]),n!==E$[i.type]&&i.setAttribute("mathvariant",n),i}});gC={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},yC={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Xf({type:"spacing",htmlBuilder(t,e){if(yC.hasOwnProperty(t.text)){var r=yC[t.text].className||"";if(t.mode==="text"){var n=Ie.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Ie.makeSpan(["mspace",r],[Ie.mathsym(t.text,t.mode,e)],e)}else{if(gC.hasOwnProperty(t.text))return Ie.makeSpan(["mspace",gC[t.text]],[],e);throw new ut('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(yC.hasOwnProperty(t.text))r=new st.MathNode("mtext",[new st.TextNode("\xA0")]);else{if(gC.hasOwnProperty(t.text))return new st.MathNode("mspace");throw new ut('Unknown type of space "'+t.text+'"')}return r}});AG=o(()=>{var t=new st.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");Xf({type:"tag",mathmlBuilder(t,e){var r=new st.MathNode("mtable",[new st.MathNode("mtr",[AG(),new st.MathNode("mtd",[ch(t.body,e)]),AG(),new st.MathNode("mtd",[ch(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});_G={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},LG={"\\textbf":"textbf","\\textmd":"textmd"},a3e={"\\textit":"textit","\\textup":"textup"},DG=o((t,e)=>{var r=t.font;if(r){if(_G[r])return e.withTextFontFamily(_G[r]);if(LG[r])return e.withTextFontWeight(LG[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(a3e[r])},"optionsWithFont");Ct({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=DG(t,e),n=Ii(t.body,r,!0);return Ie.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=DG(t,e);return ch(t.body,r)}});Ct({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Or(t.body,e),n=Ie.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Ie.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Ie.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new st.MathNode("mo",[new st.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new st.MathNode("munder",[mn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Ct({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Or(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Ie.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new st.MathNode("mpadded",[mn(t.body,e)],["vcenter"])}});Ct({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new ut("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=NG(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),oh=qG,S$=`[ \r + ]`,s3e="\\\\[a-zA-Z@]+",o3e="\\\\[^\uD800-\uDFFF]",l3e="("+s3e+")"+S$+"*",c3e=`\\\\( +|[ \r ]+ +?)[ \r ]*`,_C="[\u0300-\u036F]",u3e=new RegExp(_C+"+$"),h3e="("+S$+"+)|"+(c3e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(_C+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(_C+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+l3e)+("|"+o3e+")"),m4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(h3e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Co("EOF",new Ys(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new ut("Unexpected character: '"+e[r]+"'",new Co(e[r],new Ys(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Co(i,new Ys(this,r,this.tokenRegex.lastIndex))}},LC=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new ut("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},f3e=p$;le("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});le("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});le("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});le("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});le("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});le("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");le("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});RG={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};le("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new ut("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=RG[e.text],n==null||n>=r)throw new ut("Invalid base-"+r+" digit "+e.text);for(var i;(i=RG[t.future().text])!=null&&i{var n=t.consumeArg().tokens;if(n.length!==1)throw new ut("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new ut("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new ut("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new ut("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");le("\\newcommand",t=>WC(t,!1,!0));le("\\renewcommand",t=>WC(t,!0,!1));le("\\providecommand",t=>WC(t,!0,!0));le("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});le("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});le("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),oh[r],En.math[r],En.text[r]),""});le("\\bgroup","{");le("\\egroup","}");le("~","\\nobreakspace");le("\\lq","`");le("\\rq","'");le("\\aa","\\r a");le("\\AA","\\r A");le("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");le("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");le("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");le("\u212C","\\mathscr{B}");le("\u2130","\\mathscr{E}");le("\u2131","\\mathscr{F}");le("\u210B","\\mathscr{H}");le("\u2110","\\mathscr{I}");le("\u2112","\\mathscr{L}");le("\u2133","\\mathscr{M}");le("\u211B","\\mathscr{R}");le("\u212D","\\mathfrak{C}");le("\u210C","\\mathfrak{H}");le("\u2128","\\mathfrak{Z}");le("\\Bbbk","\\Bbb{k}");le("\xB7","\\cdotp");le("\\llap","\\mathllap{\\textrm{#1}}");le("\\rlap","\\mathrlap{\\textrm{#1}}");le("\\clap","\\mathclap{\\textrm{#1}}");le("\\mathstrut","\\vphantom{(}");le("\\underbar","\\underline{\\text{#1}}");le("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');le("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");le("\\ne","\\neq");le("\u2260","\\neq");le("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");le("\u2209","\\notin");le("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");le("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");le("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");le("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");le("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");le("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");le("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");le("\u27C2","\\perp");le("\u203C","\\mathclose{!\\mkern-0.8mu!}");le("\u220C","\\notni");le("\u231C","\\ulcorner");le("\u231D","\\urcorner");le("\u231E","\\llcorner");le("\u231F","\\lrcorner");le("\xA9","\\copyright");le("\xAE","\\textregistered");le("\uFE0F","\\textregistered");le("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');le("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');le("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');le("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');le("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");le("\u22EE","\\vdots");le("\\varGamma","\\mathit{\\Gamma}");le("\\varDelta","\\mathit{\\Delta}");le("\\varTheta","\\mathit{\\Theta}");le("\\varLambda","\\mathit{\\Lambda}");le("\\varXi","\\mathit{\\Xi}");le("\\varPi","\\mathit{\\Pi}");le("\\varSigma","\\mathit{\\Sigma}");le("\\varUpsilon","\\mathit{\\Upsilon}");le("\\varPhi","\\mathit{\\Phi}");le("\\varPsi","\\mathit{\\Psi}");le("\\varOmega","\\mathit{\\Omega}");le("\\substack","\\begin{subarray}{c}#1\\end{subarray}");le("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");le("\\boxed","\\fbox{$\\displaystyle{#1}$}");le("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");le("\\implies","\\DOTSB\\;\\Longrightarrow\\;");le("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");MG={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};le("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in MG?e=MG[r]:(r.slice(0,4)==="\\not"||r in En.math&&Jt.contains(["bin","rel"],En.math[r].group))&&(e="\\dotsb"),e});YC={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};le("\\dotso",function(t){var e=t.future().text;return e in YC?"\\ldots\\,":"\\ldots"});le("\\dotsc",function(t){var e=t.future().text;return e in YC&&e!==","?"\\ldots\\,":"\\ldots"});le("\\cdots",function(t){var e=t.future().text;return e in YC?"\\@cdots\\,":"\\@cdots"});le("\\dotsb","\\cdots");le("\\dotsm","\\cdots");le("\\dotsi","\\!\\cdots");le("\\dotsx","\\ldots\\,");le("\\DOTSI","\\relax");le("\\DOTSB","\\relax");le("\\DOTSX","\\relax");le("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");le("\\,","\\tmspace+{3mu}{.1667em}");le("\\thinspace","\\,");le("\\>","\\mskip{4mu}");le("\\:","\\tmspace+{4mu}{.2222em}");le("\\medspace","\\:");le("\\;","\\tmspace+{5mu}{.2777em}");le("\\thickspace","\\;");le("\\!","\\tmspace-{3mu}{.1667em}");le("\\negthinspace","\\!");le("\\negmedspace","\\tmspace-{4mu}{.2222em}");le("\\negthickspace","\\tmspace-{5mu}{.277em}");le("\\enspace","\\kern.5em ");le("\\enskip","\\hskip.5em\\relax");le("\\quad","\\hskip1em\\relax");le("\\qquad","\\hskip2em\\relax");le("\\tag","\\@ifstar\\tag@literal\\tag@paren");le("\\tag@paren","\\tag@literal{({#1})}");le("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new ut("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});le("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");le("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");le("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");le("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");le("\\newline","\\\\\\relax");le("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");C$=mt(Zl["Main-Regular"][84][1]-.7*Zl["Main-Regular"][65][1]);le("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+C$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");le("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+C$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");le("\\hspace","\\@ifstar\\@hspacer\\@hspace");le("\\@hspace","\\hskip #1\\relax");le("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");le("\\ordinarycolon",":");le("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");le("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');le("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');le("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');le("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');le("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');le("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');le("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');le("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');le("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');le("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');le("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');le("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');le("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');le("\u2237","\\dblcolon");le("\u2239","\\eqcolon");le("\u2254","\\coloneqq");le("\u2255","\\eqqcolon");le("\u2A74","\\Coloneqq");le("\\ratio","\\vcentcolon");le("\\coloncolon","\\dblcolon");le("\\colonequals","\\coloneqq");le("\\coloncolonequals","\\Coloneqq");le("\\equalscolon","\\eqqcolon");le("\\equalscoloncolon","\\Eqqcolon");le("\\colonminus","\\coloneq");le("\\coloncolonminus","\\Coloneq");le("\\minuscolon","\\eqcolon");le("\\minuscoloncolon","\\Eqcolon");le("\\coloncolonapprox","\\Colonapprox");le("\\coloncolonsim","\\Colonsim");le("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");le("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");le("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");le("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");le("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");le("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");le("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");le("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");le("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");le("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");le("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");le("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");le("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");le("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");le("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");le("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");le("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");le("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");le("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");le("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");le("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");le("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");le("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");le("\\imath","\\html@mathml{\\@imath}{\u0131}");le("\\jmath","\\html@mathml{\\@jmath}{\u0237}");le("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");le("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");le("\u27E6","\\llbracket");le("\u27E7","\\rrbracket");le("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");le("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");le("\u2983","\\lBrace");le("\u2984","\\rBrace");le("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");le("\u29B5","\\minuso");le("\\darr","\\downarrow");le("\\dArr","\\Downarrow");le("\\Darr","\\Downarrow");le("\\lang","\\langle");le("\\rang","\\rangle");le("\\uarr","\\uparrow");le("\\uArr","\\Uparrow");le("\\Uarr","\\Uparrow");le("\\N","\\mathbb{N}");le("\\R","\\mathbb{R}");le("\\Z","\\mathbb{Z}");le("\\alef","\\aleph");le("\\alefsym","\\aleph");le("\\Alpha","\\mathrm{A}");le("\\Beta","\\mathrm{B}");le("\\bull","\\bullet");le("\\Chi","\\mathrm{X}");le("\\clubs","\\clubsuit");le("\\cnums","\\mathbb{C}");le("\\Complex","\\mathbb{C}");le("\\Dagger","\\ddagger");le("\\diamonds","\\diamondsuit");le("\\empty","\\emptyset");le("\\Epsilon","\\mathrm{E}");le("\\Eta","\\mathrm{H}");le("\\exist","\\exists");le("\\harr","\\leftrightarrow");le("\\hArr","\\Leftrightarrow");le("\\Harr","\\Leftrightarrow");le("\\hearts","\\heartsuit");le("\\image","\\Im");le("\\infin","\\infty");le("\\Iota","\\mathrm{I}");le("\\isin","\\in");le("\\Kappa","\\mathrm{K}");le("\\larr","\\leftarrow");le("\\lArr","\\Leftarrow");le("\\Larr","\\Leftarrow");le("\\lrarr","\\leftrightarrow");le("\\lrArr","\\Leftrightarrow");le("\\Lrarr","\\Leftrightarrow");le("\\Mu","\\mathrm{M}");le("\\natnums","\\mathbb{N}");le("\\Nu","\\mathrm{N}");le("\\Omicron","\\mathrm{O}");le("\\plusmn","\\pm");le("\\rarr","\\rightarrow");le("\\rArr","\\Rightarrow");le("\\Rarr","\\Rightarrow");le("\\real","\\Re");le("\\reals","\\mathbb{R}");le("\\Reals","\\mathbb{R}");le("\\Rho","\\mathrm{P}");le("\\sdot","\\cdot");le("\\sect","\\S");le("\\spades","\\spadesuit");le("\\sub","\\subset");le("\\sube","\\subseteq");le("\\supe","\\supseteq");le("\\Tau","\\mathrm{T}");le("\\thetasym","\\vartheta");le("\\weierp","\\wp");le("\\Zeta","\\mathrm{Z}");le("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");le("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");le("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");le("\\bra","\\mathinner{\\langle{#1}|}");le("\\ket","\\mathinner{|{#1}\\rangle}");le("\\braket","\\mathinner{\\langle{#1}\\rangle}");le("\\Bra","\\left\\langle#1\\right|");le("\\Ket","\\left|#1\\right\\rangle");A$=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");le("\\bra@ket",A$(!1));le("\\bra@set",A$(!0));le("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");le("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");le("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");le("\\angln","{\\angl n}");le("\\blue","\\textcolor{##6495ed}{#1}");le("\\orange","\\textcolor{##ffa500}{#1}");le("\\pink","\\textcolor{##ff00af}{#1}");le("\\red","\\textcolor{##df0030}{#1}");le("\\green","\\textcolor{##28ae7b}{#1}");le("\\gray","\\textcolor{gray}{#1}");le("\\purple","\\textcolor{##9d38bd}{#1}");le("\\blueA","\\textcolor{##ccfaff}{#1}");le("\\blueB","\\textcolor{##80f6ff}{#1}");le("\\blueC","\\textcolor{##63d9ea}{#1}");le("\\blueD","\\textcolor{##11accd}{#1}");le("\\blueE","\\textcolor{##0c7f99}{#1}");le("\\tealA","\\textcolor{##94fff5}{#1}");le("\\tealB","\\textcolor{##26edd5}{#1}");le("\\tealC","\\textcolor{##01d1c1}{#1}");le("\\tealD","\\textcolor{##01a995}{#1}");le("\\tealE","\\textcolor{##208170}{#1}");le("\\greenA","\\textcolor{##b6ffb0}{#1}");le("\\greenB","\\textcolor{##8af281}{#1}");le("\\greenC","\\textcolor{##74cf70}{#1}");le("\\greenD","\\textcolor{##1fab54}{#1}");le("\\greenE","\\textcolor{##0d923f}{#1}");le("\\goldA","\\textcolor{##ffd0a9}{#1}");le("\\goldB","\\textcolor{##ffbb71}{#1}");le("\\goldC","\\textcolor{##ff9c39}{#1}");le("\\goldD","\\textcolor{##e07d10}{#1}");le("\\goldE","\\textcolor{##a75a05}{#1}");le("\\redA","\\textcolor{##fca9a9}{#1}");le("\\redB","\\textcolor{##ff8482}{#1}");le("\\redC","\\textcolor{##f9685d}{#1}");le("\\redD","\\textcolor{##e84d39}{#1}");le("\\redE","\\textcolor{##bc2612}{#1}");le("\\maroonA","\\textcolor{##ffbde0}{#1}");le("\\maroonB","\\textcolor{##ff92c6}{#1}");le("\\maroonC","\\textcolor{##ed5fa6}{#1}");le("\\maroonD","\\textcolor{##ca337c}{#1}");le("\\maroonE","\\textcolor{##9e034e}{#1}");le("\\purpleA","\\textcolor{##ddd7ff}{#1}");le("\\purpleB","\\textcolor{##c6b9fc}{#1}");le("\\purpleC","\\textcolor{##aa87ff}{#1}");le("\\purpleD","\\textcolor{##7854ab}{#1}");le("\\purpleE","\\textcolor{##543b78}{#1}");le("\\mintA","\\textcolor{##f5f9e8}{#1}");le("\\mintB","\\textcolor{##edf2df}{#1}");le("\\mintC","\\textcolor{##e0e5cc}{#1}");le("\\grayA","\\textcolor{##f6f7f7}{#1}");le("\\grayB","\\textcolor{##f0f1f2}{#1}");le("\\grayC","\\textcolor{##e3e5e6}{#1}");le("\\grayD","\\textcolor{##d6d8da}{#1}");le("\\grayE","\\textcolor{##babec2}{#1}");le("\\grayF","\\textcolor{##888d93}{#1}");le("\\grayG","\\textcolor{##626569}{#1}");le("\\grayH","\\textcolor{##3b3e40}{#1}");le("\\grayI","\\textcolor{##21242c}{#1}");le("\\kaBlue","\\textcolor{##314453}{#1}");le("\\kaGreen","\\textcolor{##71B307}{#1}");_$={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},DC=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new LC(f3e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new m4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Co("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new ut("Extra }",a)}else if(a.text==="EOF")throw new ut("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new ut("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new ut("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new ut("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new ut("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new ut("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Co(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new m4(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||oh.hasOwnProperty(e)||En.math.hasOwnProperty(e)||En.text.hasOwnProperty(e)||_$.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:oh.hasOwnProperty(e)&&!oh[e].primitive}},IG=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,s4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),vC={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},OG={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},g4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new DC(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new ut("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Co("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&oh[i.text]&&oh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=En[this.mode][r].group,u=Ys.range(e),h;if(n4e.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(BG(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Ys.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),ah.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var jf,y3e,v3e,O$,M$,Tr,b3e,w3e,T3e,k3e,P$,E3e,xr,S3e,C3e,ou,jC,A3e,_3e,I$,KC,pi,Kf,hh,je,fr=M(()=>{"use strict";sC();jf=//gi,y3e=o(t=>t?P$(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),v3e=(()=>{let t=!1;return()=>{t||(x3e(),t=!0)}})();o(x3e,"setupDompurifyHooks");O$=o(t=>(v3e(),ah.sanitize(t)),"removeScript"),M$=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=O$(t):r!=="loose"&&(t=P$(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=k3e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=ah.sanitize(M$(t,e),e.dompurifyConfig).toString():t=ah.sanitize(M$(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),b3e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),w3e=o(t=>jf.test(t),"hasBreaks"),T3e=o(t=>t.split(jf),"splitBreaks"),k3e=o(t=>t.replace(/#br#/g,"
    "),"placeholderToBreak"),P$=o(t=>t.replace(jf,"#br#"),"breakToPlaceholder"),E3e=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),xr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),S3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),C3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ou=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),A3e=o((t,e)=>{let r=jC(t,"~"),n=jC(e,"~");return r===1&&n===1},"shouldCombineSets"),_3e=o(t=>{let e=jC(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),I$=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),KC=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(KC)?.length??0)>0,"hasKatex"),Kf=o(async(t,e)=>{t=await hh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),hh=o(async(t,e)=>{if(!pi(t))return t;if(!(I$()||e.legacyMathML||e.forceLegacyMathML))return t.replace(KC,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(R$(),N$)),n=e.forceLegacyMathML||!I$()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(jf).map(i=>pi(i)?`

    `:`
    ${i}
    `).join("").replace(KC,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))},"renderKatex"),je={getRows:y3e,sanitizeText:Tr,sanitizeTextOrArray:b3e,hasBreaks:w3e,splitBreaks:T3e,lineBreakRegex:jf,removeScript:O$,getUrl:E3e,evaluate:xr,getMax:S3e,getMin:C3e}});var L3e,D3e,Zr,_o,ni=M(()=>{"use strict";ht();L3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),D3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Zr=o(function(t,e,r,n){let i=D3e(e,r,n);L3e(t,i)},"configureSvgSize"),_o=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),Zr(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var k4,N3e,B$,F$,QC=M(()=>{"use strict";ht();k4={},N3e=o((t,e,r)=>{let n="";return t in k4&&k4[t]?n=k4[t](r):Y.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + + ${e} +`},"getStyles"),B$=o((t,e)=>{e!==void 0&&(k4[t]=e)},"addStylesForDiagram"),F$=N3e});var iy={};vr(iy,{clear:()=>_r,getAccDescription:()=>Fr,getAccTitle:()=>Pr,getDiagramTitle:()=>Jr,setAccDescription:()=>Br,setAccTitle:()=>Rr,setDiagramTitle:()=>ln});var ZC,JC,e7,t7,_r,Rr,Pr,Br,Fr,ln,Jr,ki=M(()=>{"use strict";fr();Ua();ZC="",JC="",e7="",t7=o(t=>Tr(t,Sr()),"sanitizeText"),_r=o(()=>{ZC="",e7="",JC=""},"clear"),Rr=o(t=>{ZC=t7(t).replace(/^\s+/g,"")},"setAccTitle"),Pr=o(()=>ZC,"getAccTitle"),Br=o(t=>{e7=t7(t).replace(/\n\s+/g,` +`)},"setAccDescription"),Fr=o(()=>e7,"getAccDescription"),ln=o(t=>{JC=t7(t)},"setDiagramTitle"),Jr=o(()=>JC,"getDiagramTitle")});var z$,R3e,de,n7,S4,i7,a7,M3e,E4,Qf,ay,r7,Vt=M(()=>{"use strict";$f();ht();Ua();fr();ni();QC();ki();z$=Y,R3e=M1,de=Sr,n7=Yb,S4=ih,i7=o(t=>Tr(t,de()),"sanitizeText"),a7=_o,M3e=o(()=>iy,"getCommonDb"),E4={},Qf=o((t,e,r)=>{E4[t]&&z$.warn(`Diagram with id ${t} already registered. Overwriting.`),E4[t]=e,r&&OS(t,r),B$(t,e.styles),e.injectUtils?.(z$,R3e,de,i7,a7,M3e(),()=>{})},"registerDiagram"),ay=o(t=>{if(t in E4)return E4[t];throw new r7(t)},"getDiagram"),r7=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var pl,fh,Xa,dl,nc,sy,s7,o7,C4,A4,G$,I3e,O3e,P3e,B3e,F3e,z3e,G3e,$3e,V3e,U3e,H3e,W3e,Y3e,q3e,X3e,j3e,K3e,$$,Q3e,Z3e,V$,J3e,e5e,t5e,r5e,dh,n5e,i5e,a5e,s5e,o5e,oy,l7=M(()=>{"use strict";Vt();fr();ki();pl=[],fh=[""],Xa="global",dl="",nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],sy=[],s7="",o7=!1,C4=4,A4=2,I3e=o(function(){return G$},"getC4Type"),O3e=o(function(t){G$=Tr(t,de())},"setC4Type"),P3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=sy.find(d=>d.from===e&&d.to===r);if(f?h=f:sy.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=dh()},"addRel"),B3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=pl.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,pl.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Xa,l.wrap=dh()},"addPersonOrSystem"),F3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=pl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,pl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=dh(),u.typeC4Shape={text:t},u.parentBoundary=Xa},"addContainer"),z3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=pl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,pl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=dh(),u.typeC4Shape={text:t},u.parentBoundary=Xa},"addComponent"),G3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Xa,a.wrap=dh(),dl=Xa,Xa=t,fh.push(dl)},"addPersonOrSystemBoundary"),$3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Xa,a.wrap=dh(),dl=Xa,Xa=t,fh.push(dl)},"addContainerBoundary"),V3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=nc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,nc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Xa,u.wrap=dh(),dl=Xa,Xa=e,fh.push(dl)},"addDeploymentNode"),U3e=o(function(){Xa=dl,fh.pop(),dl=fh.pop(),fh.push(dl)},"popBoundaryParseStack"),H3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=pl.find(p=>p.alias===e);if(!(d===void 0&&(d=nc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),W3e=o(function(t,e,r,n,i,a,s){let l=sy.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),Y3e=o(function(t,e,r){let n=C4,i=A4;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(C4=n),i>=1&&(A4=i)},"updateLayoutConfig"),q3e=o(function(){return C4},"getC4ShapeInRow"),X3e=o(function(){return A4},"getC4BoundaryInRow"),j3e=o(function(){return Xa},"getCurrentBoundaryParse"),K3e=o(function(){return dl},"getParentBoundaryParse"),$$=o(function(t){return t==null?pl:pl.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),Q3e=o(function(t){return pl.find(e=>e.alias===t)},"getC4Shape"),Z3e=o(function(t){return Object.keys($$(t))},"getC4ShapeKeys"),V$=o(function(t){return t==null?nc:nc.filter(e=>e.parentBoundary===t)},"getBoundaries"),J3e=V$,e5e=o(function(){return sy},"getRels"),t5e=o(function(){return s7},"getTitle"),r5e=o(function(t){o7=t},"setWrap"),dh=o(function(){return o7},"autoWrap"),n5e=o(function(){pl=[],nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],dl="",Xa="global",fh=[""],sy=[],fh=[""],s7="",o7=!1,C4=4,A4=2},"clear"),i5e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},a5e={FILLED:0,OPEN:1},s5e={LEFTOF:0,RIGHTOF:1,OVER:2},o5e=o(function(t){s7=Tr(t,de())},"setTitle"),oy={addPersonOrSystem:B3e,addPersonOrSystemBoundary:G3e,addContainer:F3e,addContainerBoundary:$3e,addComponent:z3e,addDeploymentNode:V3e,popBoundaryParseStack:U3e,addRel:P3e,updateElStyle:H3e,updateRelStyle:W3e,updateLayoutConfig:Y3e,autoWrap:dh,setWrap:r5e,getC4ShapeArray:$$,getC4Shape:Q3e,getC4ShapeKeys:Z3e,getBoundaries:V$,getBoundarys:J3e,getCurrentBoundaryParse:j3e,getParentBoundaryParse:K3e,getRels:e5e,getTitle:t5e,getC4Type:I3e,getC4ShapeInRow:q3e,getC4BoundaryInRow:X3e,setAccTitle:Rr,getAccTitle:Pr,getAccDescription:Fr,setAccDescription:Br,getConfig:o(()=>de().c4,"getConfig"),clear:n5e,LINETYPE:i5e,ARROWTYPE:a5e,PLACEMENT:s5e,setTitle:o5e,setC4Type:O3e}});function Zf(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var c7=M(()=>{"use strict";o(Zf,"ascending")});function u7(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var U$=M(()=>{"use strict";o(u7,"descending")});function Jf(t){let e,r,n;t.length!==2?(e=Zf,r=o((l,u)=>Zf(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===Zf||t===u7?t:l5e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function l5e(){return 0}var h7=M(()=>{"use strict";c7();U$();o(Jf,"bisector");o(l5e,"zero")});function f7(t){return t===null?NaN:+t}var H$=M(()=>{"use strict";o(f7,"number")});var W$,Y$,c5e,u5e,d7,q$=M(()=>{"use strict";c7();h7();H$();W$=Jf(Zf),Y$=W$.right,c5e=W$.left,u5e=Jf(f7).center,d7=Y$});function X$({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function h5e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function f5e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function d5e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var mp,j$=M(()=>{"use strict";mp=class extends Map{static{o(this,"InternMap")}constructor(e,r=d5e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(X$(this,e))}has(e){return super.has(X$(this,e))}set(e,r){return super.set(h5e(this,e),r)}delete(e){return super.delete(f5e(this,e))}};o(X$,"intern_get");o(h5e,"intern_set");o(f5e,"intern_delete");o(d5e,"keyof")});function _4(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=p5e?10:a>=m5e?5:a>=g5e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";p5e=Math.sqrt(50),m5e=Math.sqrt(10),g5e=Math.sqrt(2);o(_4,"tickSpec");o(L4,"ticks");o(ly,"tickIncrement");o(gp,"tickStep")});function D4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var Q$=M(()=>{"use strict";o(D4,"max")});function N4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var Z$=M(()=>{"use strict";o(N4,"min")});function R4(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(R4,"range")});var ph=M(()=>{"use strict";q$();h7();Q$();Z$();J$();K$();j$()});function p7(t){return t}var eV=M(()=>{"use strict";o(p7,"default")});function y5e(t){return"translate("+t+",0)"}function v5e(t){return"translate(0,"+t+")"}function x5e(t){return e=>+t(e)}function b5e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function w5e(){return!this.__axis}function rV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===I4||t===M4?-1:1,f=t===M4||t===m7?"x":"y",d=t===I4||t===g7?y5e:v5e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):p7),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,_=(e.bandwidth?b5e:x5e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),L=T.selectAll(".tick").data(g,e).order(),C=L.exit(),A=L.enter().append("g").attr("class","tick"),I=L.select("line"),D=L.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),L=L.merge(A),I=I.merge(A.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(A.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===I4?"0em":t===g7?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),L=L.transition(m),I=I.transition(m),D=D.transition(m),C=C.transition(m).attr("opacity",tV).attr("transform",function(k){return isFinite(k=_(k))?d(k+u):this.getAttribute("transform")}),A.attr("opacity",tV).attr("transform",function(k){var R=this.parentNode.__axis;return d((R&&isFinite(R=R(k))?R:_(k))+u)})),C.remove(),E.attr("d",t===M4||t===m7?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),L.attr("opacity",1).attr("transform",function(k){return d(_(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(w5e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===m7?"start":t===M4?"end":"middle"),T.each(function(){this.__axis=_})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function y7(t){return rV(I4,t)}function v7(t){return rV(g7,t)}var I4,m7,g7,M4,tV,nV=M(()=>{"use strict";eV();I4=1,m7=2,g7=3,M4=4,tV=1e-6;o(y5e,"translateX");o(v5e,"translateY");o(x5e,"number");o(b5e,"center");o(w5e,"entering");o(rV,"axis");o(y7,"axisTop");o(v7,"axisBottom")});var iV=M(()=>{"use strict";nV()});function sV(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function E5e(t,e){for(var r=0,n=t.length,i;r{"use strict";T5e={value:o(()=>{},"value")};o(sV,"dispatch");o(O4,"Dispatch");o(k5e,"parseTypenames");O4.prototype=sV.prototype={constructor:O4,on:o(function(t,e){var r=this._,n=k5e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";oV()});var P4,w7,T7=M(()=>{"use strict";P4="http://www.w3.org/1999/xhtml",w7={svg:"http://www.w3.org/2000/svg",xhtml:P4,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function ic(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),w7.hasOwnProperty(e)?{space:w7[e],local:t}:t}var B4=M(()=>{"use strict";T7();o(ic,"default")});function S5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===P4&&e.documentElement.namespaceURI===P4?e.createElement(t):e.createElementNS(r,t)}}function C5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function cy(t){var e=ic(t);return(e.local?C5e:S5e)(e)}var k7=M(()=>{"use strict";B4();T7();o(S5e,"creatorInherit");o(C5e,"creatorFixed");o(cy,"default")});function A5e(){}function mh(t){return t==null?A5e:function(){return this.querySelector(t)}}var F4=M(()=>{"use strict";o(A5e,"none");o(mh,"default")});function E7(t){typeof t!="function"&&(t=mh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";ml();F4();o(E7,"default")});function S7(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var cV=M(()=>{"use strict";o(S7,"array")});function _5e(){return[]}function yp(t){return t==null?_5e:function(){return this.querySelectorAll(t)}}var C7=M(()=>{"use strict";o(_5e,"empty");o(yp,"default")});function L5e(t){return function(){return S7(t.apply(this,arguments))}}function A7(t){typeof t=="function"?t=L5e(t):t=yp(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";ml();cV();C7();o(L5e,"arrayAll");o(A7,"default")});function vp(t){return function(){return this.matches(t)}}function z4(t){return function(e){return e.matches(t)}}var uy=M(()=>{"use strict";o(vp,"default");o(z4,"childMatcher")});function N5e(t){return function(){return D5e.call(this.children,t)}}function R5e(){return this.firstElementChild}function _7(t){return this.select(t==null?R5e:N5e(typeof t=="function"?t:z4(t)))}var D5e,hV=M(()=>{"use strict";uy();D5e=Array.prototype.find;o(N5e,"childFind");o(R5e,"childFirst");o(_7,"default")});function I5e(){return Array.from(this.children)}function O5e(t){return function(){return M5e.call(this.children,t)}}function L7(t){return this.selectAll(t==null?I5e:O5e(typeof t=="function"?t:z4(t)))}var M5e,fV=M(()=>{"use strict";uy();M5e=Array.prototype.filter;o(I5e,"children");o(O5e,"childrenFilter");o(L7,"default")});function D7(t){typeof t!="function"&&(t=vp(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";ml();uy();o(D7,"default")});function hy(t){return new Array(t.length)}var N7=M(()=>{"use strict";o(hy,"default")});function R7(){return new ii(this._enter||this._groups.map(hy),this._parents)}function fy(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var M7=M(()=>{"use strict";N7();ml();o(R7,"default");o(fy,"EnterNode");fy.prototype={constructor:fy,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function I7(t){return function(){return t}}var pV=M(()=>{"use strict";o(I7,"default")});function P5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=w&&(w=b+1);!(T=v[w])&&++w{"use strict";ml();M7();pV();o(P5e,"bindIndex");o(B5e,"bindKey");o(F5e,"datum");o(O7,"default");o(z5e,"arraylike")});function P7(){return new ii(this._exit||this._groups.map(hy),this._parents)}var gV=M(()=>{"use strict";N7();ml();o(P7,"default")});function B7(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var yV=M(()=>{"use strict";o(B7,"default")});function F7(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";ml();o(F7,"default")});function z7(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var xV=M(()=>{"use strict";o(z7,"default")});function G7(t){t||(t=G5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var bV=M(()=>{"use strict";ml();o(G7,"default");o(G5e,"ascending")});function $7(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var wV=M(()=>{"use strict";o($7,"default")});function V7(){return Array.from(this)}var TV=M(()=>{"use strict";o(V7,"default")});function U7(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(U7,"default")});function H7(){let t=0;for(let e of this)++t;return t}var EV=M(()=>{"use strict";o(H7,"default")});function W7(){return!this.node()}var SV=M(()=>{"use strict";o(W7,"default")});function Y7(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(Y7,"default")});function $5e(t){return function(){this.removeAttribute(t)}}function V5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function U5e(t,e){return function(){this.setAttribute(t,e)}}function H5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function Y5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function q7(t,e){var r=ic(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?V5e:$5e:typeof e=="function"?r.local?Y5e:W5e:r.local?H5e:U5e)(r,e))}var AV=M(()=>{"use strict";B4();o($5e,"attrRemove");o(V5e,"attrRemoveNS");o(U5e,"attrConstant");o(H5e,"attrConstantNS");o(W5e,"attrFunction");o(Y5e,"attrFunctionNS");o(q7,"default")});function dy(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var X7=M(()=>{"use strict";o(dy,"default")});function q5e(t){return function(){this.style.removeProperty(t)}}function X5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function j5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function j7(t,e,r){return arguments.length>1?this.each((e==null?q5e:typeof e=="function"?j5e:X5e)(t,e,r??"")):gh(this.node(),t)}function gh(t,e){return t.style.getPropertyValue(e)||dy(t).getComputedStyle(t,null).getPropertyValue(e)}var K7=M(()=>{"use strict";X7();o(q5e,"styleRemove");o(X5e,"styleConstant");o(j5e,"styleFunction");o(j7,"default");o(gh,"styleValue")});function K5e(t){return function(){delete this[t]}}function Q5e(t,e){return function(){this[t]=e}}function Z5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function Q7(t,e){return arguments.length>1?this.each((e==null?K5e:typeof e=="function"?Z5e:Q5e)(t,e)):this.node()[t]}var _V=M(()=>{"use strict";o(K5e,"propertyRemove");o(Q5e,"propertyConstant");o(Z5e,"propertyFunction");o(Q7,"default")});function LV(t){return t.trim().split(/^|\s+/)}function Z7(t){return t.classList||new DV(t)}function DV(t){this._node=t,this._names=LV(t.getAttribute("class")||"")}function NV(t,e){for(var r=Z7(t),n=-1,i=e.length;++n{"use strict";o(LV,"classArray");o(Z7,"classList");o(DV,"ClassList");DV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(NV,"classedAdd");o(RV,"classedRemove");o(J5e,"classedTrue");o(ewe,"classedFalse");o(twe,"classedFunction");o(J7,"default")});function rwe(){this.textContent=""}function nwe(t){return function(){this.textContent=t}}function iwe(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function eA(t){return arguments.length?this.each(t==null?rwe:(typeof t=="function"?iwe:nwe)(t)):this.node().textContent}var IV=M(()=>{"use strict";o(rwe,"textRemove");o(nwe,"textConstant");o(iwe,"textFunction");o(eA,"default")});function awe(){this.innerHTML=""}function swe(t){return function(){this.innerHTML=t}}function owe(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function tA(t){return arguments.length?this.each(t==null?awe:(typeof t=="function"?owe:swe)(t)):this.node().innerHTML}var OV=M(()=>{"use strict";o(awe,"htmlRemove");o(swe,"htmlConstant");o(owe,"htmlFunction");o(tA,"default")});function lwe(){this.nextSibling&&this.parentNode.appendChild(this)}function rA(){return this.each(lwe)}var PV=M(()=>{"use strict";o(lwe,"raise");o(rA,"default")});function cwe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function nA(){return this.each(cwe)}var BV=M(()=>{"use strict";o(cwe,"lower");o(nA,"default")});function iA(t){var e=typeof t=="function"?t:cy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var FV=M(()=>{"use strict";k7();o(iA,"default")});function uwe(){return null}function aA(t,e){var r=typeof t=="function"?t:cy(t),n=e==null?uwe:typeof e=="function"?e:mh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var zV=M(()=>{"use strict";k7();F4();o(uwe,"constantNull");o(aA,"default")});function hwe(){var t=this.parentNode;t&&t.removeChild(this)}function sA(){return this.each(hwe)}var GV=M(()=>{"use strict";o(hwe,"remove");o(sA,"default")});function fwe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function dwe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oA(t){return this.select(t?dwe:fwe)}var $V=M(()=>{"use strict";o(fwe,"selection_cloneShallow");o(dwe,"selection_cloneDeep");o(oA,"default")});function lA(t){return arguments.length?this.property("__data__",t):this.node().__data__}var VV=M(()=>{"use strict";o(lA,"default")});function pwe(t){return function(e){t.call(this,e,this.__data__)}}function mwe(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function gwe(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(pwe,"contextListener");o(mwe,"parseTypenames");o(gwe,"onRemove");o(ywe,"onAdd");o(cA,"default")});function HV(t,e,r){var n=dy(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function vwe(t,e){return function(){return HV(this,t,e)}}function xwe(t,e){return function(){return HV(this,t,e.apply(this,arguments))}}function uA(t,e){return this.each((typeof e=="function"?xwe:vwe)(t,e))}var WV=M(()=>{"use strict";X7();o(HV,"dispatchEvent");o(vwe,"dispatchConstant");o(xwe,"dispatchFunction");o(uA,"default")});function*hA(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(hA,"default")});function ii(t,e){this._groups=t,this._parents=e}function qV(){return new ii([[document.documentElement]],fA)}function bwe(){return this}var fA,lu,ml=M(()=>{"use strict";lV();uV();hV();fV();dV();mV();M7();gV();yV();vV();xV();bV();wV();TV();kV();EV();SV();CV();AV();K7();_V();MV();IV();OV();PV();BV();FV();zV();GV();$V();VV();UV();WV();YV();fA=[null];o(ii,"Selection");o(qV,"selection");o(bwe,"selection_selection");ii.prototype=qV.prototype={constructor:ii,select:E7,selectAll:A7,selectChild:_7,selectChildren:L7,filter:D7,data:O7,enter:R7,exit:P7,join:B7,merge:F7,selection:bwe,order:z7,sort:G7,call:$7,nodes:V7,node:U7,size:H7,empty:W7,each:Y7,attr:q7,style:j7,property:Q7,classed:J7,text:eA,html:tA,raise:rA,lower:nA,append:iA,insert:aA,remove:sA,clone:oA,datum:lA,on:cA,dispatch:uA,[Symbol.iterator]:hA};lu=qV});function ze(t){return typeof t=="string"?new ii([[document.querySelector(t)]],[document.documentElement]):new ii([[t]],fA)}var XV=M(()=>{"use strict";ml();o(ze,"default")});var gl=M(()=>{"use strict";uy();B4();XV();ml();F4();C7();K7()});var jV=M(()=>{"use strict"});function yh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function xp(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var dA=M(()=>{"use strict";o(yh,"default");o(xp,"extend")});function vh(){}function QV(){return this.rgb().formatHex()}function _we(){return this.rgb().formatHex8()}function Lwe(){return iU(this).formatHsl()}function ZV(){return this.rgb().formatRgb()}function vl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=wwe.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?JV(e):r===3?new sa(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?G4(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?G4(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Twe.exec(t))?new sa(e[1],e[2],e[3],1):(e=kwe.exec(t))?new sa(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=Ewe.exec(t))?G4(e[1],e[2],e[3],e[4]):(e=Swe.exec(t))?G4(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Cwe.exec(t))?rU(e[1],e[2]/100,e[3]/100,1):(e=Awe.exec(t))?rU(e[1],e[2]/100,e[3]/100,e[4]):KV.hasOwnProperty(t)?JV(KV[t]):t==="transparent"?new sa(NaN,NaN,NaN,0):null}function JV(t){return new sa(t>>16&255,t>>8&255,t&255,1)}function G4(t,e,r,n){return n<=0&&(t=e=r=NaN),new sa(t,e,r,n)}function mA(t){return t instanceof vh||(t=vl(t)),t?(t=t.rgb(),new sa(t.r,t.g,t.b,t.opacity)):new sa}function wp(t,e,r,n){return arguments.length===1?mA(t):new sa(t,e,r,n??1)}function sa(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function eU(){return`#${ed(this.r)}${ed(this.g)}${ed(this.b)}`}function Dwe(){return`#${ed(this.r)}${ed(this.g)}${ed(this.b)}${ed((isNaN(this.opacity)?1:this.opacity)*255)}`}function tU(){let t=U4(this.opacity);return`${t===1?"rgb(":"rgba("}${td(this.r)}, ${td(this.g)}, ${td(this.b)}${t===1?")":`, ${t})`}`}function U4(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function td(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ed(t){return t=td(t),(t<16?"0":"")+t.toString(16)}function rU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new yl(t,e,r,n)}function iU(t){if(t instanceof yl)return new yl(t.h,t.s,t.l,t.opacity);if(t instanceof vh||(t=vl(t)),!t)return new yl;if(t instanceof yl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new yl(s,l,u,t.opacity)}function aU(t,e,r,n){return arguments.length===1?iU(t):new yl(t,e,r,n??1)}function yl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function nU(t){return t=(t||0)%360,t<0?t+360:t}function $4(t){return Math.max(0,Math.min(1,t||0))}function pA(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var py,V4,bp,my,ac,wwe,Twe,kwe,Ewe,Swe,Cwe,Awe,KV,gA=M(()=>{"use strict";dA();o(vh,"Color");py=.7,V4=1/py,bp="\\s*([+-]?\\d+)\\s*",my="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",ac="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",wwe=/^#([0-9a-f]{3,8})$/,Twe=new RegExp(`^rgb\\(${bp},${bp},${bp}\\)$`),kwe=new RegExp(`^rgb\\(${ac},${ac},${ac}\\)$`),Ewe=new RegExp(`^rgba\\(${bp},${bp},${bp},${my}\\)$`),Swe=new RegExp(`^rgba\\(${ac},${ac},${ac},${my}\\)$`),Cwe=new RegExp(`^hsl\\(${my},${ac},${ac}\\)$`),Awe=new RegExp(`^hsla\\(${my},${ac},${ac},${my}\\)$`),KV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};yh(vh,vl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:QV,formatHex:QV,formatHex8:_we,formatHsl:Lwe,formatRgb:ZV,toString:ZV});o(QV,"color_formatHex");o(_we,"color_formatHex8");o(Lwe,"color_formatHsl");o(ZV,"color_formatRgb");o(vl,"color");o(JV,"rgbn");o(G4,"rgba");o(mA,"rgbConvert");o(wp,"rgb");o(sa,"Rgb");yh(sa,wp,xp(vh,{brighter(t){return t=t==null?V4:Math.pow(V4,t),new sa(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?py:Math.pow(py,t),new sa(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new sa(td(this.r),td(this.g),td(this.b),U4(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eU,formatHex:eU,formatHex8:Dwe,formatRgb:tU,toString:tU}));o(eU,"rgb_formatHex");o(Dwe,"rgb_formatHex8");o(tU,"rgb_formatRgb");o(U4,"clampa");o(td,"clampi");o(ed,"hex");o(rU,"hsla");o(iU,"hslConvert");o(aU,"hsl");o(yl,"Hsl");yh(yl,aU,xp(vh,{brighter(t){return t=t==null?V4:Math.pow(V4,t),new yl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?py:Math.pow(py,t),new yl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new sa(pA(t>=240?t-240:t+120,i,n),pA(t,i,n),pA(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new yl(nU(this.h),$4(this.s),$4(this.l),U4(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=U4(this.opacity);return`${t===1?"hsl(":"hsla("}${nU(this.h)}, ${$4(this.s)*100}%, ${$4(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(nU,"clamph");o($4,"clampt");o(pA,"hsl2rgb")});var sU,oU,lU=M(()=>{"use strict";sU=Math.PI/180,oU=180/Math.PI});function pU(t){if(t instanceof sc)return new sc(t.l,t.a,t.b,t.opacity);if(t instanceof cu)return mU(t);t instanceof sa||(t=mA(t));var e=bA(t.r),r=bA(t.g),n=bA(t.b),i=yA((.2225045*e+.7168786*r+.0606169*n)/uU),a,s;return e===r&&r===n?a=s=i:(a=yA((.4360747*e+.3850649*r+.1430804*n)/cU),s=yA((.0139322*e+.0971045*r+.7141733*n)/hU)),new sc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function wA(t,e,r,n){return arguments.length===1?pU(t):new sc(t,e,r,n??1)}function sc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function yA(t){return t>Nwe?Math.pow(t,1/3):t/dU+fU}function vA(t){return t>Tp?t*t*t:dU*(t-fU)}function xA(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function bA(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Rwe(t){if(t instanceof cu)return new cu(t.h,t.c,t.l,t.opacity);if(t instanceof sc||(t=pU(t)),t.a===0&&t.b===0)return new cu(NaN,0{"use strict";dA();gA();lU();H4=18,cU=.96422,uU=1,hU=.82521,fU=4/29,Tp=6/29,dU=3*Tp*Tp,Nwe=Tp*Tp*Tp;o(pU,"labConvert");o(wA,"lab");o(sc,"Lab");yh(sc,wA,xp(vh,{brighter(t){return new sc(this.l+H4*(t??1),this.a,this.b,this.opacity)},darker(t){return new sc(this.l-H4*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=cU*vA(e),t=uU*vA(t),r=hU*vA(r),new sa(xA(3.1338561*e-1.6168667*t-.4906146*r),xA(-.9787684*e+1.9161415*t+.033454*r),xA(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(yA,"xyz2lab");o(vA,"lab2xyz");o(xA,"lrgb2rgb");o(bA,"rgb2lrgb");o(Rwe,"hclConvert");o(gy,"hcl");o(cu,"Hcl");o(mU,"hcl2lab");yh(cu,gy,xp(vh,{brighter(t){return new cu(this.h,this.c,this.l+H4*(t??1),this.opacity)},darker(t){return new cu(this.h,this.c,this.l-H4*(t??1),this.opacity)},rgb(){return mU(this).rgb()}}))});var kp=M(()=>{"use strict";gA();gU()});function TA(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function kA(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(TA,"basis");o(kA,"default")});function SA(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return TA((r-n/e)*e,i,a,s,l)}}var yU=M(()=>{"use strict";EA();o(SA,"default")});var Ep,CA=M(()=>{"use strict";Ep=o(t=>()=>t,"default")});function vU(t,e){return function(r){return t+r*e}}function Mwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function xU(t,e){var r=e-t;return r?vU(t,r>180||r<-180?r-360*Math.round(r/360):r):Ep(isNaN(t)?e:t)}function bU(t){return(t=+t)==1?uu:function(e,r){return r-e?Mwe(e,r,t):Ep(isNaN(e)?r:e)}}function uu(t,e){var r=e-t;return r?vU(t,r):Ep(isNaN(t)?e:t)}var AA=M(()=>{"use strict";CA();o(vU,"linear");o(Mwe,"exponential");o(xU,"hue");o(bU,"gamma");o(uu,"nogamma")});function wU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";kp();EA();yU();AA();rd=o(function t(e){var r=bU(e);function n(i,a){var s=r((i=wp(i)).r,(a=wp(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=uu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(wU,"rgbSpline");Iwe=wU(kA),Owe=wU(SA)});function LA(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(LA,"default");o(TU,"isNumberArray")});function EU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";W4();o(EU,"genericArray")});function DA(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var CU=M(()=>{"use strict";o(DA,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var yy=M(()=>{"use strict";o(Ki,"default")});function NA(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=xh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var AU=M(()=>{"use strict";W4();o(NA,"default")});function Pwe(t){return function(){return t}}function Bwe(t){return function(e){return t(e)+""}}function Sp(t,e){var r=MA.lastIndex=RA.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=MA.exec(t))&&(i=RA.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=RA.lastIndex;return r{"use strict";yy();MA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,RA=new RegExp(MA.source,"g");o(Pwe,"zero");o(Bwe,"one");o(Sp,"default")});function xh(t,e){var r=typeof e,n;return e==null||r==="boolean"?Ep(e):(r==="number"?Ki:r==="string"?(n=vl(e))?(e=n,rd):Sp:e instanceof vl?rd:e instanceof Date?DA:TU(e)?LA:Array.isArray(e)?EU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?NA:Ki)(t,e)}var W4=M(()=>{"use strict";kp();_A();SU();CU();yy();AU();IA();CA();kU();o(xh,"default")});function Y4(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var _U=M(()=>{"use strict";o(Y4,"default")});function X4(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";LU=180/Math.PI,q4={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(X4,"default")});function NU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?q4:X4(e.a,e.b,e.c,e.d,e.e,e.f)}function RU(t){return t==null?q4:(j4||(j4=document.createElementNS("http://www.w3.org/2000/svg","g")),j4.setAttribute("transform",t),(t=j4.transform.baseVal.consolidate())?(t=t.matrix,X4(t.a,t.b,t.c,t.d,t.e,t.f)):q4)}var j4,MU=M(()=>{"use strict";DU();o(NU,"parseCss");o(RU,"parseSvg")});function IU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";yy();MU();o(IU,"interpolateTransform");OA=IU(NU,"px, ","px)","deg)"),PA=IU(RU,", ",")",")")});function PU(t){return function(e,r){var n=t((e=gy(e)).h,(r=gy(r)).h),i=uu(e.c,r.c),a=uu(e.l,r.l),s=uu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var BA,Fwe,BU=M(()=>{"use strict";kp();AA();o(PU,"hcl");BA=PU(xU),Fwe=PU(uu)});var Cp=M(()=>{"use strict";W4();yy();_U();IA();OU();_A();BU()});function ky(){return nd||(GU(zwe),nd=wy.now()+Z4)}function zwe(){nd=0}function Ty(){this._call=this._time=this._next=null}function J4(t,e,r){var n=new Ty;return n.restart(t,e,r),n}function $U(){ky(),++Ap;for(var t=K4,e;t;)(e=nd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Ap}function FU(){nd=(Q4=wy.now())+Z4,Ap=xy=0;try{$U()}finally{Ap=0,$we(),nd=0}}function Gwe(){var t=wy.now(),e=t-Q4;e>zU&&(Z4-=e,Q4=t)}function $we(){for(var t,e=K4,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:K4=r);by=t,FA(n)}function FA(t){if(!Ap){xy&&(xy=clearTimeout(xy));var e=t-nd;e>24?(t<1/0&&(xy=setTimeout(FU,t-wy.now()-Z4)),vy&&(vy=clearInterval(vy))):(vy||(Q4=wy.now(),vy=setInterval(Gwe,zU)),Ap=1,GU(FU))}}var Ap,xy,vy,zU,K4,by,Q4,nd,Z4,wy,GU,zA=M(()=>{"use strict";Ap=0,xy=0,vy=0,zU=1e3,Q4=0,nd=0,Z4=0,wy=typeof performance=="object"&&performance.now?performance:Date,GU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(ky,"now");o(zwe,"clearNow");o(Ty,"Timer");Ty.prototype=J4.prototype={constructor:Ty,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?ky():+r)+(e==null?0:+e),!this._next&&by!==this&&(by?by._next=this:K4=this,by=this),this._call=t,this._time=r,FA()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,FA())},"stop")};o(J4,"timer");o($U,"timerFlush");o(FU,"wake");o(Gwe,"poke");o($we,"nap");o(FA,"sleep")});function Ey(t,e,r){var n=new Ty;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var VU=M(()=>{"use strict";zA();o(Ey,"default")});var e3=M(()=>{"use strict";zA();VU()});function hu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;Hwe(t,r,{name:e,index:n,group:i,on:Vwe,tween:Uwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:WU})}function Cy(t,e){var r=Oi(t,e);if(r.state>WU)throw new Error("too late; already scheduled");return r}function oa(t,e){var r=Oi(t,e);if(r.state>t3)throw new Error("too late; already running");return r}function Oi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function Hwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=J4(a,0,r.time);function a(h){r.state=UU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==UU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===t3)return Ey(s);m.state===HU?(m.state=Sy,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";b7();e3();Vwe=x7("start","end","cancel","interrupt"),Uwe=[],WU=0,UU=1,r3=2,t3=3,HU=4,n3=5,Sy=6;o(hu,"default");o(Cy,"init");o(oa,"set");o(Oi,"get");o(Hwe,"create")});function Ay(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>r3&&n.state{"use strict";ys();o(Ay,"default")});function GA(t){return this.each(function(){Ay(this,t)})}var qU=M(()=>{"use strict";YU();o(GA,"default")});function Wwe(t,e){var r,n;return function(){var i=oa(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";ys();o(Wwe,"tweenRemove");o(Ywe,"tweenFunction");o($A,"default");o(_p,"tweenValue")});function Ly(t,e){var r;return(typeof e=="number"?Ki:e instanceof vl?rd:(r=vl(e))?(e=r,rd):Sp)(t,e)}var VA=M(()=>{"use strict";kp();Cp();o(Ly,"default")});function qwe(t){return function(){this.removeAttribute(t)}}function Xwe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function jwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Kwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Qwe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function Zwe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function UA(t,e){var r=ic(t),n=r==="transform"?PA:Ly;return this.attrTween(t,typeof e=="function"?(r.local?Zwe:Qwe)(r,n,_p(this,"attr."+t,e)):e==null?(r.local?Xwe:qwe)(r):(r.local?Kwe:jwe)(r,n,e))}var XU=M(()=>{"use strict";Cp();gl();_y();VA();o(qwe,"attrRemove");o(Xwe,"attrRemoveNS");o(jwe,"attrConstant");o(Kwe,"attrConstantNS");o(Qwe,"attrFunction");o(Zwe,"attrFunctionNS");o(UA,"default")});function Jwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function eTe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function tTe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&eTe(t,a)),r}return o(i,"tween"),i._value=e,i}function rTe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Jwe(t,a)),r}return o(i,"tween"),i._value=e,i}function HA(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=ic(t);return this.tween(r,(n.local?tTe:rTe)(n,e))}var jU=M(()=>{"use strict";gl();o(Jwe,"attrInterpolate");o(eTe,"attrInterpolateNS");o(tTe,"attrTweenNS");o(rTe,"attrTween");o(HA,"default")});function nTe(t,e){return function(){Cy(this,t).delay=+e.apply(this,arguments)}}function iTe(t,e){return e=+e,function(){Cy(this,t).delay=e}}function WA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?nTe:iTe)(e,t)):Oi(this.node(),e).delay}var KU=M(()=>{"use strict";ys();o(nTe,"delayFunction");o(iTe,"delayConstant");o(WA,"default")});function aTe(t,e){return function(){oa(this,t).duration=+e.apply(this,arguments)}}function sTe(t,e){return e=+e,function(){oa(this,t).duration=e}}function YA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?aTe:sTe)(e,t)):Oi(this.node(),e).duration}var QU=M(()=>{"use strict";ys();o(aTe,"durationFunction");o(sTe,"durationConstant");o(YA,"default")});function oTe(t,e){if(typeof e!="function")throw new Error;return function(){oa(this,t).ease=e}}function qA(t){var e=this._id;return arguments.length?this.each(oTe(e,t)):Oi(this.node(),e).ease}var ZU=M(()=>{"use strict";ys();o(oTe,"easeConstant");o(qA,"default")});function lTe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;oa(this,t).ease=r}}function XA(t){if(typeof t!="function")throw new Error;return this.each(lTe(this._id,t))}var JU=M(()=>{"use strict";ys();o(lTe,"easeVarying");o(XA,"default")});function jA(t){typeof t!="function"&&(t=vp(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";gl();id();o(jA,"default")});function KA(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";id();o(KA,"default")});function cTe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function uTe(t,e,r){var n,i,a=cTe(e)?Cy:oa;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function QA(t,e){var r=this._id;return arguments.length<2?Oi(this.node(),r).on.on(t):this.each(uTe(r,t,e))}var rH=M(()=>{"use strict";ys();o(cTe,"start");o(uTe,"onFunction");o(QA,"default")});function hTe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function ZA(){return this.on("end.remove",hTe(this._id))}var nH=M(()=>{"use strict";o(hTe,"removeFunction");o(ZA,"default")});function JA(t){var e=this._name,r=this._id;typeof t!="function"&&(t=mh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";gl();id();ys();o(JA,"default")});function e8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=yp(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";gl();id();ys();o(e8,"default")});function t8(){return new fTe(this._groups,this._parents)}var fTe,sH=M(()=>{"use strict";gl();fTe=lu.prototype.constructor;o(t8,"default")});function dTe(t,e){var r,n,i;return function(){var a=gh(this,t),s=(this.style.removeProperty(t),gh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function oH(t){return function(){this.style.removeProperty(t)}}function pTe(t,e,r){var n,i=r+"",a;return function(){var s=gh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function mTe(t,e,r){var n,i,a;return function(){var s=gh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),gh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function gTe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=oa(this,t),h=u.on,f=u.value[a]==null?l||(l=oH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function r8(t,e,r){var n=(t+="")=="transform"?OA:Ly;return e==null?this.styleTween(t,dTe(t,n)).on("end.style."+t,oH(t)):typeof e=="function"?this.styleTween(t,mTe(t,n,_p(this,"style."+t,e))).each(gTe(this._id,t)):this.styleTween(t,pTe(t,n,e),r).on("end.style."+t,null)}var lH=M(()=>{"use strict";Cp();gl();ys();_y();VA();o(dTe,"styleNull");o(oH,"styleRemove");o(pTe,"styleConstant");o(mTe,"styleFunction");o(gTe,"styleMaybeRemove");o(r8,"default")});function yTe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function vTe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&yTe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function n8(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,vTe(t,e,r??""))}var cH=M(()=>{"use strict";o(yTe,"styleInterpolate");o(vTe,"styleTween");o(n8,"default")});function xTe(t){return function(){this.textContent=t}}function bTe(t){return function(){var e=t(this);this.textContent=e??""}}function i8(t){return this.tween("text",typeof t=="function"?bTe(_p(this,"text",t)):xTe(t==null?"":t+""))}var uH=M(()=>{"use strict";_y();o(xTe,"textConstant");o(bTe,"textFunction");o(i8,"default")});function wTe(t){return function(e){this.textContent=t.call(this,e)}}function TTe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&wTe(i)),e}return o(n,"tween"),n._value=t,n}function a8(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,TTe(t))}var hH=M(()=>{"use strict";o(wTe,"textInterpolate");o(TTe,"textTween");o(a8,"default")});function s8(){for(var t=this._name,e=this._id,r=i3(),n=this._groups,i=n.length,a=0;a{"use strict";id();ys();o(s8,"default")});function o8(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=oa(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var dH=M(()=>{"use strict";ys();o(o8,"default")});function ja(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function pH(t){return lu().transition(t)}function i3(){return++kTe}var kTe,fu,id=M(()=>{"use strict";gl();XU();jU();KU();QU();ZU();JU();eH();tH();rH();nH();iH();aH();sH();lH();cH();uH();hH();fH();_y();dH();kTe=0;o(ja,"Transition");o(pH,"transition");o(i3,"newId");fu=lu.prototype;ja.prototype=pH.prototype={constructor:ja,select:JA,selectAll:e8,selectChild:fu.selectChild,selectChildren:fu.selectChildren,filter:jA,merge:KA,selection:t8,transition:s8,call:fu.call,nodes:fu.nodes,node:fu.node,size:fu.size,empty:fu.empty,each:fu.each,on:QA,attr:UA,attrTween:HA,style:r8,styleTween:n8,text:i8,textTween:a8,remove:ZA,tween:$A,delay:WA,duration:YA,ease:qA,easeVarying:XA,end:o8,[Symbol.iterator]:fu[Symbol.iterator]}});function a3(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var mH=M(()=>{"use strict";o(a3,"cubicInOut")});var l8=M(()=>{"use strict";mH()});function STe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function c8(t){var e,r;t instanceof ja?(e=t._id,t=t._name):(e=i3(),(r=ETe).time=ky(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";id();ys();l8();e3();ETe={time:null,delay:0,duration:250,ease:a3};o(STe,"inherit");o(c8,"default")});var yH=M(()=>{"use strict";gl();qU();gH();lu.prototype.interrupt=GA;lu.prototype.transition=c8});var s3=M(()=>{"use strict";yH()});var vH=M(()=>{"use strict"});var xH=M(()=>{"use strict"});var bH=M(()=>{"use strict"});function wH(t){return[+t[0],+t[1]]}function CTe(t){return[wH(t[0]),wH(t[1])]}function u8(t){return{type:t}}var t1t,r1t,n1t,i1t,a1t,s1t,TH=M(()=>{"use strict";s3();vH();xH();bH();({abs:t1t,max:r1t,min:n1t}=Math);o(wH,"number1");o(CTe,"number2");i1t={name:"x",handles:["w","e"].map(u8),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},a1t={name:"y",handles:["n","s"].map(u8),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},s1t={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(u8),input:o(function(t){return t==null?null:CTe(t)},"input"),output:o(function(t){return t},"output")};o(u8,"type")});var kH=M(()=>{"use strict";TH()});function EH(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return EH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";h8=Math.PI,f8=2*h8,ad=1e-6,ATe=f8-ad;o(EH,"append");o(_Te,"appendRound");sd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?EH:_Te(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>ad)if(!(Math.abs(d*u-h*f)>ad)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((h8-Math.acos((y+p-v)/(2*x*b)))/2),_=w/b,T=w/x;Math.abs(_-1)>ad&&this._append`L${e+_*f},${r+_*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>ad||Math.abs(this._y1-f)>ad)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%f8+f8),p>ATe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>ad&&this._append`A${n},${n},0,${+(p>=h8)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(SH,"path");SH.prototype=sd.prototype});var d8=M(()=>{"use strict";CH()});var AH=M(()=>{"use strict"});var _H=M(()=>{"use strict"});var LH=M(()=>{"use strict"});var DH=M(()=>{"use strict"});var NH=M(()=>{"use strict"});var RH=M(()=>{"use strict"});var MH=M(()=>{"use strict"});function p8(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function od(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Dy=M(()=>{"use strict";o(p8,"default");o(od,"formatDecimalParts")});function xl(t){return t=od(Math.abs(t)),t?t[1]:NaN}var Ny=M(()=>{"use strict";Dy();o(xl,"default")});function m8(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var IH=M(()=>{"use strict";o(m8,"default")});function g8(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var OH=M(()=>{"use strict";o(g8,"default")});function bh(t){if(!(e=LTe.exec(t)))throw new Error("invalid format: "+t);var e;return new o3({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function o3(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var LTe,y8=M(()=>{"use strict";LTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(bh,"formatSpecifier");bh.prototype=o3.prototype;o(o3,"FormatSpecifier");o3.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function v8(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var PH=M(()=>{"use strict";o(v8,"default")});function b8(t,e){var r=od(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(x8=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+od(t,Math.max(0,e+a-1))[0]}var x8,w8=M(()=>{"use strict";Dy();o(b8,"default")});function l3(t,e){var r=od(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var BH=M(()=>{"use strict";Dy();o(l3,"default")});var T8,FH=M(()=>{"use strict";Dy();w8();BH();T8={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:p8,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>l3(t*100,e),"p"),r:l3,s:b8,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function c3(t){return t}var zH=M(()=>{"use strict";o(c3,"default")});function k8(t){var e=t.grouping===void 0||t.thousands===void 0?c3:m8(GH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?c3:g8(GH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=bh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,_=d.trim,T=d.type;T==="n"?(b=!0,T="g"):T8[T]||(w===void 0&&(w=12),_=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",L=y==="$"?n:/[%p]/.test(T)?s:"",C=T8[T],A=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,R=L,S,O,N;if(T==="c")R=C(D)+R,D="";else{D=+D;var P=D<0||1/D<0;if(D=isNaN(D)?u:C(Math.abs(D),w),_&&(D=v8(D)),P&&+D==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,R=(T==="s"?$H[8+x8/3]:"")+R+(P&&g==="("?")":""),A){for(S=-1,O=D.length;++SN||N>57){R=(N===46?i+D.slice(S+1):D.slice(S))+R,D=D.slice(0,S);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+R.length,B=F>1)+k+D+R+B.slice(F);break;default:D=B+k+D+R;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=bh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(xl(p)/3)))*3,y=Math.pow(10,-g),v=$H[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var GH,$H,VH=M(()=>{"use strict";Ny();IH();OH();y8();PH();FH();w8();zH();GH=Array.prototype.map,$H=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(k8,"default")});function E8(t){return u3=k8(t),h3=u3.format,f3=u3.formatPrefix,u3}var u3,h3,f3,UH=M(()=>{"use strict";VH();E8({thousands:",",grouping:[3],currency:["$",""]});o(E8,"defaultLocale")});function d3(t){return Math.max(0,-xl(Math.abs(t)))}var HH=M(()=>{"use strict";Ny();o(d3,"default")});function p3(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(xl(e)/3)))*3-xl(Math.abs(t)))}var WH=M(()=>{"use strict";Ny();o(p3,"default")});function m3(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,xl(e)-xl(t))+1}var YH=M(()=>{"use strict";Ny();o(m3,"default")});var S8=M(()=>{"use strict";UH();y8();HH();WH();YH()});var qH=M(()=>{"use strict"});var XH=M(()=>{"use strict"});var jH=M(()=>{"use strict"});var KH=M(()=>{"use strict"});function wh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Ry=M(()=>{"use strict";o(wh,"initRange")});function du(){var t=new mp,e=[],r=[],n=C8;function i(a){let s=t.get(a);if(s===void 0){if(n!==C8)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new mp;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return du(e,r).unknown(n)},wh.apply(i,arguments),i}var C8,A8=M(()=>{"use strict";ph();Ry();C8=Symbol("implicit");o(du,"ordinal")});function Lp(){var t=du().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";ph();Ry();A8();o(Lp,"band")});function _8(t){return function(){return t}}var ZH=M(()=>{"use strict";o(_8,"constants")});function L8(t){return+t}var JH=M(()=>{"use strict";o(L8,"number")});function Dp(t){return t}function D8(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:_8(isNaN(e)?NaN:.5)}function DTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function NTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?RTe:NTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,L8),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=Y4,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Dp,f()):s!==Dp},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function My(){return MTe()(Dp,Dp)}var eW,N8=M(()=>{"use strict";ph();Cp();ZH();JH();eW=[0,1];o(Dp,"identity");o(D8,"normalize");o(DTe,"clamper");o(NTe,"bimap");o(RTe,"polymap");o(g3,"copy");o(MTe,"transformer");o(My,"continuous")});function R8(t,e,r,n){var i=gp(t,e,r),a;switch(n=bh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=p3(i,s))&&(n.precision=a),f3(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=m3(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=d3(i))&&(n.precision=a-(n.type==="%")*2);break}}return h3(n)}var tW=M(()=>{"use strict";ph();S8();o(R8,"tickFormat")});function ITe(t){var e=t.domain;return t.ticks=function(r){var n=e();return L4(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return R8(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=ly(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function bl(){var t=My();return t.copy=function(){return g3(t,bl())},wh.apply(t,arguments),ITe(t)}var rW=M(()=>{"use strict";ph();N8();Ry();tW();o(ITe,"linearish");o(bl,"linear")});function M8(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(M8,"nice")});function gn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hgn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(I8.setTime(+a),O8.setTime(+s),t(I8),t(O8),Math.floor(r(I8,O8))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var I8,O8,pu=M(()=>{"use strict";I8=new Date,O8=new Date;o(gn,"timeInterval")});var oc,iW,P8=M(()=>{"use strict";pu();oc=gn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);oc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?gn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):oc);iW=oc.range});var Xs,aW,B8=M(()=>{"use strict";pu();Xs=gn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),aW=Xs.range});var mu,OTe,y3,PTe,F8=M(()=>{"use strict";pu();mu=gn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),OTe=mu.range,y3=gn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),PTe=y3.range});var gu,BTe,v3,FTe,z8=M(()=>{"use strict";pu();gu=gn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),BTe=gu.range,v3=gn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),FTe=v3.range});var Lo,zTe,Oy,GTe,x3,$Te,G8=M(()=>{"use strict";pu();Lo=gn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),zTe=Lo.range,Oy=gn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),GTe=Oy.range,x3=gn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),$Te=x3.range});function ud(t){return gn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function hd(t){return gn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var wl,Th,b3,w3,cc,T3,k3,oW,VTe,UTe,HTe,WTe,YTe,qTe,fd,Np,lW,cW,kh,uW,hW,fW,XTe,jTe,KTe,QTe,ZTe,JTe,$8=M(()=>{"use strict";pu();o(ud,"timeWeekday");wl=ud(0),Th=ud(1),b3=ud(2),w3=ud(3),cc=ud(4),T3=ud(5),k3=ud(6),oW=wl.range,VTe=Th.range,UTe=b3.range,HTe=w3.range,WTe=cc.range,YTe=T3.range,qTe=k3.range;o(hd,"utcWeekday");fd=hd(0),Np=hd(1),lW=hd(2),cW=hd(3),kh=hd(4),uW=hd(5),hW=hd(6),fW=fd.range,XTe=Np.range,jTe=lW.range,KTe=cW.range,QTe=kh.range,ZTe=uW.range,JTe=hW.range});var yu,eke,E3,tke,V8=M(()=>{"use strict";pu();yu=gn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),eke=yu.range,E3=gn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),tke=E3.range});var js,rke,Tl,nke,U8=M(()=>{"use strict";pu();js=gn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());js.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:gn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});rke=js.range,Tl=gn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());Tl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:gn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});nke=Tl.range});function pW(t,e,r,n,i,a){let s=[[Xs,1,1e3],[Xs,5,5*1e3],[Xs,15,15*1e3],[Xs,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(gp(h/31536e6,f/31536e6,d));if(m===0)return oc.every(Math.max(gp(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";ph();P8();B8();F8();z8();G8();$8();V8();U8();o(pW,"ticker");[ake,ske]=pW(Tl,E3,fd,x3,v3,y3),[H8,W8]=pW(js,yu,wl,Lo,gu,mu)});var S3=M(()=>{"use strict";P8();B8();F8();z8();G8();$8();V8();U8();mW()});function Y8(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function q8(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Py(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function X8(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=By(i),f=Fy(i),d=By(a),p=Fy(a),m=By(s),g=Fy(s),y=By(l),v=Fy(l),x=By(u),b=Fy(u),w={a:P,A:F,b:B,B:$,c:null,d:wW,e:wW,f:Lke,g:zke,G:$ke,H:Cke,I:Ake,j:_ke,L:CW,m:Dke,M:Nke,p:z,q:W,Q:EW,s:SW,S:Rke,u:Mke,U:Ike,V:Oke,w:Pke,W:Bke,x:null,X:null,y:Fke,Y:Gke,Z:Vke,"%":kW},_={a:j,A:K,b:ie,B:Q,c:null,d:TW,e:TW,f:Yke,g:rEe,G:iEe,H:Uke,I:Hke,j:Wke,L:_W,m:qke,M:Xke,p:ee,q:J,Q:EW,s:SW,S:jke,u:Kke,U:Qke,V:Zke,w:Jke,W:eEe,x:null,X:null,y:tEe,Y:nEe,Z:aEe,"%":kW},T={a:I,A:D,b:k,B:R,c:S,d:xW,e:xW,f:Tke,g:vW,G:yW,H:bW,I:bW,j:vke,L:wke,m:yke,M:xke,p:A,q:gke,Q:Eke,s:Ske,S:bke,u:hke,U:fke,V:dke,w:uke,W:pke,x:O,X:N,y:vW,Y:yW,Z:mke,"%":kke};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),_.x=E(r,_),_.X=E(n,_),_.c=E(e,_);function E(H,q){return function(Z){var ae=[],ue=-1,ce=0,te=H.length,De,oe,ke;for(Z instanceof Date||(Z=new Date(+Z));++ue53)return null;"w"in ae||(ae.w=1),"Z"in ae?(ce=q8(Py(ae.y,0,1)),te=ce.getUTCDay(),ce=te>4||te===0?Np.ceil(ce):Np(ce),ce=Oy.offset(ce,(ae.V-1)*7),ae.y=ce.getUTCFullYear(),ae.m=ce.getUTCMonth(),ae.d=ce.getUTCDate()+(ae.w+6)%7):(ce=Y8(Py(ae.y,0,1)),te=ce.getDay(),ce=te>4||te===0?Th.ceil(ce):Th(ce),ce=Lo.offset(ce,(ae.V-1)*7),ae.y=ce.getFullYear(),ae.m=ce.getMonth(),ae.d=ce.getDate()+(ae.w+6)%7)}else("W"in ae||"U"in ae)&&("w"in ae||(ae.w="u"in ae?ae.u%7:"W"in ae?1:0),te="Z"in ae?q8(Py(ae.y,0,1)).getUTCDay():Y8(Py(ae.y,0,1)).getDay(),ae.m=0,ae.d="W"in ae?(ae.w+6)%7+ae.W*7-(te+5)%7:ae.w+ae.U*7-(te+6)%7);return"Z"in ae?(ae.H+=ae.Z/100|0,ae.M+=ae.Z%100,q8(ae)):Y8(ae)}}o(L,"newParse");function C(H,q,Z,ae){for(var ue=0,ce=q.length,te=Z.length,De,oe;ue=te)return-1;if(De=q.charCodeAt(ue++),De===37){if(De=q.charAt(ue++),oe=T[De in gW?q.charAt(ue++):De],!oe||(ae=oe(H,Z,ae))<0)return-1}else if(De!=Z.charCodeAt(ae++))return-1}return ae}o(C,"parseSpecifier");function A(H,q,Z){var ae=h.exec(q.slice(Z));return ae?(H.p=f.get(ae[0].toLowerCase()),Z+ae[0].length):-1}o(A,"parsePeriod");function I(H,q,Z){var ae=m.exec(q.slice(Z));return ae?(H.w=g.get(ae[0].toLowerCase()),Z+ae[0].length):-1}o(I,"parseShortWeekday");function D(H,q,Z){var ae=d.exec(q.slice(Z));return ae?(H.w=p.get(ae[0].toLowerCase()),Z+ae[0].length):-1}o(D,"parseWeekday");function k(H,q,Z){var ae=x.exec(q.slice(Z));return ae?(H.m=b.get(ae[0].toLowerCase()),Z+ae[0].length):-1}o(k,"parseShortMonth");function R(H,q,Z){var ae=y.exec(q.slice(Z));return ae?(H.m=v.get(ae[0].toLowerCase()),Z+ae[0].length):-1}o(R,"parseMonth");function S(H,q,Z){return C(H,e,q,Z)}o(S,"parseLocaleDateTime");function O(H,q,Z){return C(H,r,q,Z)}o(O,"parseLocaleDate");function N(H,q,Z){return C(H,n,q,Z)}o(N,"parseLocaleTime");function P(H){return s[H.getDay()]}o(P,"formatShortWeekday");function F(H){return a[H.getDay()]}o(F,"formatWeekday");function B(H){return u[H.getMonth()]}o(B,"formatShortMonth");function $(H){return l[H.getMonth()]}o($,"formatMonth");function z(H){return i[+(H.getHours()>=12)]}o(z,"formatPeriod");function W(H){return 1+~~(H.getMonth()/3)}o(W,"formatQuarter");function j(H){return s[H.getUTCDay()]}o(j,"formatUTCShortWeekday");function K(H){return a[H.getUTCDay()]}o(K,"formatUTCWeekday");function ie(H){return u[H.getUTCMonth()]}o(ie,"formatUTCShortMonth");function Q(H){return l[H.getUTCMonth()]}o(Q,"formatUTCMonth");function ee(H){return i[+(H.getUTCHours()>=12)]}o(ee,"formatUTCPeriod");function J(H){return 1+~~(H.getUTCMonth()/3)}return o(J,"formatUTCQuarter"),{format:o(function(H){var q=E(H+="",w);return q.toString=function(){return H},q},"format"),parse:o(function(H){var q=L(H+="",!1);return q.toString=function(){return H},q},"parse"),utcFormat:o(function(H){var q=E(H+="",_);return q.toString=function(){return H},q},"utcFormat"),utcParse:o(function(H){var q=L(H+="",!0);return q.toString=function(){return H},q},"utcParse")}}function Hr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function uke(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function hke(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function fke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function dke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function pke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function yW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function vW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function mke(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function gke(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function yke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function xW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function vke(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function bW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function xke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function bke(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function wke(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Tke(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function kke(t,e,r){var n=oke.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function Eke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function Ske(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function wW(t,e){return Hr(t.getDate(),e,2)}function Cke(t,e){return Hr(t.getHours(),e,2)}function Ake(t,e){return Hr(t.getHours()%12||12,e,2)}function _ke(t,e){return Hr(1+Lo.count(js(t),t),e,3)}function CW(t,e){return Hr(t.getMilliseconds(),e,3)}function Lke(t,e){return CW(t,e)+"000"}function Dke(t,e){return Hr(t.getMonth()+1,e,2)}function Nke(t,e){return Hr(t.getMinutes(),e,2)}function Rke(t,e){return Hr(t.getSeconds(),e,2)}function Mke(t){var e=t.getDay();return e===0?7:e}function Ike(t,e){return Hr(wl.count(js(t)-1,t),e,2)}function AW(t){var e=t.getDay();return e>=4||e===0?cc(t):cc.ceil(t)}function Oke(t,e){return t=AW(t),Hr(cc.count(js(t),t)+(js(t).getDay()===4),e,2)}function Pke(t){return t.getDay()}function Bke(t,e){return Hr(Th.count(js(t)-1,t),e,2)}function Fke(t,e){return Hr(t.getFullYear()%100,e,2)}function zke(t,e){return t=AW(t),Hr(t.getFullYear()%100,e,2)}function Gke(t,e){return Hr(t.getFullYear()%1e4,e,4)}function $ke(t,e){var r=t.getDay();return t=r>=4||r===0?cc(t):cc.ceil(t),Hr(t.getFullYear()%1e4,e,4)}function Vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Hr(e/60|0,"0",2)+Hr(e%60,"0",2)}function TW(t,e){return Hr(t.getUTCDate(),e,2)}function Uke(t,e){return Hr(t.getUTCHours(),e,2)}function Hke(t,e){return Hr(t.getUTCHours()%12||12,e,2)}function Wke(t,e){return Hr(1+Oy.count(Tl(t),t),e,3)}function _W(t,e){return Hr(t.getUTCMilliseconds(),e,3)}function Yke(t,e){return _W(t,e)+"000"}function qke(t,e){return Hr(t.getUTCMonth()+1,e,2)}function Xke(t,e){return Hr(t.getUTCMinutes(),e,2)}function jke(t,e){return Hr(t.getUTCSeconds(),e,2)}function Kke(t){var e=t.getUTCDay();return e===0?7:e}function Qke(t,e){return Hr(fd.count(Tl(t)-1,t),e,2)}function LW(t){var e=t.getUTCDay();return e>=4||e===0?kh(t):kh.ceil(t)}function Zke(t,e){return t=LW(t),Hr(kh.count(Tl(t),t)+(Tl(t).getUTCDay()===4),e,2)}function Jke(t){return t.getUTCDay()}function eEe(t,e){return Hr(Np.count(Tl(t)-1,t),e,2)}function tEe(t,e){return Hr(t.getUTCFullYear()%100,e,2)}function rEe(t,e){return t=LW(t),Hr(t.getUTCFullYear()%100,e,2)}function nEe(t,e){return Hr(t.getUTCFullYear()%1e4,e,4)}function iEe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?kh(t):kh.ceil(t),Hr(t.getUTCFullYear()%1e4,e,4)}function aEe(){return"+0000"}function kW(){return"%"}function EW(t){return+t}function SW(t){return Math.floor(+t/1e3)}var gW,Qi,oke,lke,DW=M(()=>{"use strict";S3();o(Y8,"localDate");o(q8,"utcDate");o(Py,"newDate");o(X8,"formatLocale");gW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,oke=/^%/,lke=/[\\^$*+?|[\]().{}]/g;o(Hr,"pad");o(cke,"requote");o(By,"formatRe");o(Fy,"formatLookup");o(uke,"parseWeekdayNumberSunday");o(hke,"parseWeekdayNumberMonday");o(fke,"parseWeekNumberSunday");o(dke,"parseWeekNumberISO");o(pke,"parseWeekNumberMonday");o(yW,"parseFullYear");o(vW,"parseYear");o(mke,"parseZone");o(gke,"parseQuarter");o(yke,"parseMonthNumber");o(xW,"parseDayOfMonth");o(vke,"parseDayOfYear");o(bW,"parseHour24");o(xke,"parseMinutes");o(bke,"parseSeconds");o(wke,"parseMilliseconds");o(Tke,"parseMicroseconds");o(kke,"parseLiteralPercent");o(Eke,"parseUnixTimestamp");o(Ske,"parseUnixTimestampSeconds");o(wW,"formatDayOfMonth");o(Cke,"formatHour24");o(Ake,"formatHour12");o(_ke,"formatDayOfYear");o(CW,"formatMilliseconds");o(Lke,"formatMicroseconds");o(Dke,"formatMonthNumber");o(Nke,"formatMinutes");o(Rke,"formatSeconds");o(Mke,"formatWeekdayNumberMonday");o(Ike,"formatWeekNumberSunday");o(AW,"dISO");o(Oke,"formatWeekNumberISO");o(Pke,"formatWeekdayNumberSunday");o(Bke,"formatWeekNumberMonday");o(Fke,"formatYear");o(zke,"formatYearISO");o(Gke,"formatFullYear");o($ke,"formatFullYearISO");o(Vke,"formatZone");o(TW,"formatUTCDayOfMonth");o(Uke,"formatUTCHour24");o(Hke,"formatUTCHour12");o(Wke,"formatUTCDayOfYear");o(_W,"formatUTCMilliseconds");o(Yke,"formatUTCMicroseconds");o(qke,"formatUTCMonthNumber");o(Xke,"formatUTCMinutes");o(jke,"formatUTCSeconds");o(Kke,"formatUTCWeekdayNumberMonday");o(Qke,"formatUTCWeekNumberSunday");o(LW,"UTCdISO");o(Zke,"formatUTCWeekNumberISO");o(Jke,"formatUTCWeekdayNumberSunday");o(eEe,"formatUTCWeekNumberMonday");o(tEe,"formatUTCYear");o(rEe,"formatUTCYearISO");o(nEe,"formatUTCFullYear");o(iEe,"formatUTCFullYearISO");o(aEe,"formatUTCZone");o(kW,"formatLiteralPercent");o(EW,"formatUnixTimestamp");o(SW,"formatUnixTimestampSeconds")});function j8(t){return Rp=X8(t),dd=Rp.format,NW=Rp.parse,RW=Rp.utcFormat,MW=Rp.utcParse,Rp}var Rp,dd,NW,RW,MW,IW=M(()=>{"use strict";DW();j8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(j8,"defaultLocale")});var K8=M(()=>{"use strict";IW()});function sEe(t){return new Date(t)}function oEe(t){return t instanceof Date?+t:+new Date(+t)}function OW(t,e,r,n,i,a,s,l,u,h){var f=My(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),_=h("%Y");function T(E){return(u(E){"use strict";S3();K8();N8();Ry();nW();o(sEe,"date");o(oEe,"number");o(OW,"calendar");o(C3,"time")});var BW=M(()=>{"use strict";QH();rW();A8();PW()});function Q8(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(Q8,"default")});var Z8,zW=M(()=>{"use strict";FW();Z8=Q8("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var GW=M(()=>{"use strict";zW()});function Pn(t){return o(function(){return t},"constant")}var A3=M(()=>{"use strict";o(Pn,"default")});function VW(t){return t>1?0:t<-1?Mp:Math.acos(t)}function e_(t){return t>=1?zy:t<=-1?-zy:Math.asin(t)}var J8,la,Eh,$W,_3,kl,pd,Zi,Mp,zy,Ip,L3=M(()=>{"use strict";J8=Math.abs,la=Math.atan2,Eh=Math.cos,$W=Math.max,_3=Math.min,kl=Math.sin,pd=Math.sqrt,Zi=1e-12,Mp=Math.PI,zy=Mp/2,Ip=2*Mp;o(VW,"acos");o(e_,"asin")});function D3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new sd(e)}var t_=M(()=>{"use strict";d8();o(D3,"withPath")});function lEe(t){return t.innerRadius}function cEe(t){return t.outerRadius}function uEe(t){return t.startAngle}function hEe(t){return t.endAngle}function fEe(t){return t&&t.padAngle}function dEe(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pS*S+O*O&&(C=I,A=D),{cx:C,cy:A,x01:-f,y01:-d,x11:C*(i/T-1),y11:A*(i/T-1)}}function El(){var t=lEe,e=cEe,r=Pn(0),n=null,i=uEe,a=hEe,s=fEe,l=null,u=D3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-zy,y=a.apply(this,arguments)-zy,v=J8(y-g),x=y>g;if(l||(l=f=u()),mZi))l.moveTo(0,0);else if(v>Ip-Zi)l.moveTo(m*Eh(g),m*kl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*Eh(y),p*kl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,_=g,T=y,E=v,L=v,C=s.apply(this,arguments)/2,A=C>Zi&&(n?+n.apply(this,arguments):pd(p*p+m*m)),I=_3(J8(m-p)/2,+r.apply(this,arguments)),D=I,k=I,R,S;if(A>Zi){var O=e_(A/p*kl(C)),N=e_(A/m*kl(C));(E-=O*2)>Zi?(O*=x?1:-1,_+=O,T-=O):(E=0,_=T=(g+y)/2),(L-=N*2)>Zi?(N*=x?1:-1,b+=N,w-=N):(L=0,b=w=(g+y)/2)}var P=m*Eh(b),F=m*kl(b),B=p*Eh(T),$=p*kl(T);if(I>Zi){var z=m*Eh(w),W=m*kl(w),j=p*Eh(_),K=p*kl(_),ie;if(vZi?k>Zi?(R=N3(j,K,P,F,m,k,x),S=N3(z,W,B,$,m,k,x),l.moveTo(R.cx+R.x01,R.cy+R.y01),kZi)||!(E>Zi)?l.lineTo(B,$):D>Zi?(R=N3(B,$,z,W,p,-D,x),S=N3(P,F,j,K,p,-D,x),l.lineTo(R.cx+R.x01,R.cy+R.y01),D{"use strict";A3();L3();t_();o(lEe,"arcInnerRadius");o(cEe,"arcOuterRadius");o(uEe,"arcStartAngle");o(hEe,"arcEndAngle");o(fEe,"arcPadAngle");o(dEe,"intersect");o(N3,"cornerTangents");o(El,"default")});function Gy(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var O2t,r_=M(()=>{"use strict";O2t=Array.prototype.slice;o(Gy,"default")});function HW(t){this._context=t}function Op(t){return new HW(t)}var n_=M(()=>{"use strict";o(HW,"Linear");HW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Op,"default")});function WW(t){return t[0]}function YW(t){return t[1]}var qW=M(()=>{"use strict";o(WW,"x");o(YW,"y")});function Ka(t,e){var r=Pn(!0),n=null,i=Op,a=null,s=D3(l);t=typeof t=="function"?t:t===void 0?WW:Pn(t),e=typeof e=="function"?e:e===void 0?YW:Pn(e);function l(u){var h,f=(u=Gy(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";r_();A3();n_();t_();qW();o(Ka,"default")});function i_(t,e){return et?1:e>=t?0:NaN}var jW=M(()=>{"use strict";o(i_,"default")});function a_(t){return t}var KW=M(()=>{"use strict";o(a_,"default")});function R3(){var t=a_,e=i_,r=null,n=Pn(0),i=Pn(Ip),a=Pn(0);function s(l){var u,h=(l=Gy(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(Ip,Math.max(-Ip,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),_;for(u=0;u0&&(p+=_);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u0?_*d:0)+w,g[f]={data:l[f],index:u,value:_,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Pn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Pn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Pn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Pn(+l),s):a},s}var QW=M(()=>{"use strict";r_();A3();jW();KW();L3();o(R3,"default")});function s_(t){return new M3(t,!0)}function o_(t){return new M3(t,!1)}var M3,ZW=M(()=>{"use strict";M3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(s_,"bumpX");o(o_,"bumpY")});function Ks(){}var $y=M(()=>{"use strict";o(Ks,"default")});function Pp(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Vy(t){this._context=t}function Do(t){return new Vy(t)}var Uy=M(()=>{"use strict";o(Pp,"point");o(Vy,"Basis");Vy.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:Pp(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Pp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Do,"default")});function JW(t){this._context=t}function I3(t){return new JW(t)}var eY=M(()=>{"use strict";$y();Uy();o(JW,"BasisClosed");JW.prototype={areaStart:Ks,areaEnd:Ks,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Pp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(I3,"default")});function tY(t){this._context=t}function O3(t){return new tY(t)}var rY=M(()=>{"use strict";Uy();o(tY,"BasisOpen");tY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Pp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(O3,"default")});function nY(t,e){this._basis=new Vy(t),this._beta=e}var l_,iY=M(()=>{"use strict";Uy();o(nY,"Bundle");nY.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l_=o(function t(e){function r(n){return e===1?new Vy(n):new nY(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function Bp(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function P3(t,e){this._context=t,this._k=(1-e)/6}var c_,Hy=M(()=>{"use strict";o(Bp,"point");o(P3,"Cardinal");P3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Bp(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Bp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c_=o(function t(e){function r(n){return new P3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function B3(t,e){this._context=t,this._k=(1-e)/6}var u_,h_=M(()=>{"use strict";$y();Hy();o(B3,"CardinalClosed");B3.prototype={areaStart:Ks,areaEnd:Ks,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Bp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};u_=o(function t(e){function r(n){return new B3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function F3(t,e){this._context=t,this._k=(1-e)/6}var f_,d_=M(()=>{"use strict";Hy();o(F3,"CardinalOpen");F3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Bp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};f_=o(function t(e){function r(n){return new F3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Wy(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function aY(t,e){this._context=t,this._alpha=e}var p_,z3=M(()=>{"use strict";L3();Hy();o(Wy,"point");o(aY,"CatmullRom");aY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Wy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p_=o(function t(e){function r(n){return e?new aY(n,e):new P3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function sY(t,e){this._context=t,this._alpha=e}var m_,oY=M(()=>{"use strict";h_();$y();z3();o(sY,"CatmullRomClosed");sY.prototype={areaStart:Ks,areaEnd:Ks,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Wy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};m_=o(function t(e){function r(n){return e?new sY(n,e):new B3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function lY(t,e){this._context=t,this._alpha=e}var g_,cY=M(()=>{"use strict";d_();z3();o(lY,"CatmullRomOpen");lY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Wy(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};g_=o(function t(e){function r(n){return e?new lY(n,e):new F3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function uY(t){this._context=t}function G3(t){return new uY(t)}var hY=M(()=>{"use strict";$y();o(uY,"LinearClosed");uY.prototype={areaStart:Ks,areaEnd:Ks,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(G3,"default")});function fY(t){return t<0?-1:1}function dY(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(fY(a)+fY(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function pY(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function y_(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function $3(t){this._context=t}function mY(t){this._context=new gY(t)}function gY(t){this._context=t}function v_(t){return new $3(t)}function x_(t){return new mY(t)}var yY=M(()=>{"use strict";o(fY,"sign");o(dY,"slope3");o(pY,"slope2");o(y_,"point");o($3,"MonotoneX");$3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:y_(this,this._t0,pY(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,y_(this,pY(this,r=dY(this,t,e)),r);break;default:y_(this,this._t0,r=dY(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(mY,"MonotoneY");(mY.prototype=Object.create($3.prototype)).point=function(t,e){$3.prototype.point.call(this,e,t)};o(gY,"ReflectContext");gY.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(v_,"monotoneX");o(x_,"monotoneY")});function xY(t){this._context=t}function vY(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(xY,"Natural");xY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=vY(t),i=vY(e),a=0,s=1;s{"use strict";o(U3,"Step");U3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(H3,"default");o(b_,"stepBefore");o(w_,"stepAfter")});var TY=M(()=>{"use strict";UW();XW();QW();eY();rY();Uy();ZW();iY();h_();d_();Hy();oY();cY();z3();hY();n_();yY();bY();wY()});var kY=M(()=>{"use strict"});var EY=M(()=>{"use strict"});function Sh(t,e,r){this.k=t,this.x=e,this.y=r}function k_(t){for(;!t.__zoom;)if(!(t=t.parentNode))return T_;return t.__zoom}var T_,E_=M(()=>{"use strict";o(Sh,"Transform");Sh.prototype={constructor:Sh,scale:o(function(t){return t===1?this:new Sh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Sh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};T_=new Sh(1,0,0);k_.prototype=Sh.prototype;o(k_,"transform")});var SY=M(()=>{"use strict"});var CY=M(()=>{"use strict";s3();kY();EY();E_();SY()});var AY=M(()=>{"use strict";CY();E_()});var mr=M(()=>{"use strict";ph();iV();kH();AH();kp();_H();LH();b7();jV();DH();l8();NH();MH();S8();qH();XH();Cp();d8();jH();RH();KH();BW();GW();gl();TY();S3();K8();e3();s3();AY()});var _Y=Ni(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|:)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var Fp=Ni(W3=>{"use strict";Object.defineProperty(W3,"__esModule",{value:!0});W3.sanitizeUrl=void 0;var Sa=_Y();function pEe(t){return Sa.relativeFirstCharacters.indexOf(t[0])>-1}o(pEe,"isRelativeUrlWithoutProtocol");function mEe(t){var e=t.replace(Sa.ctrlCharactersRegex,"");return e.replace(Sa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(mEe,"decodeHtmlCharacters");function gEe(t){return URL.canParse(t)}o(gEe,"isValidUrl");function LY(t){try{return decodeURIComponent(t)}catch{return t}}o(LY,"decodeURI");function yEe(t){if(!t)return Sa.BLANK_URL;var e,r=LY(t.trim());do r=mEe(r).replace(Sa.htmlCtrlEntityRegex,"").replace(Sa.ctrlCharactersRegex,"").replace(Sa.whitespaceEscapeCharsRegex,"").trim(),r=LY(r),e=r.match(Sa.ctrlCharactersRegex)||r.match(Sa.htmlEntitiesRegex)||r.match(Sa.htmlCtrlEntityRegex)||r.match(Sa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Sa.BLANK_URL;if(pEe(n))return n;var i=n.trimStart(),a=i.match(Sa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Sa.invalidProtocolRegex.test(s))return Sa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!gEe(l))return Sa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(yEe,"sanitizeUrl");W3.sanitizeUrl=yEe});var S_,md,Y3,DY,NY,RY,Sl,Yy,qy=M(()=>{"use strict";S_=ka(Fp(),1);fr();md=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),Y3=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};md(t,r).lower()},"drawBackgroundRect"),DY=o((t,e)=>{let r=e.text.replace(jf," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),NY=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,S_.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),RY=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,S_.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Sl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Yy=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var MY,C_,IY,vEe,xEe,bEe,wEe,TEe,kEe,EEe,SEe,CEe,AEe,_Ee,LEe,vu,Cl,OY=M(()=>{"use strict";fr();qy();MY=ka(Fp(),1),C_=o(function(t,e){return md(t,e)},"drawRect"),IY=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,MY.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),vEe=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();vu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),vu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),xEe=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};C_(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,vu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,vu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,vu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),bEe=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Sl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},C_(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=LEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":IY(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,vu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?vu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&vu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,vu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),wEe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),TEe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),kEe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),EEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),SEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),CEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),AEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),_Ee=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),LEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),vu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(je.lineBreakRegex);for(let v=0;v{"use strict";DEe=typeof global=="object"&&global&&global.Object===Object&&global,X3=DEe});var NEe,REe,ai,No=M(()=>{"use strict";A_();NEe=typeof self=="object"&&self&&self.Object===Object&&self,REe=X3||NEe||Function("return this")(),ai=REe});var MEe,ea,gd=M(()=>{"use strict";No();MEe=ai.Symbol,ea=MEe});function PEe(t){var e=IEe.call(t,Xy),r=t[Xy];try{t[Xy]=void 0;var n=!0}catch{}var i=OEe.call(t);return n&&(e?t[Xy]=r:delete t[Xy]),i}var PY,IEe,OEe,Xy,BY,FY=M(()=>{"use strict";gd();PY=Object.prototype,IEe=PY.hasOwnProperty,OEe=PY.toString,Xy=ea?ea.toStringTag:void 0;o(PEe,"getRawTag");BY=PEe});function zEe(t){return FEe.call(t)}var BEe,FEe,zY,GY=M(()=>{"use strict";BEe=Object.prototype,FEe=BEe.toString;o(zEe,"objectToString");zY=zEe});function VEe(t){return t==null?t===void 0?$Ee:GEe:$Y&&$Y in Object(t)?BY(t):zY(t)}var GEe,$Ee,$Y,ca,xu=M(()=>{"use strict";gd();FY();GY();GEe="[object Null]",$Ee="[object Undefined]",$Y=ea?ea.toStringTag:void 0;o(VEe,"baseGetTag");ca=VEe});function UEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var yn,Qs=M(()=>{"use strict";o(UEe,"isObject");yn=UEe});function XEe(t){if(!yn(t))return!1;var e=ca(t);return e==WEe||e==YEe||e==HEe||e==qEe}var HEe,WEe,YEe,qEe,Ei,jy=M(()=>{"use strict";xu();Qs();HEe="[object AsyncFunction]",WEe="[object Function]",YEe="[object GeneratorFunction]",qEe="[object Proxy]";o(XEe,"isFunction");Ei=XEe});var jEe,j3,VY=M(()=>{"use strict";No();jEe=ai["__core-js_shared__"],j3=jEe});function KEe(t){return!!UY&&UY in t}var UY,HY,WY=M(()=>{"use strict";VY();UY=function(){var t=/[^.]+$/.exec(j3&&j3.keys&&j3.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(KEe,"isMasked");HY=KEe});function JEe(t){if(t!=null){try{return ZEe.call(t)}catch{}try{return t+""}catch{}}return""}var QEe,ZEe,bu,__=M(()=>{"use strict";QEe=Function.prototype,ZEe=QEe.toString;o(JEe,"toSource");bu=JEe});function o6e(t){if(!yn(t)||HY(t))return!1;var e=Ei(t)?s6e:t6e;return e.test(bu(t))}var e6e,t6e,r6e,n6e,i6e,a6e,s6e,YY,qY=M(()=>{"use strict";jy();WY();Qs();__();e6e=/[\\^$.*+?()[\]{}|]/g,t6e=/^\[object .+?Constructor\]$/,r6e=Function.prototype,n6e=Object.prototype,i6e=r6e.toString,a6e=n6e.hasOwnProperty,s6e=RegExp("^"+i6e.call(a6e).replace(e6e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(o6e,"baseIsNative");YY=o6e});function l6e(t,e){return t?.[e]}var XY,jY=M(()=>{"use strict";o(l6e,"getValue");XY=l6e});function c6e(t,e){var r=XY(t,e);return YY(r)?r:void 0}var vs,Ch=M(()=>{"use strict";qY();jY();o(c6e,"getNative");vs=c6e});var u6e,wu,Ky=M(()=>{"use strict";Ch();u6e=vs(Object,"create"),wu=u6e});function h6e(){this.__data__=wu?wu(null):{},this.size=0}var KY,QY=M(()=>{"use strict";Ky();o(h6e,"hashClear");KY=h6e});function f6e(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var ZY,JY=M(()=>{"use strict";o(f6e,"hashDelete");ZY=f6e});function g6e(t){var e=this.__data__;if(wu){var r=e[t];return r===d6e?void 0:r}return m6e.call(e,t)?e[t]:void 0}var d6e,p6e,m6e,eq,tq=M(()=>{"use strict";Ky();d6e="__lodash_hash_undefined__",p6e=Object.prototype,m6e=p6e.hasOwnProperty;o(g6e,"hashGet");eq=g6e});function x6e(t){var e=this.__data__;return wu?e[t]!==void 0:v6e.call(e,t)}var y6e,v6e,rq,nq=M(()=>{"use strict";Ky();y6e=Object.prototype,v6e=y6e.hasOwnProperty;o(x6e,"hashHas");rq=x6e});function w6e(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=wu&&e===void 0?b6e:e,this}var b6e,iq,aq=M(()=>{"use strict";Ky();b6e="__lodash_hash_undefined__";o(w6e,"hashSet");iq=w6e});function zp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";QY();JY();tq();nq();aq();o(zp,"Hash");zp.prototype.clear=KY;zp.prototype.delete=ZY;zp.prototype.get=eq;zp.prototype.has=rq;zp.prototype.set=iq;L_=zp});function T6e(){this.__data__=[],this.size=0}var oq,lq=M(()=>{"use strict";o(T6e,"listCacheClear");oq=T6e});function k6e(t,e){return t===e||t!==t&&e!==e}var Ro,yd=M(()=>{"use strict";o(k6e,"eq");Ro=k6e});function E6e(t,e){for(var r=t.length;r--;)if(Ro(t[r][0],e))return r;return-1}var Ah,Qy=M(()=>{"use strict";yd();o(E6e,"assocIndexOf");Ah=E6e});function A6e(t){var e=this.__data__,r=Ah(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():C6e.call(e,r,1),--this.size,!0}var S6e,C6e,cq,uq=M(()=>{"use strict";Qy();S6e=Array.prototype,C6e=S6e.splice;o(A6e,"listCacheDelete");cq=A6e});function _6e(t){var e=this.__data__,r=Ah(e,t);return r<0?void 0:e[r][1]}var hq,fq=M(()=>{"use strict";Qy();o(_6e,"listCacheGet");hq=_6e});function L6e(t){return Ah(this.__data__,t)>-1}var dq,pq=M(()=>{"use strict";Qy();o(L6e,"listCacheHas");dq=L6e});function D6e(t,e){var r=this.__data__,n=Ah(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var mq,gq=M(()=>{"use strict";Qy();o(D6e,"listCacheSet");mq=D6e});function Gp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";lq();uq();fq();pq();gq();o(Gp,"ListCache");Gp.prototype.clear=oq;Gp.prototype.delete=cq;Gp.prototype.get=hq;Gp.prototype.has=dq;Gp.prototype.set=mq;_h=Gp});var N6e,Lh,K3=M(()=>{"use strict";Ch();No();N6e=vs(ai,"Map"),Lh=N6e});function R6e(){this.size=0,this.__data__={hash:new L_,map:new(Lh||_h),string:new L_}}var yq,vq=M(()=>{"use strict";sq();Zy();K3();o(R6e,"mapCacheClear");yq=R6e});function M6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var xq,bq=M(()=>{"use strict";o(M6e,"isKeyable");xq=M6e});function I6e(t,e){var r=t.__data__;return xq(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Dh,Jy=M(()=>{"use strict";bq();o(I6e,"getMapData");Dh=I6e});function O6e(t){var e=Dh(this,t).delete(t);return this.size-=e?1:0,e}var wq,Tq=M(()=>{"use strict";Jy();o(O6e,"mapCacheDelete");wq=O6e});function P6e(t){return Dh(this,t).get(t)}var kq,Eq=M(()=>{"use strict";Jy();o(P6e,"mapCacheGet");kq=P6e});function B6e(t){return Dh(this,t).has(t)}var Sq,Cq=M(()=>{"use strict";Jy();o(B6e,"mapCacheHas");Sq=B6e});function F6e(t,e){var r=Dh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var Aq,_q=M(()=>{"use strict";Jy();o(F6e,"mapCacheSet");Aq=F6e});function $p(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";vq();Tq();Eq();Cq();_q();o($p,"MapCache");$p.prototype.clear=yq;$p.prototype.delete=wq;$p.prototype.get=kq;$p.prototype.has=Sq;$p.prototype.set=Aq;vd=$p});function D_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(z6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(D_.Cache||vd),r}var z6e,Vp,N_=M(()=>{"use strict";Q3();z6e="Expected a function";o(D_,"memoize");D_.Cache=vd;Vp=D_});function G6e(){this.__data__=new _h,this.size=0}var Lq,Dq=M(()=>{"use strict";Zy();o(G6e,"stackClear");Lq=G6e});function $6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var Nq,Rq=M(()=>{"use strict";o($6e,"stackDelete");Nq=$6e});function V6e(t){return this.__data__.get(t)}var Mq,Iq=M(()=>{"use strict";o(V6e,"stackGet");Mq=V6e});function U6e(t){return this.__data__.has(t)}var Oq,Pq=M(()=>{"use strict";o(U6e,"stackHas");Oq=U6e});function W6e(t,e){var r=this.__data__;if(r instanceof _h){var n=r.__data__;if(!Lh||n.length{"use strict";Zy();K3();Q3();H6e=200;o(W6e,"stackSet");Bq=W6e});function Up(t){var e=this.__data__=new _h(t);this.size=e.size}var uc,ev=M(()=>{"use strict";Zy();Dq();Rq();Iq();Pq();Fq();o(Up,"Stack");Up.prototype.clear=Lq;Up.prototype.delete=Nq;Up.prototype.get=Mq;Up.prototype.has=Oq;Up.prototype.set=Bq;uc=Up});var Y6e,Hp,R_=M(()=>{"use strict";Ch();Y6e=function(){try{var t=vs(Object,"defineProperty");return t({},"",{}),t}catch{}}(),Hp=Y6e});function q6e(t,e,r){e=="__proto__"&&Hp?Hp(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var hc,Wp=M(()=>{"use strict";R_();o(q6e,"baseAssignValue");hc=q6e});function X6e(t,e,r){(r!==void 0&&!Ro(t[e],r)||r===void 0&&!(e in t))&&hc(t,e,r)}var tv,M_=M(()=>{"use strict";Wp();yd();o(X6e,"assignMergeValue");tv=X6e});function j6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var zq,Gq=M(()=>{"use strict";o(j6e,"createBaseFor");zq=j6e});var K6e,Yp,Z3=M(()=>{"use strict";Gq();K6e=zq(),Yp=K6e});function Z6e(t,e){if(e)return t.slice();var r=t.length,n=Uq?Uq(r):new t.constructor(r);return t.copy(n),n}var Hq,$q,Q6e,Vq,Uq,J3,I_=M(()=>{"use strict";No();Hq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,$q=Hq&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=$q&&$q.exports===Hq,Vq=Q6e?ai.Buffer:void 0,Uq=Vq?Vq.allocUnsafe:void 0;o(Z6e,"cloneBuffer");J3=Z6e});var J6e,qp,O_=M(()=>{"use strict";No();J6e=ai.Uint8Array,qp=J6e});function eSe(t){var e=new t.constructor(t.byteLength);return new qp(e).set(new qp(t)),e}var Xp,e5=M(()=>{"use strict";O_();o(eSe,"cloneArrayBuffer");Xp=eSe});function tSe(t,e){var r=e?Xp(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var t5,P_=M(()=>{"use strict";e5();o(tSe,"cloneTypedArray");t5=tSe});function rSe(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(rSe,"copyArray");r5=rSe});var Wq,nSe,Yq,qq=M(()=>{"use strict";Qs();Wq=Object.create,nSe=function(){function t(){}return o(t,"object"),function(e){if(!yn(e))return{};if(Wq)return Wq(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Yq=nSe});function iSe(t,e){return function(r){return t(e(r))}}var n5,F_=M(()=>{"use strict";o(iSe,"overArg");n5=iSe});var aSe,jp,i5=M(()=>{"use strict";F_();aSe=n5(Object.getPrototypeOf,Object),jp=aSe});function oSe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||sSe;return t===r}var sSe,fc,Kp=M(()=>{"use strict";sSe=Object.prototype;o(oSe,"isPrototype");fc=oSe});function lSe(t){return typeof t.constructor=="function"&&!fc(t)?Yq(jp(t)):{}}var a5,z_=M(()=>{"use strict";qq();i5();Kp();o(lSe,"initCloneObject");a5=lSe});function cSe(t){return t!=null&&typeof t=="object"}var Zn,Mo=M(()=>{"use strict";o(cSe,"isObjectLike");Zn=cSe});function hSe(t){return Zn(t)&&ca(t)==uSe}var uSe,G_,Xq=M(()=>{"use strict";xu();Mo();uSe="[object Arguments]";o(hSe,"baseIsArguments");G_=hSe});var jq,fSe,dSe,pSe,Al,Qp=M(()=>{"use strict";Xq();Mo();jq=Object.prototype,fSe=jq.hasOwnProperty,dSe=jq.propertyIsEnumerable,pSe=G_(function(){return arguments}())?G_:function(t){return Zn(t)&&fSe.call(t,"callee")&&!dSe.call(t,"callee")},Al=pSe});var mSe,Mt,Vn=M(()=>{"use strict";mSe=Array.isArray,Mt=mSe});function ySe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=gSe}var gSe,Zp,s5=M(()=>{"use strict";gSe=9007199254740991;o(ySe,"isLength");Zp=ySe});function vSe(t){return t!=null&&Zp(t.length)&&!Ei(t)}var si,Io=M(()=>{"use strict";jy();s5();o(vSe,"isArrayLike");si=vSe});function xSe(t){return Zn(t)&&si(t)}var xd,o5=M(()=>{"use strict";Io();Mo();o(xSe,"isArrayLikeObject");xd=xSe});function bSe(){return!1}var Kq,Qq=M(()=>{"use strict";o(bSe,"stubFalse");Kq=bSe});var eX,Zq,wSe,Jq,TSe,kSe,_l,Jp=M(()=>{"use strict";No();Qq();eX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Zq=eX&&typeof module=="object"&&module&&!module.nodeType&&module,wSe=Zq&&Zq.exports===eX,Jq=wSe?ai.Buffer:void 0,TSe=Jq?Jq.isBuffer:void 0,kSe=TSe||Kq,_l=kSe});function LSe(t){if(!Zn(t)||ca(t)!=ESe)return!1;var e=jp(t);if(e===null)return!0;var r=ASe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&tX.call(r)==_Se}var ESe,SSe,CSe,tX,ASe,_Se,rX,nX=M(()=>{"use strict";xu();i5();Mo();ESe="[object Object]",SSe=Function.prototype,CSe=Object.prototype,tX=SSe.toString,ASe=CSe.hasOwnProperty,_Se=tX.call(Object);o(LSe,"isPlainObject");rX=LSe});function eCe(t){return Zn(t)&&Zp(t.length)&&!!Bn[ca(t)]}var DSe,NSe,RSe,MSe,ISe,OSe,PSe,BSe,FSe,zSe,GSe,$Se,VSe,USe,HSe,WSe,YSe,qSe,XSe,jSe,KSe,QSe,ZSe,JSe,Bn,iX,aX=M(()=>{"use strict";xu();s5();Mo();DSe="[object Arguments]",NSe="[object Array]",RSe="[object Boolean]",MSe="[object Date]",ISe="[object Error]",OSe="[object Function]",PSe="[object Map]",BSe="[object Number]",FSe="[object Object]",zSe="[object RegExp]",GSe="[object Set]",$Se="[object String]",VSe="[object WeakMap]",USe="[object ArrayBuffer]",HSe="[object DataView]",WSe="[object Float32Array]",YSe="[object Float64Array]",qSe="[object Int8Array]",XSe="[object Int16Array]",jSe="[object Int32Array]",KSe="[object Uint8Array]",QSe="[object Uint8ClampedArray]",ZSe="[object Uint16Array]",JSe="[object Uint32Array]",Bn={};Bn[WSe]=Bn[YSe]=Bn[qSe]=Bn[XSe]=Bn[jSe]=Bn[KSe]=Bn[QSe]=Bn[ZSe]=Bn[JSe]=!0;Bn[DSe]=Bn[NSe]=Bn[USe]=Bn[RSe]=Bn[HSe]=Bn[MSe]=Bn[ISe]=Bn[OSe]=Bn[PSe]=Bn[BSe]=Bn[FSe]=Bn[zSe]=Bn[GSe]=Bn[$Se]=Bn[VSe]=!1;o(eCe,"baseIsTypedArray");iX=eCe});function tCe(t){return function(e){return t(e)}}var Oo,bd=M(()=>{"use strict";o(tCe,"baseUnary");Oo=tCe});var sX,rv,rCe,$_,nCe,Po,nv=M(()=>{"use strict";A_();sX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,rv=sX&&typeof module=="object"&&module&&!module.nodeType&&module,rCe=rv&&rv.exports===sX,$_=rCe&&X3.process,nCe=function(){try{var t=rv&&rv.require&&rv.require("util").types;return t||$_&&$_.binding&&$_.binding("util")}catch{}}(),Po=nCe});var oX,iCe,Nh,iv=M(()=>{"use strict";aX();bd();nv();oX=Po&&Po.isTypedArray,iCe=oX?Oo(oX):iX,Nh=iCe});function aCe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var av,V_=M(()=>{"use strict";o(aCe,"safeGet");av=aCe});function lCe(t,e,r){var n=t[e];(!(oCe.call(t,e)&&Ro(n,r))||r===void 0&&!(e in t))&&hc(t,e,r)}var sCe,oCe,dc,em=M(()=>{"use strict";Wp();yd();sCe=Object.prototype,oCe=sCe.hasOwnProperty;o(lCe,"assignValue");dc=lCe});function cCe(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";em();Wp();o(cCe,"copyObject");Bo=cCe});function uCe(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(uCe,"baseTimes");lX=uCe});function dCe(t,e){var r=typeof t;return e=e??hCe,!!e&&(r=="number"||r!="symbol"&&fCe.test(t))&&t>-1&&t%1==0&&t{"use strict";hCe=9007199254740991,fCe=/^(?:0|[1-9]\d*)$/;o(dCe,"isIndex");Rh=dCe});function gCe(t,e){var r=Mt(t),n=!r&&Al(t),i=!r&&!n&&_l(t),a=!r&&!n&&!i&&Nh(t),s=r||n||i||a,l=s?lX(t.length,String):[],u=l.length;for(var h in t)(e||mCe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Rh(h,u)))&&l.push(h);return l}var pCe,mCe,l5,U_=M(()=>{"use strict";cX();Qp();Vn();Jp();sv();iv();pCe=Object.prototype,mCe=pCe.hasOwnProperty;o(gCe,"arrayLikeKeys");l5=gCe});function yCe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var uX,hX=M(()=>{"use strict";o(yCe,"nativeKeysIn");uX=yCe});function bCe(t){if(!yn(t))return uX(t);var e=fc(t),r=[];for(var n in t)n=="constructor"&&(e||!xCe.call(t,n))||r.push(n);return r}var vCe,xCe,fX,dX=M(()=>{"use strict";Qs();Kp();hX();vCe=Object.prototype,xCe=vCe.hasOwnProperty;o(bCe,"baseKeysIn");fX=bCe});function wCe(t){return si(t)?l5(t,!0):fX(t)}var xs,Mh=M(()=>{"use strict";U_();dX();Io();o(wCe,"keysIn");xs=wCe});function TCe(t){return Bo(t,xs(t))}var pX,mX=M(()=>{"use strict";wd();Mh();o(TCe,"toPlainObject");pX=TCe});function kCe(t,e,r,n,i,a,s){var l=av(t,r),u=av(e,r),h=s.get(u);if(h){tv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Mt(u),m=!p&&_l(u),g=!p&&!m&&Nh(u);f=u,p||m||g?Mt(l)?f=l:xd(l)?f=r5(l):m?(d=!1,f=J3(u,!0)):g?(d=!1,f=t5(u,!0)):f=[]:rX(u)||Al(u)?(f=l,Al(l)?f=pX(l):(!yn(l)||Ei(l))&&(f=a5(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),tv(t,r,f)}var gX,yX=M(()=>{"use strict";M_();I_();P_();B_();z_();Qp();Vn();o5();Jp();jy();Qs();nX();iv();V_();mX();o(kCe,"baseMergeDeep");gX=kCe});function vX(t,e,r,n,i){t!==e&&Yp(e,function(a,s){if(i||(i=new uc),yn(a))gX(t,e,s,r,vX,n,i);else{var l=n?n(av(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),tv(t,s,l)}},xs)}var xX,bX=M(()=>{"use strict";ev();M_();Z3();yX();Qs();Mh();V_();o(vX,"baseMerge");xX=vX});function ECe(t){return t}var ta,Tu=M(()=>{"use strict";o(ECe,"identity");ta=ECe});function SCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var wX,TX=M(()=>{"use strict";o(SCe,"apply");wX=SCe});function CCe(t,e,r){return e=kX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=kX(n.length-e,0),s=Array(a);++i{"use strict";TX();kX=Math.max;o(CCe,"overRest");c5=CCe});function ACe(t){return function(){return t}}var bs,W_=M(()=>{"use strict";o(ACe,"constant");bs=ACe});var _Ce,EX,SX=M(()=>{"use strict";W_();R_();Tu();_Ce=Hp?function(t,e){return Hp(t,"toString",{configurable:!0,enumerable:!1,value:bs(e),writable:!0})}:ta,EX=_Ce});function RCe(t){var e=0,r=0;return function(){var n=NCe(),i=DCe-(n-r);if(r=n,i>0){if(++e>=LCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var LCe,DCe,NCe,CX,AX=M(()=>{"use strict";LCe=800,DCe=16,NCe=Date.now;o(RCe,"shortOut");CX=RCe});var MCe,u5,Y_=M(()=>{"use strict";SX();AX();MCe=CX(EX),u5=MCe});function ICe(t,e){return u5(c5(t,e,ta),t+"")}var pc,tm=M(()=>{"use strict";Tu();H_();Y_();o(ICe,"baseRest");pc=ICe});function OCe(t,e,r){if(!yn(r))return!1;var n=typeof e;return(n=="number"?si(r)&&Rh(e,r.length):n=="string"&&e in r)?Ro(r[e],t):!1}var Zs,Td=M(()=>{"use strict";yd();Io();sv();Qs();o(OCe,"isIterateeCall");Zs=OCe});function PCe(t){return pc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&Zs(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";tm();Td();o(PCe,"createAssigner");h5=PCe});var BCe,Ih,X_=M(()=>{"use strict";bX();q_();BCe=h5(function(t,e,r){xX(t,e,r)}),Ih=BCe});function Q_(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return FCe[r]??e}function VCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,DX.sanitizeUrl)(r):r}function MX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function HCe(t){let e,r=0;t.forEach(i=>{r+=MX(i,e),e=i});let n=r/2;return Z_(t,n)}function WCe(t){return t.length===1?t[0]:HCe(t)}function qCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=Z_(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function J_(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function XCe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";DX=ka(Fp(),1);mr();fr();KS();ht();$f();ip();N_();X_();Pb();K_="\u200B",FCe={curveBasis:Do,curveBasisClosed:I3,curveBasisOpen:O3,curveBumpX:s_,curveBumpY:o_,curveBundle:l_,curveCardinalClosed:u_,curveCardinalOpen:f_,curveCardinal:c_,curveCatmullRomClosed:m_,curveCatmullRomOpen:g_,curveCatmullRom:p_,curveLinear:Op,curveLinearClosed:G3,curveMonotoneX:v_,curveMonotoneY:x_,curveNatural:V3,curveStep:H3,curveStepAfter:w_,curveStepBefore:b_},zCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,GCe=o(function(t,e){let r=NX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);op(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=np(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),NX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${zCe.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=zf.exec(t))!==null;)if(n.index===zf.lastIndex&&zf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),RX=o(function(t){return t.replace(zf,"")},"removeDirectives"),$Ce=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(Q_,"interpolateToCurve");o(VCe,"formatUrl");UCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),Z_=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=MX(i,r);if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:_X((1-s)*r.x+s*i.x,5),y:_X((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),YCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=Z_(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(qCe,"calcTerminalLabelPosition");o(J_,"getStylesFromArray");LX=0,e9=o(()=>(LX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+LX),"generateId");o(XCe,"makeRandomHex");t9=o(t=>XCe(t.length),"random"),jCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),KCe=o(function(t,e){let r=e.text.replace(je.lineBreakRegex," "),[,n]=Fo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),r9=Vp((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
    "},r),je.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=Js(`${s} `,r),h=Js(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=QCe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),QCe=Vp((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(Js(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(d5,"calculateTextHeight");o(Js,"calculateTextWidth");n9=Vp((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Fo(r),s=["sans-serif",n],l=t.split(je.lineBreakRegex),u=[],h=ze("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=jCe();v.text=y||K_;let x=KCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),j_=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},ZCe=o(function(t){return f5=f5||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),f5.innerHTML=t,unescape(f5.textContent)},"entityDecode");o(i9,"isDetailedError");JCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Fo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(ws,"cleanAndMerge");Ut={assignWithDepth:Gn,wrapLabel:r9,calculateTextHeight:d5,calculateTextWidth:Js,calculateTextDimensions:n9,cleanAndMerge:ws,detectInit:GCe,detectDirective:NX,isSubstringInArray:$Ce,interpolateToCurve:Q_,calcLabelPosition:WCe,calcCardinalityPosition:YCe,calcTerminalLabelPosition:qCe,formatUrl:VCe,getStylesFromArray:J_,generateId:e9,random:t9,runFunc:UCe,entityDecode:ZCe,insertTitle:JCe,parseFontSize:Fo,InitIDGenerator:j_},IX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),Ca=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),p5=o((t,e,{counter:r=0,prefix:n,suffix:i})=>`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o(Fn,"handleUndefinedAttr")});function Ll(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=r9(e[t].text,i,n),e[t].textLines=e[t].text.split(je.lineBreakRegex).length,e[t].width=i,e[t].height=d5(e[t].text,n);else{let a=e[t].text.split(je.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(Js(l,n),e[t].width),s=d5(l,n),e[t].height=e[t].height+s}}function zX(t,e,r,n,i){let a=new v5(i);a.data.widthLimit=r.data.widthLimit/Math.min(a9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Gt.wrap,f=m5(Gt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ll("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=m5(Gt);Ll("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=m5(Gt);g.fontSize=g.fontSize-2,Ll("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%a9===0){let g=r.data.startx+Gt.diagramMarginX,y=r.data.stopy+Gt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Gt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&FX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&zX(t,e,a,m,i),l.alias!=="global"&&BX(t,l,a),r.data.stopy=Math.max(a.data.stopy+Gt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Gt.c4ShapeMargin,r.data.stopx),g5=Math.max(g5,r.data.stopx),y5=Math.max(y5,r.data.stopy)}}var g5,y5,PX,a9,Gt,v5,s9,ov,m5,e7e,BX,FX,Ts,OX,t7e,r7e,n7e,o9,GX=M(()=>{"use strict";mr();OY();ht();PS();fr();l7();Vt();ip();hr();ni();g5=0,y5=0,PX=4,a9=2;I1.yy=oy;Gt={},v5=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,s9(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>PX)&&(r=this.nextData.startx+e.margin+Gt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},s9(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},s9=o(function(t){Gn(Gt,t),t.fontFamily&&(Gt.personFontFamily=Gt.systemFontFamily=Gt.messageFontFamily=t.fontFamily),t.fontSize&&(Gt.personFontSize=Gt.systemFontSize=Gt.messageFontSize=t.fontSize),t.fontWeight&&(Gt.personFontWeight=Gt.systemFontWeight=Gt.messageFontWeight=t.fontWeight)},"setConf"),ov=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),m5=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),e7e=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Ll,"calcC4ShapeTextWH");BX=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Gt.c4ShapeMargin-35;let n=e.wrap&&Gt.wrap,i=m5(Gt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=Js(e.label.text,i);Ll("label",e,n,i,a),Cl.drawBoundary(t,e,Gt)},"drawBoundary"),FX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=ov(Gt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=Js("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Gt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Gt.wrap,h=Gt.width-Gt.c4ShapePadding*2,f=ov(Gt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ll("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=ov(Gt,s.typeC4Shape.text);Ll("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=ov(Gt,s.techn.text);Ll("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=ov(Gt,s.typeC4Shape.text);Ll("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Gt.c4ShapePadding,s.width=Math.max(s.width||Gt.width,p,Gt.width),s.height=Math.max(s.height||Gt.height,d,Gt.height),s.margin=s.margin||Gt.c4ShapeMargin,t.insert(s),Cl.drawC4Shape(e,s,Gt)}t.bumpLastMargin(Gt.c4ShapeMargin)},"drawC4ShapeArray"),Ts=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},OX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ts(r,l):r==i&&na&&(p=new Ts(s,n)),r>i&&n=f?p=new Ts(r,l+f*t.width/2):p=new Ts(s-u/h*t.height/2,n+t.height):r=f?p=new Ts(r+t.width,l+f*t.width/2):p=new Ts(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ts(r+t.width,l-f*t.width/2):p=new Ts(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ts(r,l-t.width/2*f):p=new Ts(s-t.height/2*u/h,n)),p},"getIntersectPoint"),t7e=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=OX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=OX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),r7e=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Gt.wrap,l=e7e(Gt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=Js(a.label.text,l);Ll("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=Js(a.techn.text,l),Ll("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=Js(a.descr.text,l),Ll("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=t7e(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Cl.drawRels(t,e,Gt)},"drawRels");o(zX,"drawInsideBoundary");n7e=o(function(t,e,r,n){Gt=de().c4;let i=de().securityLevel,a;i==="sandbox"&&(a=ze("#i"+e));let s=i==="sandbox"?ze(a.nodes()[0].contentDocument.body):ze("body"),l=n.db;n.db.setWrap(Gt.wrap),PX=l.getC4ShapeInRow(),a9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Gt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):ze(`[id="${e}"]`);Cl.insertComputerIcon(u),Cl.insertDatabaseIcon(u),Cl.insertClockIcon(u);let h=new v5(n);h.setData(Gt.diagramMarginX,Gt.diagramMarginX,Gt.diagramMarginY,Gt.diagramMarginY),h.data.widthLimit=screen.availWidth,g5=Gt.diagramMarginX,y5=Gt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");zX(u,"",h,d,n),Cl.insertArrowHead(u),Cl.insertArrowEnd(u),Cl.insertArrowCrossHead(u),Cl.insertArrowFilledHead(u),r7e(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=g5,h.data.stopy=y5;let p=h.data,g=p.stopy-p.starty+2*Gt.diagramMarginY,v=p.stopx-p.startx+2*Gt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Gt.diagramMarginX).attr("y",p.starty+Gt.diagramMarginY),Zr(u,g,v,Gt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Gt.diagramMarginX+" -"+(Gt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),o9={drawPersonOrSystemArray:FX,drawBoundary:BX,setConf:s9,draw:n7e}});var i7e,$X,VX=M(()=>{"use strict";i7e=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),$X=i7e});var UX={};vr(UX,{diagram:()=>a7e});var a7e,HX=M(()=>{"use strict";PS();l7();GX();VX();a7e={parser:QF,db:oy,renderer:o9,styles:$X,init:o(({c4:t,wrap:e})=>{o9.setConf(t),oy.setWrap(e)},"init")}});function u9(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function ZX(t){Ed=t}function eo(t,e){if(e){if(JX.test(t))return t.replace(c7e,qX)}else if(ej.test(t))return t.replace(u7e,qX);return t}function d7e(t){return t.replace(f7e,(e,r)=>(r=r.toLowerCase(),r==="colon"?":":r.charAt(0)==="#"?r.charAt(1)==="x"?String.fromCharCode(parseInt(r.substring(2),16)):String.fromCharCode(+r.substring(1)):""))}function fn(t,e){let r=typeof t=="string"?t:t.source;e=e||"";let n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(p7e,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function XX(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}function jX(t,e){let r=t.replace(/\|/g,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length{let a=i.match(/^\s+/);if(a===null)return i;let[s]=a;return s.length>=n.length?i.slice(n.length):i}).join(` +`)}function en(t,e){return kd.parse(t,e)}var Ed,JX,c7e,ej,u7e,h7e,qX,f7e,p7e,uv,nm,y7e,v7e,x7e,fv,b7e,tj,rj,h9,w7e,f9,T7e,k7e,w5,d9,E7e,nj,S7e,p9,QX,C7e,A7e,ij,_7e,aj,L7e,dv,D7e,N7e,R7e,M7e,I7e,O7e,P7e,B7e,F7e,b5,z7e,sj,oj,G7e,m9,$7e,l9,V7e,x5,cv,ku,im,hv,Eu,rm,c9,kd,u6t,h6t,f6t,d6t,p6t,m6t,g6t,lj=M(()=>{"use strict";o(u9,"_getDefaults");Ed=u9();o(ZX,"changeDefaults");JX=/[&<>"']/,c7e=new RegExp(JX.source,"g"),ej=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,u7e=new RegExp(ej.source,"g"),h7e={"&":"&","<":"<",">":">",'"':""","'":"'"},qX=o(t=>h7e[t],"getEscapeReplacement");o(eo,"escape$1");f7e=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;o(d7e,"unescape");p7e=/(^|[^\[])\^/g;o(fn,"edit");o(XX,"cleanUrl");uv={exec:o(()=>null,"exec")};o(jX,"splitCells");o(lv,"rtrim");o(m7e,"findClosingBracket");o(KX,"outputLink");o(g7e,"indentCodeCompensation");nm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Ed}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:lv(n,` +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=g7e(n,r[3]||"");return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(/#$/.test(n)){let i=lv(n,"#");(this.options.pedantic||!i||/ $/.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:lv(r[0],` +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=lv(r[0],` +`).split(` +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h/.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` +`),d=f.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` + $1`).replace(/^ {0,3}>[ \t]?/gm,"");i=i?`${i} +${f}`:f,a=a?`${a} +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s[s.length-1];if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s[s.length-1].raw.length).split(` +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),l=!1;for(;e;){let u=!1,h="",f="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;h=r[0],e=e.substring(h.length);let d=r[2].split(` +`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),p=e.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=r[1].length+1:(g=r[2].search(/[^ ]/),g=g>4?1:g,f=d.slice(g),g+=r[1].length),m&&/^ *$/.test(p)&&(h+=p+` +`,e=e.substring(p.length+1),u=!0),!u){let x=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,g-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),w=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:\`\`\`|~~~)`),_=new RegExp(`^ {0,${Math.min(3,g-1)}}#`);for(;e;){let T=e.split(` +`,1)[0];if(p=T,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),w.test(p)||_.test(p)||x.test(p)||b.test(e))break;if(p.search(/[^ ]/)>=g||!p.trim())f+=` +`+p.slice(g);else{if(m||d.search(/[^ ]/)>=4||w.test(d)||_.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=T+` +`,e=e.substring(T.length+1),d=p.slice(g)}}a.loose||(l?a.loose=!0:/\n *\n *$/.test(h)&&(l=!0));let y=null,v;this.options.gfm&&(y=/^\[[ xX]\] /.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),a.raw+=h}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>/\n.*\n/.test(d.raw));a.loose=f}if(a.loose)for(let u=0;u$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!/[:|]/.test(r[2]))return;let n=jX(r[1]),i=r[2].replace(/^\||\| *$/g,"").split("|"),a=r[3]&&r[3].trim()?r[3].replace(/\n[ \t]*$/,"").split(` +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)/^ *-+: *$/.test(l)?s.align.push("right"):/^ *:-+: *$/.test(l)?s.align.push("center"):/^ *:-+ *$/.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:eo(r[1])}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&/^
    /i.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;let s=lv(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=m7e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),/^$/.test(n)?i=i.slice(1):i=i.slice(1,-1)),KX(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(/\s+/g," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return KX(n,a,n[0],this.lexer)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(/\n/g," "),i=/[^ ]/.test(n),a=/^ /.test(n)&&/ $/.test(n);return i&&a&&(n=n.substring(1,n.length-1)),n=eo(n,!0),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=eo(r[1]),i="mailto:"+n):(n=eo(r[1]),i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=eo(r[0]),i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=eo(r[0]),r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n;return this.lexer.state.inRawBlock?n=r[0]:n=eo(r[0]),{type:"text",raw:r[0],text:n}}}},y7e=/^(?: *(?:\n|$))+/,v7e=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,x7e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,fv=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,b7e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,tj=/(?:[*+-]|\d{1,9}[.)])/,rj=fn(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,tj).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),h9=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,w7e=/^[^\n]+/,f9=/(?!\s*\])(?:\\.|[^\[\]\\])+/,T7e=fn(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",f9).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),k7e=fn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,tj).getRegex(),w5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",d9=/|$))/,E7e=fn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",d9).replace("tag",w5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),nj=fn(h9).replace("hr",fv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w5).getRegex(),S7e=fn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",nj).getRegex(),p9={blockquote:S7e,code:v7e,def:T7e,fences:x7e,heading:b7e,hr:fv,html:E7e,lheading:rj,list:k7e,newline:y7e,paragraph:nj,table:uv,text:w7e},QX=fn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",fv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w5).getRegex(),C7e={...p9,table:QX,paragraph:fn(h9).replace("hr",fv).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",QX).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",w5).getRegex()},A7e={...p9,html:fn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",d9).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:uv,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:fn(h9).replace("hr",fv).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",rj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ij=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,_7e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,aj=/^( {2,}|\\)\n(?!\s*$)/,L7e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,R7e=fn(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,dv).getRegex(),M7e=fn("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,dv).getRegex(),I7e=fn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,dv).getRegex(),O7e=fn(/\\([punct])/,"gu").replace(/punct/g,dv).getRegex(),P7e=fn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),B7e=fn(d9).replace("(?:-->|$)","-->").getRegex(),F7e=fn("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",B7e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),b5=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,z7e=fn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",b5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),sj=fn(/^!?\[(label)\]\[(ref)\]/).replace("label",b5).replace("ref",f9).getRegex(),oj=fn(/^!?\[(ref)\](?:\[\])?/).replace("ref",f9).getRegex(),G7e=fn("reflink|nolink(?!\\()","g").replace("reflink",sj).replace("nolink",oj).getRegex(),m9={_backpedal:uv,anyPunctuation:O7e,autolink:P7e,blockSkip:N7e,br:aj,code:_7e,del:uv,emStrongLDelim:R7e,emStrongRDelimAst:M7e,emStrongRDelimUnd:I7e,escape:ij,link:z7e,nolink:oj,punctuation:D7e,reflink:sj,reflinkSearch:G7e,tag:F7e,text:L7e,url:uv},$7e={...m9,link:fn(/^!?\[(label)\]\((.*?)\)/).replace("label",b5).getRegex(),reflink:fn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",b5).getRegex()},l9={...m9,escape:fn(ij).replace("])","~|])").getRegex(),url:fn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\u+" ".repeat(h.length));let i,a,s;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(i=l.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))){if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length),i.raw.length===1&&r.length>0?r[r.length-1].raw+=` +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(s=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0,u=e.slice(1),h;this.options.extensions.startBlock.forEach(f=>{h=f.call({lexer:this},u),typeof h=="number"&&h>=0&&(l=Math.min(l,h))}),l<1/0&&l>=0&&(s=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(s))){a=r[r.length-1],n&&a?.type==="paragraph"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i),n=s.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&a.type==="text"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n,i,a,s=e,l,u,h;if(this.tokens.links){let f=Object.keys(this.tokens.links);if(f.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)f.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(u||(h=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(f=>(n=f.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.emStrong(e,s,h)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),r.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),r.push(n);continue}if(a=e,this.options.extensions&&this.options.extensions.startInline){let f=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(m=>{p=m.call({lexer:this},d),typeof p=="number"&&p>=0&&(f=Math.min(f,p))}),f<1/0&&f>=0&&(a=e.substring(0,f+1))}if(n=this.tokenizer.inlineText(a)){e=e.substring(n.raw.length),n.raw.slice(-1)!=="_"&&(h=n.raw.slice(-1)),u=!0,i=r[r.length-1],i&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(e){let f="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return r}},im=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Ed}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(/^\S*/)?.[0],a=e.replace(/\n$/,"")+` +`;return i?'
    '+(n?a:eo(a,!0))+`
    +`:"
    "+(n?a:eo(a,!0))+`
    +`}blockquote({tokens:e}){return`
    +${this.parser.parse(e)}
    +`}html({text:e}){return e}heading({tokens:e,depth:r}){return`${this.parser.parseInline(e)} +`}hr(e){return`
    +`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l +`+i+" +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&e.tokens[0].type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`
  • ${r}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let r="",n="";for(let a=0;a${i}`),` + +`+r+` +`+i+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${e}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=XX(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:r,text:n}){let i=XX(e);if(i===null)return n;e=i;let a=`${n}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new im(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l];n.useNewRenderer||(u=this.#t(u,l,a));let h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new nm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new rm;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(s==="options")continue;let l=s,u=n.hooks[l],h=a[l];rm.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}#t(e,r,n){switch(r){case"heading":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,n.parser.parseInline(i.tokens),i.depth,d7e(n.parser.parseInline(i.tokens,n.parser.textRenderer)))};case"code":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.lang,!!i.escaped)};case"table":return function(i){if(!i.type||i.type!==r)return e.apply(this,arguments);let a="",s="";for(let u=0;u0&&f.tokens[0].type==="paragraph"?(f.tokens[0].text=g+" "+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&f.tokens[0].tokens[0].type==="text"&&(f.tokens[0].tokens[0].text=g+" "+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:"text",text:g+" "}):m+=g+" "}m+=this.parser.parse(f.tokens,l),u+=this.listitem({type:"list_item",raw:m,text:m,task:p,checked:!!d,loose:l,tokens:f.tokens})}return e.call(this,u,a,s)};case"html":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.block)};case"paragraph":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"escape":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"link":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,this.parser.parseInline(i.tokens))};case"image":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,i.text)};case"strong":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"em":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"codespan":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"del":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"text":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)}}return e}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return ku.lex(e,r??this.defaults)}parser(e,r){return Eu.parse(e,r??this.defaults)}#e(e,r){return(n,i)=>{let a={...i},s={...this.defaults,...a};this.defaults.async===!0&&a.async===!1&&(s.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),s.async=!0);let l=this.#r(!!s.silent,!!s.async);if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s),s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(u=>e(u,s)).then(u=>s.hooks?s.hooks.processAllTokens(u):u).then(u=>s.walkTokens?Promise.all(this.walkTokens(u,s.walkTokens)).then(()=>u):u).then(u=>r(u,s)).then(u=>s.hooks?s.hooks.postprocess(u):u).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let u=e(n,s);s.hooks&&(u=s.hooks.processAllTokens(u)),s.walkTokens&&this.walkTokens(u,s.walkTokens);let h=r(u,s);return s.hooks&&(h=s.hooks.postprocess(h)),h}catch(u){return l(u)}}}#r(e,r){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+eo(n.message+"",!0)+"
    ";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},kd=new c9;o(en,"marked");en.options=en.setOptions=function(t){return kd.setOptions(t),en.defaults=kd.defaults,ZX(en.defaults),en};en.getDefaults=u9;en.defaults=Ed;en.use=function(...t){return kd.use(...t),en.defaults=kd.defaults,ZX(en.defaults),en};en.walkTokens=function(t,e){return kd.walkTokens(t,e)};en.parseInline=kd.parseInline;en.Parser=Eu;en.parser=Eu.parse;en.Renderer=im;en.TextRenderer=hv;en.Lexer=ku;en.lexer=ku.lex;en.Tokenizer=nm;en.Hooks=rm;en.parse=en;u6t=en.options,h6t=en.setOptions,f6t=en.use,d6t=en.walkTokens,p6t=en.parseInline,m6t=Eu.parse,g6t=ku.lex});function U7e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`).replace(/\n{2,}/g,` +`),i=Ib(n);return e===!1?i.replace(/ /g," "):i}function cj(t,e={}){let r=U7e(t,e),n=en.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function uj(t,{markdownAutoWrap:e}={}){let r=en.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var hj=M(()=>{"use strict";lj();MS();o(U7e,"preprocessMarkdown");o(cj,"markdownToLines");o(uj,"markdownToHTML")});function H7e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function W7e(t,e){let r=H7e(e.content);return fj(t,[],r,e.type)}function fj(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?fj(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function dj(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return g9(t,e)}function g9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return g9(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=W7e(e,a);r.push([l]),u.content&&t.unshift(u)}return g9(t,e,r)}var pj=M(()=>{"use strict";o(H7e,"splitTextToChars");o(W7e,"splitWordToFitWidth");o(fj,"splitWordToFitWidthRecursion");o(dj,"splitLineToFitWidth");o(g9,"splitLineToFitWidthRecursion")});function mj(t,e){e&&t.attr("style",e)}async function Y7e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await hh(e.label.replace(je.lineBreakRegex,` +`),de()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),mj(h,e.labelStyle),h.attr("class",`${u} ${n}`),mj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function y9(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function q7e(t,e,r){let n=t.append("text"),i=y9(n,1,e);v9(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function gj(t,e,r){let n=t.append("text"),i=y9(n,1,e);v9(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function X7e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>q7e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:dj(h,f);for(let p of d){let m=y9(l,u,1.1);v9(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function v9(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function x9(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>``)}var Si,Dl=M(()=>{"use strict";Vt();fr();mr();ht();hj();hr();pj();o(mj,"applyStyle");o(Y7e,"addHtmlSpan");o(y9,"createTspan");o(q7e,"computeWidthOfText");o(gj,"computeDimensionOfText");o(X7e,"createFormattedText");o(v9,"updateTextContentAndStyles");o(x9,"replaceIconSubstring");Si=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=uj(e,h),d=x9(Ca(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await Y7e(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=cj(f.replace("
    ","
    "),h),p=X7e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");ze(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");ze(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");ze(p).select("text").attr("style",g)}return p}},"createText")});function Wt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function zo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function k5(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";Dl();Vt();mr();hs();fr();hr();ot=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||xr(de()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",Fn(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Si(s,Tr(Ca(l),de()),{useHtmlLabels:i,width:e.width||de().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=ze(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=de().fontSize?de().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[_=ur.fontSize]=Fo(b),T=_*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),T5=o(async(t,e,r)=>{let n=r.useHtmlLabels||xr(de()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Si(i,Tr(Ca(e),de()),{useHtmlLabels:n,width:r.width||de()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(xr(de()?.flowchart?.htmlLabels)){let u=a.children[0],h=ze(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),Qe=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),lt=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Wt,"createPathFromPoints");o(zo,"generateFullSineWavePoints");o(k5,"generateCirclePoints")});function j7e(t,e){return t.intersect(e)}var yj,vj=M(()=>{"use strict";o(j7e,"intersectNode");yj=j7e});function K7e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(K7e,"intersectEllipse");E5=K7e});function Q7e(t,e,r){return E5(t,e,e,r)}var xj,bj=M(()=>{"use strict";b9();o(Q7e,"intersectCircle");xj=Q7e});function Z7e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&wj(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&wj(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function wj(t,e){return t*e>0}var Tj,kj=M(()=>{"use strict";o(Z7e,"intersectLine");o(wj,"sameSign");Tj=Z7e});function J7e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";kj();o(J7e,"intersectPolygon");Ej=J7e});var eAe,Oh,w9=M(()=>{"use strict";eAe=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Oh=eAe});var qe,qt=M(()=>{"use strict";vj();bj();b9();Sj();w9();qe={node:yj,circle:xj,ellipse:E5,polygon:Ej,rect:Oh}});var Cj,mc,tAe,et,Ze,Xt=M(()=>{"use strict";Vt();Cj=o(t=>{let{handDrawnSeed:e}=de();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),mc=o(t=>{let e=tAe([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),tAe=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),et=o(t=>{let{stylesArray:e}=mc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];l==="color"||l==="font-size"||l==="font-family"||l==="font-weight"||l==="font-style"||l==="text-decoration"||l==="text-align"||l==="text-transform"||l==="line-height"||l==="letter-spacing"||l==="word-spacing"||l==="text-shadow"||l==="text-overflow"||l==="white-space"||l==="word-wrap"||l==="word-break"||l==="overflow-wrap"||l==="hyphens"?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ze=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=de(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=mc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function T9(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function rAe(t,e){return t[0]===e[0]&&t[1]===e[1]}function nAe(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)T9(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];rAe(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;wb.yminw.ymin?1:b.xw.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;wv);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let _=y[b].edge,T=y[w].edge;m.push([[Math.round(_.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)T9(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),T9(p,f,d)})(u,l,-i)}return u}function yv(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),nAe(t,i,n,a||1)}function M5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function E9(t,e){return t.type===e}function F9(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:iAe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:k9,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Aj,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!E9(a,Aj);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return F9("M0,0"+t);i++,s=S5[a.text],n=a.text}else E9(a,k9)?s=S5[n]:(i++,s=S5[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function Pj(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(Bj(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function pv(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function Bj(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=pv(t,e,-f),[r,n]=pv(r,n,-f);let R=(t-r)/2,S=(e-n)/2,O=R*R/(i*i)+S*S/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let N=i*i,P=a*a,F=N*P-N*S*S-P*R*R,B=N*S*S+P*R*R,$=(l===u?-1:1)*Math.sqrt(Math.abs(F/B));y=$*i*S/a+(t+r)/2,v=$*-a*R/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let R=g,S=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=Bj(r=y+i*Math.cos(g),n=v+a*Math.sin(g),S,O,i,a,s,0,u,[g,R,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),_=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),L=4/3*i*E,C=4/3*a*E,A=[t,e],I=[t+L*w,e-C*b],D=[r+L*T,n-C*_],k=[r,n];if(I[0]=2*A[0]-I[0],I[1]=2*A[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let R=[];for(let S=0;S2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=Mj(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=Mj(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Ph(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Ph(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function Dj(t,e){let r=Pj(Oj(F9(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Ph(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...oAe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Ph(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function S9(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*Gj(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function C5(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Sd(u,h,.5),m=Sd(h,f,.5),g=Sd(f,d,.5),y=Sd(p,m,.5),v=Sd(m,g,.5),x=Sd(y,v,.5);O9([u,p,y,x],0,r,i),O9([x,v,g,d],0,r,i)}var a,s;return i}function cAe(t,e){return R5(t,0,t.length,e)}function R5(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(R5(t,e,h+1,n,a),R5(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function C9(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?R5(n,0,n.length,r):n}var gv,A9,_9,L9,D9,N9,ks,R9,iAe,k9,Aj,S5,aAe,to,sm,P9,A5,B9,Ke,jt=M(()=>{"use strict";o(T9,"t");o(rAe,"e");o(nAe,"s");o(yv,"n");gv=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=yv(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(M5,"a");A9=class extends gv{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=yv(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)M5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},_9=class extends gv{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},L9=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=yv(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=M5(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=M5(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=M5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(L=0,C=2*Math.PI);let A=(C-L)/b.curveStepCount,I=[];for(let D=L;D<=C;D+=A)I.push([w+T*Math.cos(D),_+E*Math.sin(D)]);return I.push([w+T*Math.cos(C),_+E*Math.sin(C)]),I.push([w,_]),am([I],b)}(e,r,n,i,a,s,h));return h.stroke!==to&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=_j(e,n);if(n.fill&&n.fill!==to)if(n.fillStyle==="solid"){let s=_j(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...C9(Ij([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...C9(Ij(h),10,(1+n.roughness)/2))}s.length&&i.push(am([s],n))}return n.stroke!==to&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=_5(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(S9([e],n)):i.push(am([e],n))),n.stroke!==to&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==to,s=n.stroke!==to,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=Pj(Oj(F9(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...C9(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let L=y.length?y[y.length-1]:v;x.push([L[0],L[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let _=[];for(let T of g){let E=cAe(T,p);E.length&&_.push(E)}return _}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=Dj(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=Dj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(S9(u,n));else i.push(am(u,n));return s&&(l?u.forEach(f=>{i.push(_5(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:to};break;case"fillPath":s={d:this.opsToPath(a),stroke:to,strokeWidth:0,fill:n.fill||to};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||to,strokeWidth:n,fill:to}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},P9=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new sm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},A5="http://www.w3.org/2000/svg",B9=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new sm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(A5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(A5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(A5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(A5,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Ke={canvas:o((t,e)=>new P9(t,e),"canvas"),svg:o((t,e)=>new B9(t,e),"svg"),generator:o(t=>new sm(t),"generator"),newSeed:o(()=>sm.newSeed(),"newSeed")}});function $j(t,e){let{labelStyles:r}=et(e);e.labelStyle=r;let n=lt(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Ke.svg(a),h=Ze(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",Fn(l)),Qe(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),qe.circle(e,s,p)},a}var Vj=M(()=>{"use strict";ht();Ft();qt();Xt();jt();hr();o($j,"anchor")});function Uj(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let L=0;L<20;L++){let C=L/19,A=w+C*T,I=x+i*Math.cos(A),D=b+a*Math.sin(A);E.push({x:I,y:D})}return E}async function Hj(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...Uj(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...Uj(s/2,l/2,s/2,-l/2,h,u,!0)],p=Ke.svg(i),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),Qe(e,v),e.intersect=function(x){return qe.polygon(e,d,x)},i}var Wj=M(()=>{"use strict";Ft();qt();Xt();jt();o(Uj,"generateArcPoints");o(Hj,"bowTieRect")});function Aa(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Su=M(()=>{"use strict";o(Aa,"insertPolygonShape")});async function Yj(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Ke.svg(i),x=Ze(e,{}),b=Wt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=Aa(i,u,s,m);return n&&g.attr("style",n),Qe(e,g),e.intersect=function(v){return qe.polygon(e,m,v)},i}var qj=M(()=>{"use strict";Ft();qt();Xt();jt();Su();Ft();o(Yj,"card")});function Xj(t,e){let{nodeStyles:r}=et(e);e.label="";let n=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Ke.svg(n),u=Ze(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Wt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return qe.polygon(e,s,p)},n}var jj=M(()=>{"use strict";qt();jt();Xt();Ft();o(Xj,"choice")});async function Kj(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await ot(t,e,lt(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Ke.svg(i),d=Ze(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",Fn(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return Qe(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),qe.circle(e,l,f)},i}var Qj=M(()=>{"use strict";ht();Ft();qt();Xt();jt();hr();o(Kj,"circle")});function uAe(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${i.x},${i.y} L ${s.x},${s.y}`}function Zj(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Ke.svg(i),u=Ze(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=uAe(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),Qe(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),qe.circle(e,a,m)},i}var Jj=M(()=>{"use strict";ht();Ft();Xt();jt();qt();o(uAe,"createLine");o(Zj,"crossedCircle")});function Bh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,_),e.intersect=function(T){return qe.polygon(e,p,T)},i}var tK=M(()=>{"use strict";Ft();qt();Xt();jt();o(Bh,"generateCirclePoints");o(eK,"curlyBraceLeft")});function Fh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,_),e.intersect=function(T){return qe.polygon(e,p,T)},i}var nK=M(()=>{"use strict";Ft();qt();Xt();jt();o(Fh,"generateCirclePoints");o(rK,"curlyBraceRight")});function _a(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dL,":first-child").attr("stroke-opacity",0),C.insert(()=>b,":first-child"),C.insert(()=>T,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,C),e.intersect=function(A){return qe.polygon(e,m,A)},i}var aK=M(()=>{"use strict";Ft();qt();Xt();jt();o(_a,"generateCirclePoints");o(iK,"curlyBraces")});async function sK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Ke.svg(i),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...k5(-v,-y/2,f,50,270,90)],w=Wt(b),_=p.path(w,m),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),Qe(e,T),e.intersect=function(E){return qe.polygon(e,b,E)},i}var oK=M(()=>{"use strict";Ft();qt();Xt();jt();o(sK,"curvedTrapezoid")});async function lK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Ke.svg(i),g=fAe(0,0,l,f,u,h),y=dAe(0,h,l,f,u,h),v=m.path(g,Ze(e,{})),x=m.path(y,Ze(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=hAe(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",Fn(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Qe(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=qe.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var hAe,fAe,dAe,cK=M(()=>{"use strict";Ft();qt();Xt();jt();hr();hAe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),fAe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),dAe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(lK,"cylinder")});async function uK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return qe.rect(e,b)},i}var hK=M(()=>{"use strict";Ft();qt();Xt();jt();o(uK,"dividedRectangle")});async function fK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await ot(t,e,lt(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Ke.svg(i),m=Ze(e,{roughness:.2,strokeWidth:2.5}),g=Ze(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",Fn(e.cssClasses)).attr("style",Fn(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return Qe(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),qe.circle(e,u,p)},i}var dK=M(()=>{"use strict";ht();Ft();qt();Xt();jt();hr();o(fK,"doublecircle")});function pK(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=et(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Ke.svg(a),{nodeBorder:h}=r,f=Ze(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),Qe(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),qe.circle(e,s,m)},a}var mK=M(()=>{"use strict";jt();ht();qt();Xt();Ft();o(pK,"filledCircle")});async function gK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Ke.svg(i),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,Qe(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),qe.polygon(e,f,x)},i}var yK=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Ft();o(gK,"flippedTriangle")});function vK(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=et(e);e.label="";let s=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Ke.svg(s),m=Ze(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),Qe(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return qe.rect(e,x)},s}var xK=M(()=>{"use strict";jt();qt();Xt();Ft();o(vK,"forkJoin")});async function bK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await ot(t,e,lt(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Ke.svg(s),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...k5(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Wt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),Qe(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),qe.polygon(e,g,b)},s}var wK=M(()=>{"use strict";ht();Ft();qt();Xt();jt();o(bK,"halfRoundedRectangle")});async function TK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Ke.svg(i),g=Ze(e,{}),y=pAe(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=Aa(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,Qe(e,d),e.intersect=function(m){return qe.polygon(e,f,m)},i}var pAe,kK=M(()=>{"use strict";Ft();qt();Xt();jt();Su();pAe=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(TK,"hexagon")});async function EK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await ot(t,e,lt(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Ke.svg(i),h=Ze(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Wt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),Qe(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),qe.polygon(e,f,g)},i}var SK=M(()=>{"use strict";ht();Ft();qt();Xt();jt();o(EK,"hourglass")});async function CK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=et(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await ot(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=mc(e),x=-g/2,b=-m/2,w=e.label?8:0,_=Ke.svg(h),T=Ze(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=_.rectangle(x,b,g,m,T),L=Math.max(g,f.width),C=m+f.height+w,A=_.rectangle(-L/2,-C/2,L,C,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>A);if(e.icon){let k=h.append("g");k.html(`${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=k.node().getBBox(),S=R.width,O=R.height,N=R.x,P=R.y;k.attr("transform",`translate(${-S/2-N},${p?f.height/2+w/2-O/2-P:-f.height/2-w/2-O/2-P})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-C/2:C/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),Qe(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return qe.rect(e,k);let R=e.x??0,S=e.y??0,O=e.height??0,N=[];return p?N=[{x:R-f.width/2,y:S-O/2},{x:R+f.width/2,y:S-O/2},{x:R+f.width/2,y:S-O/2+f.height+w},{x:R+g/2,y:S-O/2+f.height+w},{x:R+g/2,y:S+O/2},{x:R-g/2,y:S+O/2},{x:R-g/2,y:S-O/2+f.height+w},{x:R-f.width/2,y:S-O/2+f.height+w}]:N=[{x:R-g/2,y:S-O/2},{x:R+g/2,y:S-O/2},{x:R+g/2,y:S-O/2+m},{x:R+f.width/2,y:S-O/2+m},{x:R+f.width/2/2,y:S+O/2},{x:R-f.width/2,y:S+O/2},{x:R-f.width/2,y:S-O/2+m},{x:R-g/2,y:S-O/2+m}],qe.polygon(e,N,k)},h}var AK=M(()=>{"use strict";jt();ht();Kc();qt();Xt();Ft();o(CK,"icon")});async function _K(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=et(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await ot(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=mc(e),b=Ke.svg(h),w=Ze(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=x.get("fill");w.stroke=_??v;let T=h.append("g");e.icon&&T.html(`${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let E=T.node().getBBox(),L=E.width,C=E.height,A=E.x,I=E.y,D=Math.max(L,C)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),R=Math.max(D,f.width),S=D+f.height+m,O=b.rectangle(-R/2,-S/2,R,S,{...w,fill:"transparent",stroke:"none"}),N=h.insert(()=>k,":first-child"),P=h.insert(()=>O);return T.attr("transform",`translate(${-L/2-A},${g?f.height/2+m/2-C/2-I:-f.height/2-m/2-C/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-S/2:S/2-f.height})`),N.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),Qe(e,P),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),qe.rect(e,F)},h}var LK=M(()=>{"use strict";jt();ht();Kc();qt();Xt();Ft();o(_K,"iconCircle")});var La,zh=M(()=>{"use strict";La=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function DK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=et(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await ot(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Ke.svg(h),L=Ze(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let C=b.get("fill");L.stroke=C??x;let A=E.path(La(w,_,y,g,5),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child").attr("class","icon-shape2"),S=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,$=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-$:-f.height/2-T/2-F/2-$})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),Qe(e,S),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return qe.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],qe.polygon(e,B,O)},h}var NK=M(()=>{"use strict";jt();ht();Kc();qt();Xt();zh();Ft();o(DK,"iconRounded")});async function RK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=et(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await ot(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Ke.svg(h),L=Ze(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let C=b.get("fill");L.stroke=C??x;let A=E.path(La(w,_,y,g,.1),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child"),S=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,$=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-$:-f.height/2-T/2-F/2-$})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),Qe(e,S),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return qe.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],qe.polygon(e,B,O)},h}var MK=M(()=>{"use strict";jt();ht();Kc();qt();zh();Xt();Ft();o(RK,"iconSquare")});async function IK(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=et(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await ot(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Ke.svg(d),w=Ze(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,L=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),C=d.insert(()=>_,":first-child"),A=d.insert(()=>L);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),C.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),Qe(e,A),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return qe.rect(e,I);let D=e.x??0,k=e.y??0,R=e.height??0,S=[];return g?S=[{x:D-p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2+p.height+x},{x:D+h/2,y:k-R/2+p.height+x},{x:D+h/2,y:k+R/2},{x:D-h/2,y:k+R/2},{x:D-h/2,y:k-R/2+p.height+x},{x:D-p.width/2,y:k-R/2+p.height+x}]:S=[{x:D-h/2,y:k-R/2},{x:D+h/2,y:k-R/2},{x:D+h/2,y:k-R/2+f},{x:D+p.width/2,y:k-R/2+f},{x:D+p.width/2/2,y:k+R/2},{x:D-p.width/2,y:k+R/2},{x:D-p.width/2,y:k-R/2+f},{x:D-h/2,y:k-R/2+f}],qe.polygon(e,S,I)},d}var OK=M(()=>{"use strict";jt();ht();qt();Xt();Ft();o(IK,"imageSquare")});async function PK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ke.svg(i),p=Ze(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Aa(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return qe.polygon(e,u,d)},i}var BK=M(()=>{"use strict";Ft();qt();Xt();jt();Su();o(PK,"inv_trapezoid")});async function Cd(t,e,r){let{labelStyles:n,nodeStyles:i}=et(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await ot(t,e,lt(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Ke.svg(a),v=Ze(e,{}),x=p||m?y.path(La(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",Fn(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",Fn(p)).attr("ry",Fn(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return Qe(e,d),e.intersect=function(y){return qe.rect(e,y)},a}var vv=M(()=>{"use strict";Ft();qt();zh();Xt();jt();hr();o(Cd,"drawRect")});async function FK(t,e){let{shapeSvg:r,bbox:n,label:i}=await ot(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),Qe(e,a),e.intersect=function(u){return qe.rect(e,u)},r}var zK=M(()=>{"use strict";vv();Ft();qt();o(FK,"labelRect")});async function GK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ke.svg(i),p=Ze(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Aa(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return qe.polygon(e,u,d)},i}var $K=M(()=>{"use strict";Ft();qt();Xt();jt();Su();o(GK,"lean_left")});async function VK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ke.svg(i),p=Ze(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Aa(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return qe.polygon(e,u,d)},i}var UK=M(()=>{"use strict";Ft();qt();Xt();jt();Su();o(VK,"lean_right")});function HK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",lt(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Ke.svg(i),d=Ze(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Wt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),Qe(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),qe.polygon(e,h,y)},i}var WK=M(()=>{"use strict";ht();Ft();Xt();jt();qt();Ft();o(HK,"lightningBolt")});async function YK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Ke.svg(i),y=gAe(0,0,l,f,u,h,d),v=yAe(0,h,l,f,u,h),x=Ze(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=mAe(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",Fn(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Qe(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=qe.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var mAe,gAe,yAe,qK=M(()=>{"use strict";Ft();qt();Xt();jt();hr();mAe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),gAe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),yAe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(YK,"linedCylinder")});async function XK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Ke.svg(i),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...zo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Qe(e,v),e.intersect=function(x){return qe.polygon(e,g,x)},i}var jK=M(()=>{"use strict";Ft();qt();jt();Xt();o(XK,"linedWaveEdgedRect")});async function KK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fill:"none"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),Qe(e,T),e.intersect=function(E){return qe.polygon(e,y,E)},i}var QK=M(()=>{"use strict";Ft();Xt();jt();qt();o(KK,"multiRect")});async function ZK(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=zo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Ke.svg(i),_=Ze(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let T=Wt(x),E=w.path(T,_),L=Wt(b),C=w.path(L,_),A=i.insert(()=>E,":first-child");return A.insert(()=>C),A.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",n),A.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),Qe(e,A),e.intersect=function(I){return qe.polygon(e,x,I)},i}var JK=M(()=>{"use strict";Ft();qt();jt();Xt();o(ZK,"multiWaveEdgedRectangle")});async function eQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=et(e);e.labelStyle=n,e.useHtmlLabels||Sr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await ot(t,e,lt(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Ke.svg(s),g=Ze(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),Qe(e,v),e.intersect=function(x){return qe.rect(e,x)},s}var tQ=M(()=>{"use strict";jt();qt();Xt();Ft();Ua();o(eQ,"note")});async function rQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Ke.svg(i),m=Ze(e,{}),g=vAe(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=Aa(i,u,u,h);return n&&f.attr("style",n),Qe(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT +point:`,p,` +node: +`,e,` +res:`,qe.polygon(e,h,p)),qe.polygon(e,h,p)},i}var vAe,nQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Su();vAe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(rQ,"question")});async function iQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Ke.svg(i),y=Ze(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Wt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Qe(e,b),e.intersect=function(w){return qe.polygon(e,p,w)},i}var aQ=M(()=>{"use strict";Ft();qt();Xt();jt();o(iQ,"rect_left_inv_arrow")});function xAe(t,e){e&&t.attr("style",e)}async function bAe(t){let e=ze(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await hh(t.label.replace(je.lineBreakRegex,` +`),de()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),xAe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var wAe,gc,I5=M(()=>{"use strict";mr();ht();Vt();fr();hr();o(xAe,"applyStyle");o(bAe,"addHtmlLabel");wAe=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(de().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.info("vertexText"+i);let a={isNode:n,label:Ca(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await bAe(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=wAe});async function sQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(xr(de()?.flowchart?.htmlLabels)){let C=f.children[0],A=ze(f);d=C.getBoundingClientRect(),A.attr("width",d.width),A.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=ze(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;ze(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),ze(f).attr("transform","translate( "+(d.width(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),L=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),L.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return Qe(e,E),e.intersect=function(C){return qe.rect(e,C)},a}var oQ=M(()=>{"use strict";mr();fr();Ft();I5();qt();Xt();jt();Vt();zh();ht();o(sQ,"rectWithTitle")});async function lQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Cd(t,e,r)}var cQ=M(()=>{"use strict";vv();o(lQ,"roundedRect")});async function uQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",Fn(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return qe.rect(e,b)},i}var hQ=M(()=>{"use strict";Ft();qt();Xt();jt();hr();o(uQ,"shadedProcess")});async function fQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Ke.svg(i),m=Ze(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Wt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return qe.polygon(e,g,b)},i}var dQ=M(()=>{"use strict";Ft();qt();Xt();jt();o(fQ,"slopedRect")});async function pQ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Cd(t,e,r)}var mQ=M(()=>{"use strict";vv();o(pQ,"squareRect")});async function gQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Ke.svg(i),d=Ze(e,{}),p=La(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",Fn(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return Qe(e,u),e.intersect=function(f){return qe.rect(e,f)},i}var yQ=M(()=>{"use strict";Ft();qt();Xt();jt();zh();hr();o(gQ,"stadium")});async function vQ(t,e){return Cd(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var xQ=M(()=>{"use strict";vv();o(vQ,"state")});function bQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=et(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Ke.svg(h),d=Ze(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),Qe(e,y),e.intersect=function(v){return qe.circle(e,7,v)},h}var wQ=M(()=>{"use strict";jt();qt();Xt();Ft();o(bQ,"stateEnd")});function TQ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Ke.svg(i).circle(0,0,14,Cj(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return Qe(e,a),e.intersect=function(s){return qe.circle(e,7,s)},i}var kQ=M(()=>{"use strict";jt();qt();Xt();Ft();o(TQ,"stateStart")});async function EQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Ke.svg(i),m=Ze(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",Fn(b)),Qe(e,x)}else{let p=Aa(i,l,u,d);n&&p.attr("style",n),Qe(e,p)}return e.intersect=function(p){return qe.polygon(e,d,p)},i}var SQ=M(()=>{"use strict";Ft();qt();Xt();jt();Su();hr();o(EQ,"subroutine")});async function CQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),Qe(e,T),e.intersect=function(E){return qe.polygon(e,y,E)},i}var AQ=M(()=>{"use strict";Ft();Xt();jt();qt();o(CQ,"taggedRect")});async function _Q(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Ke.svg(i),y=Ze(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...zo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...zo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],_=Wt(v),T=g.path(_,y),E=Wt(w),L=g.path(E,{...y,fillStyle:"solid"}),C=i.insert(()=>L,":first-child");return C.insert(()=>T,":first-child"),C.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Qe(e,C),e.intersect=function(A){return qe.polygon(e,v,A)},i}var LQ=M(()=>{"use strict";Ft();qt();jt();Xt();o(_Q,"taggedWaveEdgedRectangle")});async function DQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),Qe(e,f),e.intersect=function(d){return qe.rect(e,d)},i}var NQ=M(()=>{"use strict";Ft();qt();Xt();o(DQ,"text")});async function RQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await ot(t,e,lt(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Ke.svg(i),v=kAe(0,0,p,h,d,f),x=EAe(0,0,p,h,d,f),b=y.path(v,Ze(e,{})),w=y.path(x,Ze(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=TAe(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",Fn(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Qe(e,g),e.intersect=function(y){let v=qe.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var TAe,kAe,EAe,MQ=M(()=>{"use strict";Ft();Xt();jt();qt();hr();TAe=o((t,e,r,n,i,a)=>`M${t},${e} + a${i},${a} 0,0,1 0,${-n} + l${r},0 + a${i},${a} 0,0,1 0,${n} + M${r},${-n} + a${i},${a} 0,0,0 0,${n} + l${-r},0`,"createCylinderPathD"),kAe=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),EAe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(RQ,"tiltedCylinder")});async function IQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ke.svg(i),p=Ze(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Aa(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return qe.polygon(e,u,d)},i}var OQ=M(()=>{"use strict";Ft();qt();Xt();jt();Su();o(IQ,"trapezoid")});async function PQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Ke.svg(i),p=Ze(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Wt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),Qe(e,v),e.intersect=function(x){return qe.polygon(e,m,x)},i}var BQ=M(()=>{"use strict";Ft();qt();Xt();jt();o(PQ,"trapezoidalPentagon")});async function FQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=xr(de().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Wt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,Qe(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),qe.polygon(e,d,b)},i}var zQ=M(()=>{"use strict";ht();Ft();qt();Xt();jt();Ft();fr();Vt();o(FQ,"triangle")});async function GQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Ke.svg(i),v=Ze(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...zo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Wt(x),w=y.path(b,v),_=i.insert(()=>w,":first-child");return _.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),Qe(e,_),e.intersect=function(T){return qe.polygon(e,x,T)},i}var $Q=M(()=>{"use strict";Ft();qt();jt();Xt();o(GQ,"waveEdgedRectangle")});async function VQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ot(t,e,lt(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Ke.svg(i),x=Ze(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...zo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...zo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Wt(b),_=v.path(w,x),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),Qe(e,T),e.intersect=function(E){return qe.polygon(e,b,E)},i}var UQ=M(()=>{"use strict";Ft();qt();Xt();jt();o(VQ,"waveRectangle")});async function HQ(t,e){let{labelStyles:r,nodeStyles:n}=et(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ot(t,e,lt(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Ke.svg(i),g=Ze(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} + M${f-h},${d} L${f+l},${d} + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),Qe(e,b),e.intersect=function(w){return qe.polygon(e,y,w)},i}var WQ=M(()=>{"use strict";Ft();Xt();jt();qt();o(HQ,"windowPane")});async function YQ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",lt(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await O5(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await O5(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await O5(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await O5(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function O5(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=Sr(),s="useHtmlLabels"in e?e.useHtmlLabels:xr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Si(i,i7(Ca(l)),{width:Js(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=ze(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,_=parseInt(b,10)*5+"px";y.style.minWidth=_,y.style.maxWidth=_}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&ze(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var qQ=M(()=>{"use strict";mr();Ua();Ft();hr();Vt();Dl();fr();o(YQ,"textHelper");o(O5,"addText")});async function XQ(t,e){let r=de(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??xr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await YQ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=et(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Ke.svg(l),g=Ze(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),_=l.insert(()=>w,":first-child");_.attr("class","basic label-container");let T=_.node().getBBox();l.selectAll(".text").each((A,I,D)=>{let k=ze(D[I]),R=k.attr("transform"),S=0;if(R){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(R);F&&(S=parseFloat(F[2]))}let O=S+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let N=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(N=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,F,B){window.getComputedStyle(B[F]).textAnchor==="middle"&&(N=0)})),k.attr("transform",`translate(${N}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,L=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,C=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let A=m.line(T.x,E+L+b+n,T.x+T.width,E+L+b+n,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let A=m.line(T.x,E+L+C+b+i*2+n,T.x+T.width,E+L+C+b+n+i*2,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),_.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let A=RegExp(/color\s*:\s*([^;]*)/),I=A.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=A.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return Qe(e,_),e.intersect=function(A){return qe.rect(e,A)},l}var jQ=M(()=>{"use strict";Ft();Vt();mr();jt();Xt();qt();qQ();fr();o(XQ,"classBox")});async function KQ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=et(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await ot(t,e,lt(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await T5(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await T5(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await T5(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,_=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+_,E=-w/2,L=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-_-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-_+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-_+u.height/2)+")");let C,{rx:A,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Ke.svg(l),R=Ze(e,{}),S=A||I?k.path(La(E,L,w,T,A||0),R):k.rectangle(E,L,w,T,R);C=l.insert(()=>S,":first-child"),C.attr("class","basic label-container").attr("style",D||null)}else{C=l.insert("rect",":first-child"),C.attr("class","basic label-container __APA__").attr("style",i).attr("rx",A??5).attr("ry",I??5).attr("x",E).attr("y",L).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let R=l.append("line"),S=E+2,O=L+Math.floor((A??0)/2),N=L+T-Math.floor((A??0)/2);R.attr("x1",S).attr("y1",O).attr("x2",S).attr("y2",N).attr("stroke-width","4").attr("stroke",SAe(k))}}return Qe(e,C),e.height=T,e.intersect=function(k){return qe.rect(e,k)},l}var SAe,QQ=M(()=>{"use strict";Ft();qt();zh();Xt();jt();SAe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(KQ,"kanbanItem")});function ZQ(t){return t in z9}var CAe,AAe,z9,G9=M(()=>{"use strict";Vj();Wj();qj();jj();Qj();Jj();tK();nK();aK();oK();cK();hK();dK();mK();yK();xK();wK();kK();SK();AK();LK();NK();MK();OK();BK();zK();$K();UK();WK();qK();jK();QK();JK();tQ();nQ();aQ();oQ();cQ();hQ();dQ();mQ();yQ();xQ();wQ();kQ();SQ();AQ();LQ();NQ();MQ();OQ();BQ();zQ();$Q();UQ();WQ();jQ();QQ();CAe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:pQ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:lQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:gQ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:EQ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:lK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:Kj},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:rQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:TK},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:VK},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:GK},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:IQ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:PK},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:fK},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:DQ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:Yj},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:uQ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:TQ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:bQ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:vK},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:EK},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:eK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:rK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:iK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:HK},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:GQ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:bK},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:RQ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:YK},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:sK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:uK},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:FQ},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:HQ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:pK},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:PQ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:gK},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:fQ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:ZK},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:KK},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:Hj},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:Zj},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:_Q},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:CQ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:VQ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:iQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:XK}],AAe=o(()=>{let e=[...Object.entries({state:vQ,choice:Xj,note:eQ,rectWithTitle:sQ,labelRect:FK,iconSquare:RK,iconCircle:_K,icon:CK,iconRounded:DK,imageSquare:IK,anchor:$j,kanbanItem:KQ,classBox:XQ}),...CAe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),z9=AAe();o(ZQ,"isValidShape")});function pZ(t){return typeof t>"u"||t===null}function _Ae(t){return typeof t=="object"&&t!==null}function LAe(t){return Array.isArray(t)?t:pZ(t)?[]:[t]}function DAe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function V9(t,e){return Pi.repeat(" ",e-t.length)+t}function zAe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=$9(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Pi.repeat(" ",e.indent)+V9((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=$9(t.buffer,n[s],i[s],t.position,d),l+=Pi.repeat(" ",e.indent)+V9((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Pi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=$9(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Pi.repeat(" ",e.indent)+V9((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function UAe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function HAe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if($Ae.indexOf(r)===-1)throw new Es('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=UAe(e.styleAliases||null),VAe.indexOf(this.kind)===-1)throw new Es('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function JQ(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function WAe(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function g8e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Pi.isNegativeZero(t))return"-0.0";return r=t.toString(10),m8e.test(r)?r.replace("e",".e"):r}function y8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Pi.isNegativeZero(t))}function b8e(t){return t===null?!1:yZ.exec(t)!==null||vZ.exec(t)!==null}function w8e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=yZ.exec(t),e===null&&(e=vZ.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function T8e(t){return t.toISOString()}function E8e(t){return t==="<<"||t===null}function C8e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=j9;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function A8e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=j9,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function _8e(t){var e="",r=0,n,i,a=t.length,s=j9;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function L8e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function M8e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function Z8e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||xZ,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function CZ(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=GAe(r),new Es(e,r)}function Qt(t,e){throw CZ(t,e)}function F5(t,e){t.onWarning&&t.onWarning.call(null,CZ(t,e))}function Gh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Pi.repeat(` +`,e-1))}function J8e(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ss(m)||lm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ss(i)||r&&lm(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ss(i)||r&&lm(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ss(n))break}else{if(t.position===t.lineStart&&$5(t)||r&&lm(m))break;if(yc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(Gh(t,a,s,!1),Q9(t,t.line-u),a=s=t.position,l=!1),_d(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return Gh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function e_e(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Gh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else yc(r)?(Gh(t,n,i,!0),Q9(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&$5(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function t_e(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return Gh(t,r,t.position,!0),t.position++,!0;if(l===92){if(Gh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),yc(l))Ci(t,!1,e);else if(l<256&&EZ[l])t.result+=SZ[l],t.position++;else if((s=j8e(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=X8e(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=Q8e(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else yc(l)?(Gh(t,r,n,!0),Q9(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&$5(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function r_e(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ss(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,um(t,e,P5,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),um(t,e,P5,!1,!0),x=t.result),m?cm(t,l,g,v,y,x,n,i,a):d?l.push(cm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function n_e(t,e){var r,n,i=U9,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)U9===i?i=d===43?eZ:H8e:Qt(t,"repeat of a chomping mode identifier");else if((f=K8e(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(_d(d)){do d=t.input.charCodeAt(++t.position);while(_d(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!yc(d)&&d!==0)}for(;d!==0;){for(K9(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),yc(d)){u++;continue}if(t.lineIndente)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),um(t,e,B5,!0,i)&&(v?g=t.result:y=t.result),v||(cm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function l_e(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ss(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;_d(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!yc(s));break}if(yc(s))break;for(r=t.position;s!==0&&!Ss(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&K9(t),$h.call(nZ,n)?nZ[n](t,n,i):F5(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),um(t,t.lineIndent-1,B5,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&Y8e.test(t.input.slice(e,t.position))&&F5(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&$5(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=AZ(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function PZ(t){var e=/^\n* /;return e.test(t)}function F_e(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=P_e(xv(t,0))&&B_e(xv(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=xv(t,u),!kv(h))return om;y=y&&lZ(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=xv(t,u),h===wv)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!kv(h))return om;y=y&&lZ(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?BZ:a===Tv?om:q9:r>9&&PZ(t)?om:s?a===Tv?om:q9:p?zZ:FZ}function z_e(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===Tv?'""':"''";if(!t.noCompatMode&&(L_e.indexOf(e)!==-1||D_e.test(e)))return t.quotingType===Tv?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return O_e(t,h)}switch(o(u,"testAmbiguity"),F_e(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case BZ:return e;case q9:return"'"+e.replace(/'/g,"''")+"'";case FZ:return"|"+cZ(e,t.indent)+uZ(sZ(e,a));case zZ:return">"+cZ(e,t.indent)+uZ(sZ(G_e(e,s),a));case om:return'"'+$_e(e)+'"';default:throw new Es("impossible error: invalid scalar style")}}()}function cZ(t,e){var r=PZ(t)?String(e):"",n=t[t.length-1]===` +`,i=n&&(t[t.length-2]===` +`||t===` +`),a=i?"+":n?"":"-";return r+a+` +`}function uZ(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function G_e(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,hZ(t.slice(0,h),e)}(),i=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` +`:"")+hZ(u,e),i=a}return n}function hZ(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`+t.slice(i,a),i=a+1),s=l;return u+=` +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function $_e(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=xv(t,i),n=Na[r],!n&&kv(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||R_e(r);return e}function V_e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Cu(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function fZ(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Cu(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=Y9(t,e)),t.dump&&wv===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function U_e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Cu(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function H_e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Es("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&wv===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=Y9(t,e)),Cu(t,e+1,f,!0,d)&&(t.dump&&wv===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function dZ(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Cu(t,e,r,n,i,a,s){t.tag=null,t.dump=r,dZ(t,r,!1)||dZ(t,r,!0);var l=LZ.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(H_e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(U_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?fZ(t,e-1,t.dump,i):fZ(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(V_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&z_e(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Es("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function W_e(t,e){var r=[],n=[],i,a;for(X9(t,r,n),i=0,a=n.length;i{"use strict";o(pZ,"isNothing");o(_Ae,"isObject");o(LAe,"toArray");o(DAe,"extend");o(NAe,"repeat");o(RAe,"isNegativeZero");MAe=pZ,IAe=_Ae,OAe=LAe,PAe=NAe,BAe=RAe,FAe=DAe,Pi={isNothing:MAe,isObject:IAe,toArray:OAe,repeat:PAe,isNegativeZero:BAe,extend:FAe};o(mZ,"formatError");o(bv,"YAMLException$1");bv.prototype=Object.create(Error.prototype);bv.prototype.constructor=bv;bv.prototype.toString=o(function(e){return this.name+": "+mZ(this,e)},"toString");Es=bv;o($9,"getLine");o(V9,"padStart");o(zAe,"makeSnippet");GAe=zAe,$Ae=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],VAe=["scalar","sequence","mapping"];o(UAe,"compileStyleAliases");o(HAe,"Type$1");Da=HAe;o(JQ,"compileList");o(WAe,"compileMap");o(H9,"Schema$1");H9.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof Da)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Es("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Da))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Es("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Es("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof Da))throw new Es("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(H9.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=JQ(i,"implicit"),i.compiledExplicit=JQ(i,"explicit"),i.compiledTypeMap=WAe(i.compiledImplicit,i.compiledExplicit),i},"extend");YAe=H9,qAe=new Da("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),XAe=new Da("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),jAe=new Da("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),KAe=new YAe({explicit:[qAe,XAe,jAe]});o(QAe,"resolveYamlNull");o(ZAe,"constructYamlNull");o(JAe,"isNull");e8e=new Da("tag:yaml.org,2002:null",{kind:"scalar",resolve:QAe,construct:ZAe,predicate:JAe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(t8e,"resolveYamlBoolean");o(r8e,"constructYamlBoolean");o(n8e,"isBoolean");i8e=new Da("tag:yaml.org,2002:bool",{kind:"scalar",resolve:t8e,construct:r8e,predicate:n8e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(a8e,"isHexCode");o(s8e,"isOctCode");o(o8e,"isDecCode");o(l8e,"resolveYamlInteger");o(c8e,"constructYamlInteger");o(u8e,"isInteger");h8e=new Da("tag:yaml.org,2002:int",{kind:"scalar",resolve:l8e,construct:c8e,predicate:u8e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),f8e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(d8e,"resolveYamlFloat");o(p8e,"constructYamlFloat");m8e=/^[-+]?[0-9]+e/;o(g8e,"representYamlFloat");o(y8e,"isFloat");v8e=new Da("tag:yaml.org,2002:float",{kind:"scalar",resolve:d8e,construct:p8e,predicate:y8e,represent:g8e,defaultStyle:"lowercase"}),gZ=KAe.extend({implicit:[e8e,i8e,h8e,v8e]}),x8e=gZ,yZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),vZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(b8e,"resolveYamlTimestamp");o(w8e,"constructYamlTimestamp");o(T8e,"representYamlTimestamp");k8e=new Da("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:b8e,construct:w8e,instanceOf:Date,represent:T8e});o(E8e,"resolveYamlMerge");S8e=new Da("tag:yaml.org,2002:merge",{kind:"scalar",resolve:E8e}),j9=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(C8e,"resolveYamlBinary");o(A8e,"constructYamlBinary");o(_8e,"representYamlBinary");o(L8e,"isBinary");D8e=new Da("tag:yaml.org,2002:binary",{kind:"scalar",resolve:C8e,construct:A8e,predicate:L8e,represent:_8e}),N8e=Object.prototype.hasOwnProperty,R8e=Object.prototype.toString;o(M8e,"resolveYamlOmap");o(I8e,"constructYamlOmap");O8e=new Da("tag:yaml.org,2002:omap",{kind:"sequence",resolve:M8e,construct:I8e}),P8e=Object.prototype.toString;o(B8e,"resolveYamlPairs");o(F8e,"constructYamlPairs");z8e=new Da("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:B8e,construct:F8e}),G8e=Object.prototype.hasOwnProperty;o($8e,"resolveYamlSet");o(V8e,"constructYamlSet");U8e=new Da("tag:yaml.org,2002:set",{kind:"mapping",resolve:$8e,construct:V8e}),xZ=x8e.extend({implicit:[k8e,S8e],explicit:[D8e,O8e,z8e,U8e]}),$h=Object.prototype.hasOwnProperty,P5=1,bZ=2,wZ=3,B5=4,U9=1,H8e=2,eZ=3,W8e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Y8e=/[\x85\u2028\u2029]/,q8e=/[,\[\]\{\}]/,TZ=/^(?:!|!!|![a-z\-]+!)$/i,kZ=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(tZ,"_class");o(yc,"is_EOL");o(_d,"is_WHITE_SPACE");o(Ss,"is_WS_OR_EOL");o(lm,"is_FLOW_INDICATOR");o(X8e,"fromHexCode");o(j8e,"escapedHexLen");o(K8e,"fromDecimalCode");o(rZ,"simpleEscapeSequence");o(Q8e,"charFromCodepoint");EZ=new Array(256),SZ=new Array(256);for(Ad=0;Ad<256;Ad++)EZ[Ad]=rZ(Ad)?1:0,SZ[Ad]=rZ(Ad);o(Z8e,"State$1");o(CZ,"generateError");o(Qt,"throwError");o(F5,"throwWarning");nZ={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&F5(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],TZ.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),$h.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),kZ.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(Gh,"captureSegment");o(iZ,"mergeMappings");o(cm,"storeMappingPair");o(K9,"readLineBreak");o(Ci,"skipSeparationSpace");o($5,"testDocumentSeparator");o(Q9,"writeFoldedLines");o(J8e,"readPlainScalar");o(e_e,"readSingleQuotedScalar");o(t_e,"readDoubleQuotedScalar");o(r_e,"readFlowCollection");o(n_e,"readBlockScalar");o(aZ,"readBlockSequence");o(i_e,"readBlockMapping");o(a_e,"readTagProperty");o(s_e,"readAnchorProperty");o(o_e,"readAlias");o(um,"composeNode");o(l_e,"readDocument");o(AZ,"loadDocuments");o(c_e,"loadAll$1");o(u_e,"load$1");h_e=c_e,f_e=u_e,_Z={loadAll:h_e,load:f_e},LZ=Object.prototype.toString,DZ=Object.prototype.hasOwnProperty,Z9=65279,d_e=9,wv=10,p_e=13,m_e=32,g_e=33,y_e=34,W9=35,v_e=37,x_e=38,b_e=39,w_e=42,NZ=44,T_e=45,z5=58,k_e=61,E_e=62,S_e=63,C_e=64,RZ=91,MZ=93,A_e=96,IZ=123,__e=124,OZ=125,Na={};Na[0]="\\0";Na[7]="\\a";Na[8]="\\b";Na[9]="\\t";Na[10]="\\n";Na[11]="\\v";Na[12]="\\f";Na[13]="\\r";Na[27]="\\e";Na[34]='\\"';Na[92]="\\\\";Na[133]="\\N";Na[160]="\\_";Na[8232]="\\L";Na[8233]="\\P";L_e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],D_e=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(N_e,"compileStyleMap");o(R_e,"encodeHex");M_e=1,Tv=2;o(I_e,"State");o(sZ,"indentString");o(Y9,"generateNextLine");o(O_e,"testImplicitResolving");o(G5,"isWhitespace");o(kv,"isPrintable");o(oZ,"isNsCharOrWhitespace");o(lZ,"isPlainSafe");o(P_e,"isPlainSafeFirst");o(B_e,"isPlainSafeLast");o(xv,"codePointAt");o(PZ,"needIndentIndicator");BZ=1,q9=2,FZ=3,zZ=4,om=5;o(F_e,"chooseScalarStyle");o(z_e,"writeScalar");o(cZ,"blockHeader");o(uZ,"dropEndingNewline");o(G_e,"foldString");o(hZ,"foldLine");o($_e,"escapeString");o(V_e,"writeFlowSequence");o(fZ,"writeBlockSequence");o(U_e,"writeFlowMapping");o(H_e,"writeBlockMapping");o(dZ,"detectType");o(Cu,"writeNode");o(W_e,"getDuplicateReferences");o(X9,"inspectNode");o(Y_e,"dump$1");q_e=Y_e,X_e={dump:q_e};o(J9,"renamed");hm=gZ,fm=_Z.load,uNt=_Z.loadAll,hNt=X_e.dump,fNt=J9("safeLoad","load"),dNt=J9("safeLoadAll","loadAll"),pNt=J9("safeDump","dump")});function rL(t){let e=[];for(let r of t){let n=Sv.get(r);n?.styles&&(e=[...e,...n.styles??[]].map(i=>i.trim())),n?.textStyles&&(e=[...e,...n.textStyles??[]].map(i=>i.trim()))}return e}var j_e,GZ,dm,Vh,Cs,Sv,Au,nL,iL,U5,tL,Go,H5,W5,Y5,q5,K_e,Q_e,Z_e,J_e,e9e,t9e,r9e,aL,n9e,i9e,a9e,$Z,s9e,o9e,sL,VZ,UZ,l9e,HZ,c9e,u9e,h9e,f9e,d9e,Ev,WZ,YZ,p9e,m9e,qZ,g9e,y9e,v9e,x9e,b9e,XZ,jZ,w9e,T9e,k9e,E9e,S9e,C9e,X5,oL=M(()=>{"use strict";mr();hr();Vt();fr();G9();ht();V5();ki();j_e="flowchart-",GZ=0,dm=de(),Vh=new Map,Cs=[],Sv=new Map,Au=[],nL=new Map,iL=new Map,U5=0,tL=!0,W5=[],Y5=o(t=>je.sanitizeText(t,dm),"sanitizeText"),q5=o(function(t){for(let e of Vh.values())if(e.id===t)return e.domId;return t},"lookUpDomId"),K_e=o(function(t,e,r,n,i,a,s={},l){if(!t||t.trim().length===0)return;let u,h=Vh.get(t);if(h===void 0&&(h={id:t,labelType:"text",domId:j_e+t+"-"+GZ,styles:[],classes:[]},Vh.set(t,h)),GZ++,e!==void 0?(dm=de(),u=Y5(e.text.trim()),h.labelType=e.type,u.startsWith('"')&&u.endsWith('"')&&(u=u.substring(1,u.length-1)),h.text=u):h.text===void 0&&(h.text=t),r!==void 0&&(h.type=r),n?.forEach(function(f){h.styles.push(f)}),i?.forEach(function(f){h.classes.push(f)}),a!==void 0&&(h.dir=a),h.props===void 0?h.props=s:s!==void 0&&Object.assign(h.props,s),l!==void 0){let f;l.includes(` +`)?f=l+` +`:f=`{ +`+l+` +}`;let d=fm(f,{schema:hm});if(d.shape){if(d.shape!==d.shape.toLowerCase()||d.shape.includes("_"))throw new Error(`No such shape: ${d.shape}. Shape names should be lowercase.`);if(!ZQ(d.shape))throw new Error(`No such shape: ${d.shape}.`);h.type=d?.shape}d?.label&&(h.text=d?.label),d?.icon&&(h.icon=d?.icon,!d.label?.trim()&&h.text===t&&(h.text="")),d?.form&&(h.form=d?.form),d?.pos&&(h.pos=d?.pos),d?.img&&(h.img=d?.img,!d.label?.trim()&&h.text===t&&(h.text="")),d?.constraint&&(h.constraint=d.constraint),d.w&&(h.assetWidth=Number(d.w)),d.h&&(h.assetHeight=Number(d.h))}},"addVertex"),Q_e=o(function(t,e,r){let a={start:t,end:e,type:void 0,text:"",labelType:"text"};Y.info("abc78 Got edge...",a);let s=r.text;if(s!==void 0&&(a.text=Y5(s.text.trim()),a.text.startsWith('"')&&a.text.endsWith('"')&&(a.text=a.text.substring(1,a.text.length-1)),a.labelType=s.type),r!==void 0&&(a.type=r.type,a.stroke=r.stroke,a.length=r.length>10?10:r.length),Cs.length<(dm.maxEdges??500))Y.info("Pushing edge..."),Cs.push(a);else throw new Error(`Edge limit exceeded. ${Cs.length} edges found, but the limit is ${dm.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},"addSingleLink"),Z_e=o(function(t,e,r){Y.info("addLink",t,e,r);for(let n of t)for(let i of e)Q_e(n,i,r)},"addLink"),J_e=o(function(t,e){t.forEach(function(r){r==="default"?Cs.defaultInterpolate=e:Cs[r].interpolate=e})},"updateLinkInterpolate"),e9e=o(function(t,e){t.forEach(function(r){if(typeof r=="number"&&r>=Cs.length)throw new Error(`The index ${r} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${Cs.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);r==="default"?Cs.defaultStyle=e:(Cs[r].style=e,(Cs[r]?.style?.length??0)>0&&!Cs[r]?.style?.some(n=>n?.startsWith("fill"))&&Cs[r]?.style?.push("fill:none"))})},"updateLink"),t9e=o(function(t,e){t.split(",").forEach(function(r){let n=Sv.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},Sv.set(r,n)),e?.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)})})},"addClass"),r9e=o(function(t){Go=t,/.*/.exec(Go)&&(Go="LR"),/.*v/.exec(Go)&&(Go="TB"),Go==="TD"&&(Go="TB")},"setDirection"),aL=o(function(t,e){for(let r of t.split(",")){let n=Vh.get(r);n&&n.classes.push(e);let i=nL.get(r);i&&i.classes.push(e)}},"setClass"),n9e=o(function(t,e){if(e!==void 0){e=Y5(e);for(let r of t.split(","))iL.set(H5==="gen-1"?q5(r):r,e)}},"setTooltip"),i9e=o(function(t,e,r){let n=q5(t);if(de().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),ze(this).classed("hover",!1)})},"setupToolTips");W5.push(HZ);c9e=o(function(t="gen-1"){Vh=new Map,Sv=new Map,Cs=[],W5=[HZ],Au=[],nL=new Map,U5=0,iL=new Map,tL=!0,H5=t,dm=de(),_r()},"clear"),u9e=o(t=>{H5=t||"gen-2"},"setGen"),h9e=o(function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},"defaultStyle"),f9e=o(function(t,e,r){let n=t.text.trim(),i=r.text;t===r&&/\s/.exec(r.text)&&(n=void 0);function a(h){let f={boolean:{},number:{},string:{}},d=[],p;return{nodeList:h.filter(function(g){let y=typeof g;return g.stmt&&g.stmt==="dir"?(p=g.value,!1):g.trim()===""?!1:y in f?f[y].hasOwnProperty(g)?!1:f[y][g]=!0:d.includes(g)?!1:d.push(g)}),dir:p}}o(a,"uniq");let{nodeList:s,dir:l}=a(e.flat());if(H5==="gen-1")for(let h=0;h2e3)return{result:!1,count:0};if(WZ[Ev]=e,Au[e].id===t)return{result:!0,count:0};let n=0,i=1;for(;n=0){let s=YZ(t,a);if(s.result)return{result:!0,count:i+s.count};i=i+s.count}n=n+1}return{result:!1,count:i}},"indexNodes2"),p9e=o(function(t){return WZ[t]},"getDepthFirstPos"),m9e=o(function(){Ev=-1,Au.length>0&&YZ("none",Au.length-1)},"indexNodes"),qZ=o(function(){return Au},"getSubGraphs"),g9e=o(()=>tL?(tL=!1,!0):!1,"firstGraph"),y9e=o(t=>{let e=t.trim(),r="arrow_open";switch(e[0]){case"<":r="arrow_point",e=e.slice(1);break;case"x":r="arrow_cross",e=e.slice(1);break;case"o":r="arrow_circle",e=e.slice(1);break}let n="normal";return e.includes("=")&&(n="thick"),e.includes(".")&&(n="dotted"),{type:r,stroke:n}},"destructStartLink"),v9e=o((t,e)=>{let r=e.length,n=0;for(let i=0;i{let e=t.trim(),r=e.slice(0,-1),n="arrow_open";switch(e.slice(-1)){case"x":n="arrow_cross",e.startsWith("x")&&(n="double_"+n,r=r.slice(1));break;case">":n="arrow_point",e.startsWith("<")&&(n="double_"+n,r=r.slice(1));break;case"o":n="arrow_circle",e.startsWith("o")&&(n="double_"+n,r=r.slice(1));break}let i="normal",a=r.length-1;r.startsWith("=")&&(i="thick"),r.startsWith("~")&&(i="invisible");let s=v9e(".",r);return s&&(i="dotted",a=s),{type:n,stroke:i,length:a}},"destructEndLink"),b9e=o((t,e)=>{let r=x9e(t),n;if(e){if(n=y9e(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=r.length,n}return r},"destructLink"),XZ=o((t,e)=>{for(let r of t)if(r.nodes.includes(e))return!0;return!1},"exists"),jZ=o((t,e)=>{let r=[];return t.nodes.forEach((n,i)=>{XZ(e,n)||r.push(t.nodes[i])}),{nodes:r}},"makeUniq"),w9e={firstGraph:g9e},T9e=o(t=>{if(t.img)return"imageSquare";if(t.icon)return t.form==="circle"?"iconCircle":t.form==="square"?"iconSquare":t.form==="rounded"?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}},"getTypeFromVertex"),k9e=o((t,e)=>t.find(r=>r.id===e),"findNode"),E9e=o(t=>{let e="none",r="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":r=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),r=e;break}return{arrowTypeStart:e,arrowTypeEnd:r}},"destructEdgeType"),S9e=o((t,e,r,n,i,a)=>{let s=r.get(t.id),l=n.get(t.id)??!1,u=k9e(e,t.id);if(u)u.cssStyles=t.styles,u.cssCompiledStyles=rL(t.classes),u.cssClasses=t.classes.join(" ");else{let h={id:t.id,label:t.text,labelStyle:"",parentId:s,padding:i.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:rL(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:a,link:t.link,linkTarget:t.linkTarget,tooltip:$Z(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};l?e.push({...h,isGroup:!0,shape:"rect"}):e.push({...h,isGroup:!1,shape:T9e(t)})}},"addNodeFromVertex");o(rL,"getCompiledStyles");C9e=o(()=>{let t=de(),e=[],r=[],n=qZ(),i=new Map,a=new Map;for(let u=n.length-1;u>=0;u--){let h=n[u];h.nodes.length>0&&a.set(h.id,!0);for(let f of h.nodes)i.set(f,h.id)}for(let u=n.length-1;u>=0;u--){let h=n[u];e.push({id:h.id,label:h.title,labelStyle:"",parentId:i.get(h.id),padding:8,cssCompiledStyles:rL(h.classes),cssClasses:h.classes.join(" "),shape:"rect",dir:h.dir,isGroup:!0,look:t.look})}VZ().forEach(u=>{S9e(u,e,i,a,t,t.look||"classic")});let l=UZ();return l.forEach((u,h)=>{let{arrowTypeStart:f,arrowTypeEnd:d}=E9e(u.type),p=[...l.defaultStyle??[]];u.style&&p.push(...u.style);let m={id:p5(u.start,u.end,{counter:h,prefix:"L"}),start:u.start,end:u.end,type:u.type??"normal",label:u.text,labelpos:"c",thickness:u.stroke,minlen:u.length,classes:u?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:u?.stroke==="invisible"?"none":f,arrowTypeEnd:u?.stroke==="invisible"?"none":d,arrowheadStyle:"fill: #333",labelStyle:p,style:p,pattern:u.stroke,look:t.look};r.push(m)}),{nodes:e,edges:r,other:{},config:t}},"getData"),X5={defaultConfig:o(()=>S4.flowchart,"defaultConfig"),setAccTitle:Rr,getAccTitle:Pr,getAccDescription:Fr,getData:C9e,setAccDescription:Br,addVertex:K_e,lookUpDomId:q5,addLink:Z_e,updateLinkInterpolate:J_e,updateLink:e9e,addClass:t9e,setDirection:r9e,setClass:aL,setTooltip:n9e,getTooltip:$Z,setClickEvent:s9e,setLink:a9e,bindFunctions:o9e,getDirection:sL,getVertices:VZ,getEdges:UZ,getClasses:l9e,clear:c9e,setGen:u9e,defaultStyle:h9e,addSubGraph:f9e,getDepthFirstPos:p9e,indexNodes:m9e,getSubGraphs:qZ,destructLink:b9e,lex:w9e,exists:XZ,makeUniq:jZ,setDiagramTitle:ln,getDiagramTitle:Jr}});var pm,j5=M(()=>{"use strict";mr();pm=o((t,e)=>{let r;return e==="sandbox"&&(r=ze("#i"+t)),(e==="sandbox"?ze(r.nodes()[0].contentDocument.body):ze("body")).select(`[id="${t}"]`)},"getDiagramElement")});var _u,Cv=M(()=>{"use strict";_u=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var KZ,A9e,_9e,L9e,D9e,N9e,R9e,QZ,mm,ZZ,K5=M(()=>{"use strict";Vt();fr();ht();Cv();mr();jt();Dl();w9();I5();zh();Xt();KZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=et(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Si(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],C=ze(g);y=L.getBoundingClientRect(),C.attr("width",y.width),C.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Ke.svg(d),C=Ze(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),A=L.path(La(b,w,v,x,0),C);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=_u(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Oh(e,L)},{cluster:d,labelBBox:y}},"rect"),A9e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Oh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),_9e=o(async(t,e)=>{let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(xr(r.flowchart.htmlLabels)){let A=m.children[0],I=ze(m);g=A.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,_=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,L;if(e.look==="handDrawn"){let A=e.cssClasses.includes("statediagram-cluster-alt"),I=Ke.svg(h),D=e.rx||e.ry?I.path(La(_,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(_,T,x,b,{seed:i});L=h.insert(()=>D,":first-child");let k=I.rectangle(_,E,x,w,{fill:A?a:s,fillStyle:A?"hachure":"solid",stroke:u,seed:i});L=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else L=f.insert("rect",":first-child"),L.attr("class","outer").attr("x",_).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",_).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(xr(r.flowchart.htmlLabels)?0:3)})`);let C=L.node().getBBox();return e.height=C.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(A){return Oh(e,A)},{cluster:h,labelBBox:g}},"roundedWithTitle"),L9e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=et(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Si(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],C=ze(g);y=L.getBoundingClientRect(),C.attr("width",y.width),C.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Ke.svg(d),C=Ze(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),A=L.path(La(b,w,v,x,e.rx),C);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=_u(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Oh(e,L)},{cluster:d,labelBBox:y}},"kanbanSection"),D9e=o((t,e)=>{let r=de(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Ke.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Oh(e,y)},{cluster:s,labelBBox:{}}},"divider"),N9e=KZ,R9e={rect:KZ,squareRect:N9e,roundedWithTitle:_9e,noteGroup:A9e,divider:D9e,kanbanSection:L9e},QZ=new Map,mm=o(async(t,e)=>{let r=e.shape||"rect",n=await R9e[r](t,e);return QZ.set(e.id,n),n},"insertCluster"),ZZ=o(()=>{QZ=new Map},"clear")});function Q5(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Un(t),e=Un(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var $o,Un,Z5,lL=M(()=>{"use strict";$o={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Q5,"calculateDeltaAndAngle");Un=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),Z5=o(t=>({x:o(function(e,r,n){let i=0,a=Un(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Q5(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Un(e).x-Un(n[n.length-1]).x),l=Math.abs(Un(e).y-Un(n[n.length-1]).y),u=Math.abs(Un(e).x-Un(n[0]).x),h=Math.abs(Un(e).y-Un(n[0]).y),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Q5(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Un(e).y-Un(n[n.length-1]).y),l=Math.abs(Un(e).x-Un(n[n.length-1]).x),u=Math.abs(Un(e).y-Un(n[0]).y),h=Math.abs(Un(e).x-Un(n[0]).x),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";ht();eJ=o((t,e,r,n,i)=>{e.arrowTypeStart&&JZ(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&JZ(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),M9e={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},JZ=o((t,e,r,n,i,a)=>{let s=M9e[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function J5(t,e){de().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function P9e(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var ew,ua,iJ,Av,tw,rw,I9e,O9e,rJ,nJ,B9e,nw,cL=M(()=>{"use strict";Vt();fr();ht();Dl();hr();lL();Cv();mr();jt();I5();tJ();ew=new Map,ua=new Map,iJ=o(()=>{ew.clear(),ua.clear()},"clear"),Av=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),tw=o(async(t,e)=>{let r=xr(de().flowchart.htmlLabels),n=await Si(t,e.label,{style:Av(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=ze(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),ew.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ua.get(e.id)||ua.set(e.id,{}),ua.get(e.id).startLeft=h,J5(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ua.get(e.id)||ua.set(e.id,{}),ua.get(e.id).startRight=h,J5(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ua.get(e.id)||ua.set(e.id,{}),ua.get(e.id).endLeft=h,J5(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,Av(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ua.get(e.id)||ua.set(e.id,{}),ua.get(e.id).endRight=h,J5(l,e.endLabelRight)}return n},"insertEdgeLabel");o(J5,"setTerminalWidth");rw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,ew.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=de(),{subGraphTitleTotalMargin:i}=_u(n);if(t.label){let a=ew.get(t.id),s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=ua.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=ua.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=ua.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=ua.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),I9e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),O9e=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!I9e(e,a)&&!i){let s=O9e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(P9e,"extractCornerPoints");nJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),B9e=o(function(t){let{cornerPointPositions:e}=P9e(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),nw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=de(),u=e.points,h=!1,f=i;var d=a;d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=rJ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=rJ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let p=u.filter(L=>!Number.isNaN(L.y));p=B9e(p);let m=Do;e.curve&&(m=e.curve);let{x:g,y}=Z5(e),v=Ka().x(g).y(y).curve(m),x;switch(e.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-invisible";break;default:x="edge-thickness-normal"}switch(e.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break;default:x+=" edge-pattern-solid"}let b,w=v(p),_=Array.isArray(e.style)?e.style:[e.style];if(e.look==="handDrawn"){let L=Ke.svg(t);Object.assign([],p);let C=L.path(w,{roughness:.3,seed:l});x+=" transition",b=ze(C).select("path").attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((I,D)=>I+";"+D,""):"");let A=b.attr("d");b.attr("d",A),t.node().appendChild(b.node())}else b=t.append("path").attr("d",w).attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((L,C)=>L+";"+C,""):"");let T="";(de().flowchart.arrowMarkerAbsolute||de().state.arrowMarkerAbsolute)&&(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,T=T.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),eJ(b,e,T,s,n);let E={};return h&&(E.updatedPath=u),E.originalPath=e.points,E},"insertEdge")});var F9e,z9e,G9e,$9e,V9e,U9e,H9e,W9e,Y9e,q9e,X9e,iw,uL=M(()=>{"use strict";ht();F9e=o((t,e,r,n)=>{e.forEach(i=>{X9e[i](t,r,n)})},"insertMarkers"),z9e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),G9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),$9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),V9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),U9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),W9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),Y9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),q9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),X9e={extension:z9e,composition:G9e,aggregation:$9e,dependency:V9e,lollipop:U9e,point:H9e,circle:W9e,cross:Y9e,barb:q9e},iw=F9e});async function gm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?z9[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),aw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var aw,aJ,sJ,_v,sw=M(()=>{"use strict";ht();G9();aw=new Map;o(gm,"insertNode");aJ=o((t,e)=>{aw.set(e.id,t)},"setNodeElem"),sJ=o(()=>{aw.clear()},"clear"),_v=o(t=>{let e=aw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var oJ,lJ=M(()=>{"use strict";Ua();fr();ht();K5();cL();uL();sw();Ft();hr();oJ={common:je,getConfig:Sr,insertCluster:mm,insertEdge:nw,insertEdgeLabel:tw,insertMarkers:iw,insertNode:gm,interpolateToCurve:Q_,labelHelper:ot,log:Y,positionEdgeLabel:rw}});function K9e(t){return typeof t=="symbol"||Zn(t)&&ca(t)==j9e}var j9e,ro,Ld=M(()=>{"use strict";xu();Mo();j9e="[object Symbol]";o(K9e,"isSymbol");ro=K9e});function Q9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(Q9e,"arrayMap");As=Q9e});function hJ(t){if(typeof t=="string")return t;if(Mt(t))return As(t,hJ)+"";if(ro(t))return uJ?uJ.call(t):"";var e=t+"";return e=="0"&&1/t==-Z9e?"-0":e}var Z9e,cJ,uJ,fJ,dJ=M(()=>{"use strict";gd();Dd();Vn();Ld();Z9e=1/0,cJ=ea?ea.prototype:void 0,uJ=cJ?cJ.toString:void 0;o(hJ,"baseToString");fJ=hJ});function eLe(t){for(var e=t.length;e--&&J9e.test(t.charAt(e)););return e}var J9e,pJ,mJ=M(()=>{"use strict";J9e=/\s/;o(eLe,"trimmedEndIndex");pJ=eLe});function rLe(t){return t&&t.slice(0,pJ(t)+1).replace(tLe,"")}var tLe,gJ,yJ=M(()=>{"use strict";mJ();tLe=/^\s+/;o(rLe,"baseTrim");gJ=rLe});function oLe(t){if(typeof t=="number")return t;if(ro(t))return vJ;if(yn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=yn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=gJ(t);var r=iLe.test(t);return r||aLe.test(t)?sLe(t.slice(2),r?2:8):nLe.test(t)?vJ:+t}var vJ,nLe,iLe,aLe,sLe,xJ,bJ=M(()=>{"use strict";yJ();Qs();Ld();vJ=NaN,nLe=/^[-+]0x[0-9a-f]+$/i,iLe=/^0b[01]+$/i,aLe=/^0o[0-7]+$/i,sLe=parseInt;o(oLe,"toNumber");xJ=oLe});function cLe(t){if(!t)return t===0?t:0;if(t=xJ(t),t===wJ||t===-wJ){var e=t<0?-1:1;return e*lLe}return t===t?t:0}var wJ,lLe,ym,hL=M(()=>{"use strict";bJ();wJ=1/0,lLe=17976931348623157e292;o(cLe,"toFinite");ym=cLe});function uLe(t){var e=ym(t),r=e%1;return e===e?r?e-r:e:0}var vc,vm=M(()=>{"use strict";hL();o(uLe,"toInteger");vc=uLe});var hLe,ow,TJ=M(()=>{"use strict";Ch();No();hLe=vs(ai,"WeakMap"),ow=hLe});function fLe(){}var Jn,fL=M(()=>{"use strict";o(fLe,"noop");Jn=fLe});function dLe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(dLe,"arrayEach");lw=dLe});function pLe(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(pLe,"baseFindIndex");cw=pLe});function mLe(t){return t!==t}var kJ,EJ=M(()=>{"use strict";o(mLe,"baseIsNaN");kJ=mLe});function gLe(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(gLe,"strictIndexOf");SJ=gLe});function yLe(t,e,r){return e===e?SJ(t,e,r):cw(t,kJ,r)}var xm,uw=M(()=>{"use strict";pL();EJ();CJ();o(yLe,"baseIndexOf");xm=yLe});function vLe(t,e){var r=t==null?0:t.length;return!!r&&xm(t,e,0)>-1}var hw,mL=M(()=>{"use strict";uw();o(vLe,"arrayIncludes");hw=vLe});var xLe,AJ,_J=M(()=>{"use strict";F_();xLe=n5(Object.keys,Object),AJ=xLe});function TLe(t){if(!fc(t))return AJ(t);var e=[];for(var r in Object(t))wLe.call(t,r)&&r!="constructor"&&e.push(r);return e}var bLe,wLe,bm,fw=M(()=>{"use strict";Kp();_J();bLe=Object.prototype,wLe=bLe.hasOwnProperty;o(TLe,"baseKeys");bm=TLe});function kLe(t){return si(t)?l5(t):bm(t)}var zr,xc=M(()=>{"use strict";U_();fw();Io();o(kLe,"keys");zr=kLe});var ELe,SLe,CLe,ha,LJ=M(()=>{"use strict";em();wd();q_();Io();Kp();xc();ELe=Object.prototype,SLe=ELe.hasOwnProperty,CLe=h5(function(t,e){if(fc(e)||si(e)){Bo(e,zr(e),t);return}for(var r in e)SLe.call(e,r)&&dc(t,r,e[r])}),ha=CLe});function LLe(t,e){if(Mt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||ro(t)?!0:_Le.test(t)||!ALe.test(t)||e!=null&&t in Object(e)}var ALe,_Le,wm,dw=M(()=>{"use strict";Vn();Ld();ALe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,_Le=/^\w*$/;o(LLe,"isKey");wm=LLe});function NLe(t){var e=Vp(t,function(n){return r.size===DLe&&r.clear(),n}),r=e.cache;return e}var DLe,DJ,NJ=M(()=>{"use strict";N_();DLe=500;o(NLe,"memoizeCapped");DJ=NLe});var RLe,MLe,ILe,RJ,MJ=M(()=>{"use strict";NJ();RLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,MLe=/\\(\\)?/g,ILe=DJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(RLe,function(r,n,i,a){e.push(i?a.replace(MLe,"$1"):n||r)}),e}),RJ=ILe});function OLe(t){return t==null?"":fJ(t)}var pw,gL=M(()=>{"use strict";dJ();o(OLe,"toString");pw=OLe});function PLe(t,e){return Mt(t)?t:wm(t,e)?[t]:RJ(pw(t))}var Uh,Lv=M(()=>{"use strict";Vn();dw();MJ();gL();o(PLe,"castPath");Uh=PLe});function FLe(t){if(typeof t=="string"||ro(t))return t;var e=t+"";return e=="0"&&1/t==-BLe?"-0":e}var BLe,bc,Tm=M(()=>{"use strict";Ld();BLe=1/0;o(FLe,"toKey");bc=FLe});function zLe(t,e){e=Uh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";Lv();Tm();o(zLe,"baseGet");Hh=zLe});function GLe(t,e,r){var n=t==null?void 0:Hh(t,e);return n===void 0?r:n}var IJ,OJ=M(()=>{"use strict";Dv();o(GLe,"get");IJ=GLe});function $Le(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o($Le,"arrayPush");km=$Le});function VLe(t){return Mt(t)||Al(t)||!!(PJ&&t&&t[PJ])}var PJ,BJ,FJ=M(()=>{"use strict";gd();Qp();Vn();PJ=ea?ea.isConcatSpreadable:void 0;o(VLe,"isFlattenable");BJ=VLe});function zJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=BJ),i||(i=[]);++a0&&r(l)?e>1?zJ(l,e-1,r,n,i):km(i,l):n||(i[i.length]=l)}return i}var wc,Em=M(()=>{"use strict";mw();FJ();o(zJ,"baseFlatten");wc=zJ});function ULe(t){var e=t==null?0:t.length;return e?wc(t,1):[]}var Wr,gw=M(()=>{"use strict";Em();o(ULe,"flatten");Wr=ULe});function HLe(t){return u5(c5(t,void 0,Wr),t+"")}var GJ,$J=M(()=>{"use strict";gw();H_();Y_();o(HLe,"flatRest");GJ=HLe});function WLe(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(WLe,"baseSlice");yw=WLe});function eDe(t){return JLe.test(t)}var YLe,qLe,XLe,jLe,KLe,QLe,ZLe,JLe,VJ,UJ=M(()=>{"use strict";YLe="\\ud800-\\udfff",qLe="\\u0300-\\u036f",XLe="\\ufe20-\\ufe2f",jLe="\\u20d0-\\u20ff",KLe=qLe+XLe+jLe,QLe="\\ufe0e\\ufe0f",ZLe="\\u200d",JLe=RegExp("["+ZLe+YLe+KLe+QLe+"]");o(eDe,"hasUnicode");VJ=eDe});function tDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(tDe,"arrayReduce");HJ=tDe});function rDe(t,e){return t&&Bo(e,zr(e),t)}var YJ,qJ=M(()=>{"use strict";wd();xc();o(rDe,"baseAssign");YJ=rDe});function nDe(t,e){return t&&Bo(e,xs(e),t)}var XJ,jJ=M(()=>{"use strict";wd();Mh();o(nDe,"baseAssignIn");XJ=nDe});function iDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(iDe,"arrayFilter");Sm=iDe});function aDe(){return[]}var xw,vL=M(()=>{"use strict";o(aDe,"stubArray");xw=aDe});var sDe,oDe,KJ,lDe,Cm,bw=M(()=>{"use strict";vw();vL();sDe=Object.prototype,oDe=sDe.propertyIsEnumerable,KJ=Object.getOwnPropertySymbols,lDe=KJ?function(t){return t==null?[]:(t=Object(t),Sm(KJ(t),function(e){return oDe.call(t,e)}))}:xw,Cm=lDe});function cDe(t,e){return Bo(t,Cm(t),e)}var QJ,ZJ=M(()=>{"use strict";wd();bw();o(cDe,"copySymbols");QJ=cDe});var uDe,hDe,ww,xL=M(()=>{"use strict";mw();i5();bw();vL();uDe=Object.getOwnPropertySymbols,hDe=uDe?function(t){for(var e=[];t;)km(e,Cm(t)),t=jp(t);return e}:xw,ww=hDe});function fDe(t,e){return Bo(t,ww(t),e)}var JJ,eee=M(()=>{"use strict";wd();xL();o(fDe,"copySymbolsIn");JJ=fDe});function dDe(t,e,r){var n=e(t);return Mt(t)?n:km(n,r(t))}var Tw,bL=M(()=>{"use strict";mw();Vn();o(dDe,"baseGetAllKeys");Tw=dDe});function pDe(t){return Tw(t,zr,Cm)}var Nv,wL=M(()=>{"use strict";bL();bw();xc();o(pDe,"getAllKeys");Nv=pDe});function mDe(t){return Tw(t,xs,ww)}var kw,TL=M(()=>{"use strict";bL();xL();Mh();o(mDe,"getAllKeysIn");kw=mDe});var gDe,Ew,tee=M(()=>{"use strict";Ch();No();gDe=vs(ai,"DataView"),Ew=gDe});var yDe,Sw,ree=M(()=>{"use strict";Ch();No();yDe=vs(ai,"Promise"),Sw=yDe});var vDe,Wh,kL=M(()=>{"use strict";Ch();No();vDe=vs(ai,"Set"),Wh=vDe});var nee,xDe,iee,aee,see,oee,bDe,wDe,TDe,kDe,EDe,Nd,no,Rd=M(()=>{"use strict";tee();K3();ree();kL();TJ();xu();__();nee="[object Map]",xDe="[object Object]",iee="[object Promise]",aee="[object Set]",see="[object WeakMap]",oee="[object DataView]",bDe=bu(Ew),wDe=bu(Lh),TDe=bu(Sw),kDe=bu(Wh),EDe=bu(ow),Nd=ca;(Ew&&Nd(new Ew(new ArrayBuffer(1)))!=oee||Lh&&Nd(new Lh)!=nee||Sw&&Nd(Sw.resolve())!=iee||Wh&&Nd(new Wh)!=aee||ow&&Nd(new ow)!=see)&&(Nd=o(function(t){var e=ca(t),r=e==xDe?t.constructor:void 0,n=r?bu(r):"";if(n)switch(n){case bDe:return oee;case wDe:return nee;case TDe:return iee;case kDe:return aee;case EDe:return see}return e},"getTag"));no=Nd});function ADe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&CDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var SDe,CDe,lee,cee=M(()=>{"use strict";SDe=Object.prototype,CDe=SDe.hasOwnProperty;o(ADe,"initCloneArray");lee=ADe});function _De(t,e){var r=e?Xp(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var uee,hee=M(()=>{"use strict";e5();o(_De,"cloneDataView");uee=_De});function DDe(t){var e=new t.constructor(t.source,LDe.exec(t));return e.lastIndex=t.lastIndex,e}var LDe,fee,dee=M(()=>{"use strict";LDe=/\w*$/;o(DDe,"cloneRegExp");fee=DDe});function NDe(t){return mee?Object(mee.call(t)):{}}var pee,mee,gee,yee=M(()=>{"use strict";gd();pee=ea?ea.prototype:void 0,mee=pee?pee.valueOf:void 0;o(NDe,"cloneSymbol");gee=NDe});function QDe(t,e,r){var n=t.constructor;switch(e){case GDe:return Xp(t);case RDe:case MDe:return new n(+t);case $De:return uee(t,r);case VDe:case UDe:case HDe:case WDe:case YDe:case qDe:case XDe:case jDe:case KDe:return t5(t,r);case IDe:return new n;case ODe:case FDe:return new n(t);case PDe:return fee(t);case BDe:return new n;case zDe:return gee(t)}}var RDe,MDe,IDe,ODe,PDe,BDe,FDe,zDe,GDe,$De,VDe,UDe,HDe,WDe,YDe,qDe,XDe,jDe,KDe,vee,xee=M(()=>{"use strict";e5();hee();dee();yee();P_();RDe="[object Boolean]",MDe="[object Date]",IDe="[object Map]",ODe="[object Number]",PDe="[object RegExp]",BDe="[object Set]",FDe="[object String]",zDe="[object Symbol]",GDe="[object ArrayBuffer]",$De="[object DataView]",VDe="[object Float32Array]",UDe="[object Float64Array]",HDe="[object Int8Array]",WDe="[object Int16Array]",YDe="[object Int32Array]",qDe="[object Uint8Array]",XDe="[object Uint8ClampedArray]",jDe="[object Uint16Array]",KDe="[object Uint32Array]";o(QDe,"initCloneByTag");vee=QDe});function JDe(t){return Zn(t)&&no(t)==ZDe}var ZDe,bee,wee=M(()=>{"use strict";Rd();Mo();ZDe="[object Map]";o(JDe,"baseIsMap");bee=JDe});var Tee,eNe,kee,Eee=M(()=>{"use strict";wee();bd();nv();Tee=Po&&Po.isMap,eNe=Tee?Oo(Tee):bee,kee=eNe});function rNe(t){return Zn(t)&&no(t)==tNe}var tNe,See,Cee=M(()=>{"use strict";Rd();Mo();tNe="[object Set]";o(rNe,"baseIsSet");See=rNe});var Aee,nNe,_ee,Lee=M(()=>{"use strict";Cee();bd();nv();Aee=Po&&Po.isSet,nNe=Aee?Oo(Aee):See,_ee=nNe});function Cw(t,e,r,n,i,a){var s,l=e&iNe,u=e&aNe,h=e&sNe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!yn(t))return t;var f=Mt(t);if(f){if(s=lee(t),!l)return r5(t,s)}else{var d=no(t),p=d==Nee||d==hNe;if(_l(t))return J3(t,l);if(d==Ree||d==Dee||p&&!i){if(s=u||p?{}:a5(t),!l)return u?JJ(t,XJ(s,t)):QJ(t,YJ(s,t))}else{if(!Sn[d])return i?t:{};s=vee(t,d,l)}}a||(a=new uc);var m=a.get(t);if(m)return m;a.set(t,s),_ee(t)?t.forEach(function(v){s.add(Cw(v,e,r,v,t,a))}):kee(t)&&t.forEach(function(v,x){s.set(x,Cw(v,e,r,x,t,a))});var g=h?u?kw:Nv:u?xs:zr,y=f?void 0:g(t);return lw(y||t,function(v,x){y&&(x=v,v=t[x]),dc(s,x,Cw(v,e,r,x,t,a))}),s}var iNe,aNe,sNe,Dee,oNe,lNe,cNe,uNe,Nee,hNe,fNe,dNe,Ree,pNe,mNe,gNe,yNe,vNe,xNe,bNe,wNe,TNe,kNe,ENe,SNe,CNe,ANe,_Ne,LNe,Sn,Aw,EL=M(()=>{"use strict";ev();dL();em();qJ();jJ();I_();B_();ZJ();eee();wL();TL();Rd();cee();xee();z_();Vn();Jp();Eee();Qs();Lee();xc();Mh();iNe=1,aNe=2,sNe=4,Dee="[object Arguments]",oNe="[object Array]",lNe="[object Boolean]",cNe="[object Date]",uNe="[object Error]",Nee="[object Function]",hNe="[object GeneratorFunction]",fNe="[object Map]",dNe="[object Number]",Ree="[object Object]",pNe="[object RegExp]",mNe="[object Set]",gNe="[object String]",yNe="[object Symbol]",vNe="[object WeakMap]",xNe="[object ArrayBuffer]",bNe="[object DataView]",wNe="[object Float32Array]",TNe="[object Float64Array]",kNe="[object Int8Array]",ENe="[object Int16Array]",SNe="[object Int32Array]",CNe="[object Uint8Array]",ANe="[object Uint8ClampedArray]",_Ne="[object Uint16Array]",LNe="[object Uint32Array]",Sn={};Sn[Dee]=Sn[oNe]=Sn[xNe]=Sn[bNe]=Sn[lNe]=Sn[cNe]=Sn[wNe]=Sn[TNe]=Sn[kNe]=Sn[ENe]=Sn[SNe]=Sn[fNe]=Sn[dNe]=Sn[Ree]=Sn[pNe]=Sn[mNe]=Sn[gNe]=Sn[yNe]=Sn[CNe]=Sn[ANe]=Sn[_Ne]=Sn[LNe]=!0;Sn[uNe]=Sn[Nee]=Sn[vNe]=!1;o(Cw,"baseClone");Aw=Cw});function NNe(t){return Aw(t,DNe)}var DNe,rn,SL=M(()=>{"use strict";EL();DNe=4;o(NNe,"clone");rn=NNe});function INe(t){return Aw(t,RNe|MNe)}var RNe,MNe,CL,Mee=M(()=>{"use strict";EL();RNe=1,MNe=4;o(INe,"cloneDeep");CL=INe});function ONe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(ONe,"compact");Tc=ONe});function BNe(t){return this.__data__.set(t,PNe),this}var PNe,Oee,Pee=M(()=>{"use strict";PNe="__lodash_hash_undefined__";o(BNe,"setCacheAdd");Oee=BNe});function FNe(t){return this.__data__.has(t)}var Bee,Fee=M(()=>{"use strict";o(FNe,"setCacheHas");Bee=FNe});function _w(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new vd;++e{"use strict";Q3();Pee();Fee();o(_w,"SetCache");_w.prototype.add=_w.prototype.push=Oee;_w.prototype.has=Bee;Am=_w});function zNe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(zNe,"arraySome");Dw=zNe});function GNe(t,e){return t.has(e)}var _m,Nw=M(()=>{"use strict";o(GNe,"cacheHas");_m=GNe});function UNe(t,e,r,n,i,a){var s=r&$Ne,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&VNe?new Am:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";Lw();AL();Nw();$Ne=1,VNe=2;o(UNe,"equalArrays");Rw=UNe});function HNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var zee,Gee=M(()=>{"use strict";o(HNe,"mapToArray");zee=HNe});function WNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Lm,Mw=M(()=>{"use strict";o(WNe,"setToArray");Lm=WNe});function aRe(t,e,r,n,i,a,s){switch(r){case iRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case nRe:return!(t.byteLength!=e.byteLength||!a(new qp(t),new qp(e)));case XNe:case jNe:case ZNe:return Ro(+t,+e);case KNe:return t.name==e.name&&t.message==e.message;case JNe:case tRe:return t==e+"";case QNe:var l=zee;case eRe:var u=n&YNe;if(l||(l=Lm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=qNe,s.set(t,e);var f=Rw(l(t),l(e),n,i,a,s);return s.delete(t),f;case rRe:if(LL)return LL.call(t)==LL.call(e)}return!1}var YNe,qNe,XNe,jNe,KNe,QNe,ZNe,JNe,eRe,tRe,rRe,nRe,iRe,$ee,LL,Vee,Uee=M(()=>{"use strict";gd();O_();yd();_L();Gee();Mw();YNe=1,qNe=2,XNe="[object Boolean]",jNe="[object Date]",KNe="[object Error]",QNe="[object Map]",ZNe="[object Number]",JNe="[object RegExp]",eRe="[object Set]",tRe="[object String]",rRe="[object Symbol]",nRe="[object ArrayBuffer]",iRe="[object DataView]",$ee=ea?ea.prototype:void 0,LL=$ee?$ee.valueOf:void 0;o(aRe,"equalByTag");Vee=aRe});function cRe(t,e,r,n,i,a){var s=r&sRe,l=Nv(t),u=l.length,h=Nv(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:lRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";wL();sRe=1,oRe=Object.prototype,lRe=oRe.hasOwnProperty;o(cRe,"equalObjects");Hee=cRe});function fRe(t,e,r,n,i,a){var s=Mt(t),l=Mt(e),u=s?qee:no(t),h=l?qee:no(e);u=u==Yee?Iw:u,h=h==Yee?Iw:h;var f=u==Iw,d=h==Iw,p=u==h;if(p&&_l(t)){if(!_l(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new uc),s||Nh(t)?Rw(t,e,r,n,i,a):Vee(t,e,u,r,n,i,a);if(!(r&uRe)){var m=f&&Xee.call(t,"__wrapped__"),g=d&&Xee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new uc),i(y,v,r,n,a)}}return p?(a||(a=new uc),Hee(t,e,r,n,i,a)):!1}var uRe,Yee,qee,Iw,hRe,Xee,jee,Kee=M(()=>{"use strict";ev();_L();Uee();Wee();Rd();Vn();Jp();iv();uRe=1,Yee="[object Arguments]",qee="[object Array]",Iw="[object Object]",hRe=Object.prototype,Xee=hRe.hasOwnProperty;o(fRe,"baseIsEqualDeep");jee=fRe});function Qee(t,e,r,n,i){return t===e?!0:t==null||e==null||!Zn(t)&&!Zn(e)?t!==t&&e!==e:jee(t,e,r,n,Qee,i)}var Ow,DL=M(()=>{"use strict";Kee();Mo();o(Qee,"baseIsEqual");Ow=Qee});function mRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";ev();DL();dRe=1,pRe=2;o(mRe,"baseIsMatch");Zee=mRe});function gRe(t){return t===t&&!yn(t)}var Pw,NL=M(()=>{"use strict";Qs();o(gRe,"isStrictComparable");Pw=gRe});function yRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Pw(i)]}return e}var ete,tte=M(()=>{"use strict";NL();xc();o(yRe,"getMatchData");ete=yRe});function vRe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var Bw,RL=M(()=>{"use strict";o(vRe,"matchesStrictComparable");Bw=vRe});function xRe(t){var e=ete(t);return e.length==1&&e[0][2]?Bw(e[0][0],e[0][1]):function(r){return r===t||Zee(r,t,e)}}var rte,nte=M(()=>{"use strict";Jee();tte();RL();o(xRe,"baseMatches");rte=xRe});function bRe(t,e){return t!=null&&e in Object(t)}var ite,ate=M(()=>{"use strict";o(bRe,"baseHasIn");ite=bRe});function wRe(t,e,r){e=Uh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";Lv();Qp();Vn();sv();s5();Tm();o(wRe,"hasPath");Fw=wRe});function TRe(t,e){return t!=null&&Fw(t,e,ite)}var zw,IL=M(()=>{"use strict";ate();ML();o(TRe,"hasIn");zw=TRe});function SRe(t,e){return wm(t)&&Pw(e)?Bw(bc(t),e):function(r){var n=IJ(r,t);return n===void 0&&n===e?zw(r,t):Ow(e,n,kRe|ERe)}}var kRe,ERe,ste,ote=M(()=>{"use strict";DL();OJ();IL();dw();NL();RL();Tm();kRe=1,ERe=2;o(SRe,"baseMatchesProperty");ste=SRe});function CRe(t){return function(e){return e?.[t]}}var Gw,OL=M(()=>{"use strict";o(CRe,"baseProperty");Gw=CRe});function ARe(t){return function(e){return Hh(e,t)}}var lte,cte=M(()=>{"use strict";Dv();o(ARe,"basePropertyDeep");lte=ARe});function _Re(t){return wm(t)?Gw(bc(t)):lte(t)}var ute,hte=M(()=>{"use strict";OL();cte();dw();Tm();o(_Re,"property");ute=_Re});function LRe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Mt(t)?ste(t[0],t[1]):rte(t):ute(t)}var dn,Qa=M(()=>{"use strict";nte();ote();Tu();Vn();hte();o(LRe,"baseIteratee");dn=LRe});function DRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(DRe,"arrayAggregator");fte=DRe});function NRe(t,e){return t&&Yp(t,e,zr)}var Dm,$w=M(()=>{"use strict";Z3();xc();o(NRe,"baseForOwn");Dm=NRe});function RRe(t,e){return function(r,n){if(r==null)return r;if(!si(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Io();o(RRe,"createBaseEach");pte=RRe});var MRe,_s,Yh=M(()=>{"use strict";$w();mte();MRe=pte(Dm),_s=MRe});function IRe(t,e,r,n){return _s(t,function(i,a,s){e(n,i,r(i),s)}),n}var gte,yte=M(()=>{"use strict";Yh();o(IRe,"baseAggregator");gte=IRe});function ORe(t,e){return function(r,n){var i=Mt(r)?fte:gte,a=e?e():{};return i(r,t,dn(n,2),a)}}var vte,xte=M(()=>{"use strict";dte();yte();Qa();Vn();o(ORe,"createAggregator");vte=ORe});var PRe,Vw,bte=M(()=>{"use strict";No();PRe=o(function(){return ai.Date.now()},"now"),Vw=PRe});var wte,BRe,FRe,qh,Tte=M(()=>{"use strict";tm();yd();Td();Mh();wte=Object.prototype,BRe=wte.hasOwnProperty,FRe=pc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&Zs(e[0],e[1],i)&&(n=1);++r{"use strict";o(zRe,"arrayIncludesWith");Uw=zRe});function $Re(t,e,r,n){var i=-1,a=hw,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=As(e,Oo(r))),n?(a=Uw,s=!1):e.length>=GRe&&(a=_m,s=!1,e=new Am(e));e:for(;++i{"use strict";Lw();mL();PL();Dd();bd();Nw();GRe=200;o($Re,"baseDifference");kte=$Re});var VRe,Xh,Ste=M(()=>{"use strict";Ete();Em();tm();o5();VRe=pc(function(t,e){return xd(t)?kte(t,wc(e,1,xd,!0)):[]}),Xh=VRe});function URe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var fa,Cte=M(()=>{"use strict";o(URe,"last");fa=URe});function HRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),yw(t,e<0?0:e,n)):[]}var mi,Ate=M(()=>{"use strict";yL();vm();o(HRe,"drop");mi=HRe});function WRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),e=n-e,yw(t,0,e<0?0:e)):[]}var Lu,_te=M(()=>{"use strict";yL();vm();o(WRe,"dropRight");Lu=WRe});function YRe(t){return typeof t=="function"?t:ta}var Nm,Hw=M(()=>{"use strict";Tu();o(YRe,"castFunction");Nm=YRe});function qRe(t,e){var r=Mt(t)?lw:_s;return r(t,Nm(e))}var Ce,Ww=M(()=>{"use strict";dL();Yh();Hw();Vn();o(qRe,"forEach");Ce=qRe});var Lte=M(()=>{"use strict";Ww()});function XRe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(XRe,"arrayEvery");Dte=XRe});function jRe(t,e){var r=!0;return _s(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Rte,Mte=M(()=>{"use strict";Yh();o(jRe,"baseEvery");Rte=jRe});function KRe(t,e,r){var n=Mt(t)?Dte:Rte;return r&&Zs(t,e,r)&&(e=void 0),n(t,dn(e,3))}var Ra,Ite=M(()=>{"use strict";Nte();Mte();Qa();Vn();Td();o(KRe,"every");Ra=KRe});function QRe(t,e){var r=[];return _s(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var Yw,BL=M(()=>{"use strict";Yh();o(QRe,"baseFilter");Yw=QRe});function ZRe(t,e){var r=Mt(t)?Sm:Yw;return r(t,dn(e,3))}var Yr,FL=M(()=>{"use strict";vw();BL();Qa();Vn();o(ZRe,"filter");Yr=ZRe});function JRe(t){return function(e,r,n){var i=Object(e);if(!si(e)){var a=dn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Ote,Pte=M(()=>{"use strict";Qa();Io();xc();o(JRe,"createFind");Ote=JRe});function tMe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=eMe(n+i,0)),cw(t,dn(e,3),i)}var eMe,Bte,Fte=M(()=>{"use strict";pL();Qa();vm();eMe=Math.max;o(tMe,"findIndex");Bte=tMe});var rMe,Za,zte=M(()=>{"use strict";Pte();Fte();rMe=Ote(Bte),Za=rMe});function nMe(t){return t&&t.length?t[0]:void 0}var ra,Gte=M(()=>{"use strict";o(nMe,"head");ra=nMe});var $te=M(()=>{"use strict";Gte()});function iMe(t,e){var r=-1,n=si(t)?Array(t.length):[];return _s(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var qw,zL=M(()=>{"use strict";Yh();Io();o(iMe,"baseMap");qw=iMe});function aMe(t,e){var r=Mt(t)?As:qw;return r(t,dn(e,3))}var Je,Rm=M(()=>{"use strict";Dd();Qa();zL();Vn();o(aMe,"map");Je=aMe});function sMe(t,e){return wc(Je(t,e),1)}var da,GL=M(()=>{"use strict";Em();Rm();o(sMe,"flatMap");da=sMe});function oMe(t,e){return t==null?t:Yp(t,Nm(e),xs)}var $L,Vte=M(()=>{"use strict";Z3();Hw();Mh();o(oMe,"forIn");$L=oMe});function lMe(t,e){return t&&Dm(t,Nm(e))}var VL,Ute=M(()=>{"use strict";$w();Hw();o(lMe,"forOwn");VL=lMe});var cMe,uMe,hMe,UL,Hte=M(()=>{"use strict";Wp();xte();cMe=Object.prototype,uMe=cMe.hasOwnProperty,hMe=vte(function(t,e,r){uMe.call(t,r)?t[r].push(e):hc(t,r,[e])}),UL=hMe});function fMe(t,e){return t>e}var Wte,Yte=M(()=>{"use strict";o(fMe,"baseGt");Wte=fMe});function mMe(t,e){return t!=null&&pMe.call(t,e)}var dMe,pMe,qte,Xte=M(()=>{"use strict";dMe=Object.prototype,pMe=dMe.hasOwnProperty;o(mMe,"baseHas");qte=mMe});function gMe(t,e){return t!=null&&Fw(t,e,qte)}var It,jte=M(()=>{"use strict";Xte();ML();o(gMe,"has");It=gMe});function vMe(t){return typeof t=="string"||!Mt(t)&&Zn(t)&&ca(t)==yMe}var yMe,gi,Xw=M(()=>{"use strict";xu();Vn();Mo();yMe="[object String]";o(vMe,"isString");gi=vMe});function xMe(t,e){return As(e,function(r){return t[r]})}var Kte,Qte=M(()=>{"use strict";Dd();o(xMe,"baseValues");Kte=xMe});function bMe(t){return t==null?[]:Kte(t,zr(t))}var br,HL=M(()=>{"use strict";Qte();xc();o(bMe,"values");br=bMe});function TMe(t,e,r,n){t=si(t)?t:br(t),r=r&&!n?vc(r):0;var i=t.length;return r<0&&(r=wMe(i+r,0)),gi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&xm(t,e,r)>-1}var wMe,Hn,Zte=M(()=>{"use strict";uw();Io();Xw();vm();HL();wMe=Math.max;o(TMe,"includes");Hn=TMe});function EMe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=kMe(n+i,0)),xm(t,e,i)}var kMe,jw,Jte=M(()=>{"use strict";uw();vm();kMe=Math.max;o(EMe,"indexOf");jw=EMe});function LMe(t){if(t==null)return!0;if(si(t)&&(Mt(t)||typeof t=="string"||typeof t.splice=="function"||_l(t)||Nh(t)||Al(t)))return!t.length;var e=no(t);if(e==SMe||e==CMe)return!t.size;if(fc(t))return!bm(t).length;for(var r in t)if(_Me.call(t,r))return!1;return!0}var SMe,CMe,AMe,_Me,cr,Kw=M(()=>{"use strict";fw();Rd();Qp();Vn();Io();Jp();Kp();iv();SMe="[object Map]",CMe="[object Set]",AMe=Object.prototype,_Me=AMe.hasOwnProperty;o(LMe,"isEmpty");cr=LMe});function NMe(t){return Zn(t)&&ca(t)==DMe}var DMe,ere,tre=M(()=>{"use strict";xu();Mo();DMe="[object RegExp]";o(NMe,"baseIsRegExp");ere=NMe});var rre,RMe,Vo,nre=M(()=>{"use strict";tre();bd();nv();rre=Po&&Po.isRegExp,RMe=rre?Oo(rre):ere,Vo=RMe});function MMe(t){return t===void 0}var dr,ire=M(()=>{"use strict";o(MMe,"isUndefined");dr=MMe});function IMe(t,e){return t{"use strict";o(IMe,"baseLt");Qw=IMe});function OMe(t,e){var r={};return e=dn(e,3),Dm(t,function(n,i,a){hc(r,i,e(n,i,a))}),r}var Md,are=M(()=>{"use strict";Wp();$w();Qa();o(OMe,"mapValues");Md=OMe});function PMe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";Ld();o(PMe,"baseExtremum");Mm=PMe});function BMe(t){return t&&t.length?Mm(t,ta,Wte):void 0}var Ls,sre=M(()=>{"use strict";Zw();Yte();Tu();o(BMe,"max");Ls=BMe});function FMe(t){return t&&t.length?Mm(t,ta,Qw):void 0}var Nl,YL=M(()=>{"use strict";Zw();WL();Tu();o(FMe,"min");Nl=FMe});function zMe(t,e){return t&&t.length?Mm(t,dn(e,2),Qw):void 0}var Id,ore=M(()=>{"use strict";Zw();Qa();WL();o(zMe,"minBy");Id=zMe});function $Me(t){if(typeof t!="function")throw new TypeError(GMe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var GMe,lre,cre=M(()=>{"use strict";GMe="Expected a function";o($Me,"negate");lre=$Me});function VMe(t,e,r,n){if(!yn(t))return t;e=Uh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";em();Lv();sv();Qs();Tm();o(VMe,"baseSet");ure=VMe});function UMe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";Dv();hre();Lv();o(UMe,"basePickBy");Jw=UMe});function HMe(t,e){if(t==null)return{};var r=As(kw(t),function(n){return[n]});return e=dn(e),Jw(t,r,function(n,i){return e(n,i[0])})}var Ds,fre=M(()=>{"use strict";Dd();Qa();qL();TL();o(HMe,"pickBy");Ds=HMe});function WMe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var dre,pre=M(()=>{"use strict";o(WMe,"baseSortBy");dre=WMe});function YMe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=ro(t),s=e!==void 0,l=e===null,u=e===e,h=ro(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";Ld();o(YMe,"compareAscending");mre=YMe});function qMe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var yre,vre=M(()=>{"use strict";gre();o(qMe,"compareMultiple");yre=qMe});function XMe(t,e,r){e.length?e=As(e,function(a){return Mt(a)?function(s){return Hh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=As(e,Oo(dn));var i=qw(t,function(a,s,l){var u=As(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return dre(i,function(a,s){return yre(a,s,r)})}var xre,bre=M(()=>{"use strict";Dd();Dv();Qa();zL();pre();bd();vre();Tu();Vn();o(XMe,"baseOrderBy");xre=XMe});var jMe,wre,Tre=M(()=>{"use strict";OL();jMe=Gw("length"),wre=jMe});function oIe(t){for(var e=kre.lastIndex=0;kre.test(t);)++e;return e}var Ere,KMe,QMe,ZMe,JMe,eIe,tIe,XL,jL,rIe,Sre,Cre,Are,nIe,_re,Lre,iIe,aIe,sIe,kre,Dre,Nre=M(()=>{"use strict";Ere="\\ud800-\\udfff",KMe="\\u0300-\\u036f",QMe="\\ufe20-\\ufe2f",ZMe="\\u20d0-\\u20ff",JMe=KMe+QMe+ZMe,eIe="\\ufe0e\\ufe0f",tIe="["+Ere+"]",XL="["+JMe+"]",jL="\\ud83c[\\udffb-\\udfff]",rIe="(?:"+XL+"|"+jL+")",Sre="[^"+Ere+"]",Cre="(?:\\ud83c[\\udde6-\\uddff]){2}",Are="[\\ud800-\\udbff][\\udc00-\\udfff]",nIe="\\u200d",_re=rIe+"?",Lre="["+eIe+"]?",iIe="(?:"+nIe+"(?:"+[Sre,Cre,Are].join("|")+")"+Lre+_re+")*",aIe=Lre+_re+iIe,sIe="(?:"+[Sre+XL+"?",XL,Cre,Are,tIe].join("|")+")",kre=RegExp(jL+"(?="+jL+")|"+sIe+aIe,"g");o(oIe,"unicodeSize");Dre=oIe});function lIe(t){return VJ(t)?Dre(t):wre(t)}var Rre,Mre=M(()=>{"use strict";Tre();UJ();Nre();o(lIe,"stringSize");Rre=lIe});function cIe(t,e){return Jw(t,e,function(r,n){return zw(t,n)})}var Ire,Ore=M(()=>{"use strict";qL();IL();o(cIe,"basePick");Ire=cIe});var uIe,Od,Pre=M(()=>{"use strict";Ore();$J();uIe=GJ(function(t,e){return t==null?{}:Ire(t,e)}),Od=uIe});function dIe(t,e,r,n){for(var i=-1,a=fIe(hIe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var hIe,fIe,Bre,Fre=M(()=>{"use strict";hIe=Math.ceil,fIe=Math.max;o(dIe,"baseRange");Bre=dIe});function pIe(t){return function(e,r,n){return n&&typeof n!="number"&&Zs(e,r,n)&&(r=n=void 0),e=ym(e),r===void 0?(r=e,e=0):r=ym(r),n=n===void 0?e{"use strict";Fre();Td();hL();o(pIe,"createRange");zre=pIe});var mIe,Uo,$re=M(()=>{"use strict";Gre();mIe=zre(),Uo=mIe});function gIe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var Vre,Ure=M(()=>{"use strict";o(gIe,"baseReduce");Vre=gIe});function yIe(t,e,r){var n=Mt(t)?HJ:Vre,i=arguments.length<3;return n(t,dn(e,4),r,i,_s)}var qr,KL=M(()=>{"use strict";WJ();Yh();Qa();Ure();Vn();o(yIe,"reduce");qr=yIe});function vIe(t,e){var r=Mt(t)?Sm:Yw;return r(t,lre(dn(e,3)))}var jh,Hre=M(()=>{"use strict";vw();BL();Qa();Vn();cre();o(vIe,"reject");jh=vIe});function wIe(t){if(t==null)return 0;if(si(t))return gi(t)?Rre(t):t.length;var e=no(t);return e==xIe||e==bIe?t.size:bm(t).length}var xIe,bIe,QL,Wre=M(()=>{"use strict";fw();Rd();Io();Xw();Mre();xIe="[object Map]",bIe="[object Set]";o(wIe,"size");QL=wIe});function TIe(t,e){var r;return _s(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Yre,qre=M(()=>{"use strict";Yh();o(TIe,"baseSome");Yre=TIe});function kIe(t,e,r){var n=Mt(t)?Dw:Yre;return r&&Zs(t,e,r)&&(e=void 0),n(t,dn(e,3))}var Rv,Xre=M(()=>{"use strict";AL();Qa();qre();Vn();Td();o(kIe,"some");Rv=kIe});var EIe,kc,jre=M(()=>{"use strict";Em();bre();tm();Td();EIe=pc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&Zs(t,e[0],e[1])?e=[]:r>2&&Zs(e[0],e[1],e[2])&&(e=[e[0]]),xre(t,wc(e,1),[])}),kc=EIe});var SIe,CIe,Kre,Qre=M(()=>{"use strict";kL();fL();Mw();SIe=1/0,CIe=Wh&&1/Lm(new Wh([,-0]))[1]==SIe?function(t){return new Wh(t)}:Jn,Kre=CIe});function _Ie(t,e,r){var n=-1,i=hw,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=Uw;else if(a>=AIe){var h=e?null:Kre(t);if(h)return Lm(h);s=!1,i=_m,u=new Am}else u=e?[]:l;e:for(;++n{"use strict";Lw();mL();PL();Nw();Qre();Mw();AIe=200;o(_Ie,"baseUniq");Im=_Ie});var LIe,ZL,Zre=M(()=>{"use strict";Em();tm();eT();o5();LIe=pc(function(t){return Im(wc(t,1,xd,!0))}),ZL=LIe});function DIe(t){return t&&t.length?Im(t):[]}var Om,Jre=M(()=>{"use strict";eT();o(DIe,"uniq");Om=DIe});function NIe(t,e){return t&&t.length?Im(t,dn(e,2)):[]}var ene,tne=M(()=>{"use strict";Qa();eT();o(NIe,"uniqBy");ene=NIe});function MIe(t){var e=++RIe;return pw(t)+e}var RIe,Pd,rne=M(()=>{"use strict";gL();RIe=0;o(MIe,"uniqueId");Pd=MIe});function IIe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(IIe,"baseZipObject");nne=IIe});function OIe(t,e){return nne(t||[],e||[],dc)}var tT,ane=M(()=>{"use strict";em();ine();o(OIe,"zipObject");tT=OIe});var Ht=M(()=>{"use strict";LJ();SL();Mee();Iee();W_();Tte();Ste();Ate();_te();Lte();Ite();FL();zte();$te();GL();gw();Ww();Vte();Ute();Hte();jte();Tu();Zte();Jte();Vn();Kw();jy();Qs();nre();Xw();ire();xc();Cte();Rm();are();sre();X_();YL();ore();fL();bte();Pre();fre();$re();KL();Hre();Wre();Xre();jre();Zre();Jre();rne();HL();ane();});function one(t,e){t[e]?t[e]++:t[e]=1}function lne(t,e){--t[e]||delete t[e]}function Mv(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+sne+a+sne+(dr(n)?PIe:n)}function BIe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function JL(t,e){return Mv(t,e.v,e.w,e.name)}var PIe,Bd,sne,Mr,rT=M(()=>{"use strict";Ht();PIe="\0",Bd="\0",sne="",Mr=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=bs(void 0),this._defaultEdgeLabelFn=bs(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Bd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Ei(e)||(e=bs(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return cr(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return cr(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ce(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Bd,this._children[e]={},this._children[Bd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ce(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ce(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ce(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(dr(r))r=Bd;else{r+="";for(var n=r;!dr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Bd)return r}}children(e){if(dr(e)&&(e=Bd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Bd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return ZL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ce(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ce(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ce(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Ei(e)||(e=bs(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return qr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,dr(n)||(n=""+n);var l=Mv(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!dr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=BIe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,one(this._preds[r],e),one(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?JL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?JL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?JL(this._isDirected,arguments[0]):Mv(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],lne(this._preds[r],e),lne(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};Mr.prototype._nodeCount=0;Mr.prototype._edgeCount=0;o(one,"incrementOrInitEntry");o(lne,"decrementOrRemoveEntry");o(Mv,"edgeArgsToId");o(BIe,"edgeArgsToObj");o(JL,"edgeObjToId")});var Ns=M(()=>{"use strict";rT()});function cne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function FIe(t,e){if(t!=="_next"&&t!=="_prev")return e}var nT,une=M(()=>{"use strict";nT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return cne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&cne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,FIe)),n=n._prev;return"["+e.join(", ")+"]"}};o(cne,"unlink");o(FIe,"filterOutLinks")});function hne(t,e){if(t.nodeCount()<=1)return[];var r=$Ie(t,e||zIe),n=GIe(r.graph,r.buckets,r.zeroIdx);return Wr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function GIe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)eD(t,e,r,s);for(;s=i.dequeue();)eD(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(eD(t,e,r,s,!0));break}}}return n}function eD(t,e,r,n,i){var a=i?[]:void 0;return Ce(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,tD(e,r,u)}),Ce(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,tD(e,r,h)}),t.removeNode(n.v),a}function $Ie(t,e){var r=new Mr,n=0,i=0;Ce(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ce(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Uo(i+n+3).map(function(){return new nT}),s=n+1;return Ce(r.nodes(),function(l){tD(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function tD(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var zIe,fne=M(()=>{"use strict";Ht();Ns();une();zIe=bs(1);o(hne,"greedyFAS");o(GIe,"doGreedyFAS");o(eD,"removeNode");o($Ie,"buildState");o(tD,"assignBucket")});function dne(t){var e=t.graph().acyclicer==="greedy"?hne(t,r(t)):VIe(t);Ce(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Pd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function VIe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ce(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ce(t.nodes(),i),e}function pne(t){Ce(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var rD=M(()=>{"use strict";Ht();fne();o(dne,"run");o(VIe,"dfsFAS");o(pne,"undo")});function Ec(t,e,r,n){var i;do i=Pd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function gne(t){var e=new Mr().setGraph(t.graph());return Ce(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ce(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function iT(t){var e=new Mr({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ce(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ce(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function nD(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function Kh(t){var e=Je(Uo(aD(t)+1),function(){return[]});return Ce(t.nodes(),function(r){var n=t.node(r),i=n.rank;dr(i)||(e[i][n.order]=r)}),e}function yne(t){var e=Nl(Je(t.nodes(),function(r){return t.node(r).rank}));Ce(t.nodes(),function(r){var n=t.node(r);It(n,"rank")&&(n.rank-=e)})}function vne(t){var e=Nl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ce(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ce(r,function(a,s){dr(a)&&s%i!==0?--n:n&&Ce(a,function(l){t.node(l).rank+=n})})}function iD(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ec(t,"border",i,e)}function aD(t){return Ls(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!dr(r))return r}))}function xne(t,e){var r={lhs:[],rhs:[]};return Ce(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function bne(t,e){var r=Vw();try{return e()}finally{console.log(t+" time: "+(Vw()-r)+"ms")}}function wne(t,e){return e()}var Sc=M(()=>{"use strict";Ht();Ns();o(Ec,"addDummyNode");o(gne,"simplify");o(iT,"asNonCompoundGraph");o(nD,"intersectRect");o(Kh,"buildLayerMatrix");o(yne,"normalizeRanks");o(vne,"removeEmptyRanks");o(iD,"addBorderNode");o(aD,"maxRank");o(xne,"partition");o(bne,"time");o(wne,"notime")});function kne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ce(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";Ht();Sc();o(kne,"addBorderSegments");o(Tne,"addBorderNode")});function Cne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&_ne(t)}function Ane(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&UIe(t),(e==="lr"||e==="rl")&&(HIe(t),_ne(t))}function _ne(t){Ce(t.nodes(),function(e){Sne(t.node(e))}),Ce(t.edges(),function(e){Sne(t.edge(e))})}function Sne(t){var e=t.width;t.width=t.height,t.height=e}function UIe(t){Ce(t.nodes(),function(e){sD(t.node(e))}),Ce(t.edges(),function(e){var r=t.edge(e);Ce(r.points,sD),Object.prototype.hasOwnProperty.call(r,"y")&&sD(r)})}function sD(t){t.y=-t.y}function HIe(t){Ce(t.nodes(),function(e){oD(t.node(e))}),Ce(t.edges(),function(e){var r=t.edge(e);Ce(r.points,oD),Object.prototype.hasOwnProperty.call(r,"x")&&oD(r)})}function oD(t){var e=t.x;t.x=t.y,t.y=e}var Lne=M(()=>{"use strict";Ht();o(Cne,"adjust");o(Ane,"undo");o(_ne,"swapWidthHeight");o(Sne,"swapWidthHeightOne");o(UIe,"reverseY");o(sD,"reverseYOne");o(HIe,"swapXY");o(oD,"swapXYOne")});function Dne(t){t.graph().dummyChains=[],Ce(t.edges(),function(e){YIe(t,e)})}function YIe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";Ht();Sc();o(Dne,"run");o(YIe,"normalizeEdge");o(Nne,"undo")});function Iv(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Nl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ce(t.sources(),r)}function Fd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var aT=M(()=>{"use strict";Ht();o(Iv,"longestPath");o(Fd,"slack")});function sT(t){var e=new Mr({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;qIe(e,t){"use strict";Ht();Ns();aT();o(sT,"feasibleTree");o(qIe,"tightTree");o(XIe,"findMinSlackEdge");o(jIe,"shiftRanks")});var Mne=M(()=>{"use strict"});var uD=M(()=>{"use strict"});var $Yt,hD=M(()=>{"use strict";Ht();uD();$Yt=bs(1)});var Ine=M(()=>{"use strict";hD()});var fD=M(()=>{"use strict"});var One=M(()=>{"use strict";fD()});var ZYt,Pne=M(()=>{"use strict";Ht();ZYt=bs(1)});function dD(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Ov;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ce(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ce(t.sinks(),i),QL(e)!==t.nodeCount())throw new Ov;return n}function Ov(){}var pD=M(()=>{"use strict";Ht();dD.CycleException=Ov;o(dD,"topsort");o(Ov,"CycleException");Ov.prototype=new Error});var Bne=M(()=>{"use strict";pD()});function oT(t,e,r){Mt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ce(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);Fne(t,s,r==="post",a,n,i)}),i}function Fne(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ce(i(e),function(s){Fne(t,s,r,n,i,a)}),r&&a.push(e))}var mD=M(()=>{"use strict";Ht();o(oT,"dfs");o(Fne,"doDfs")});function gD(t,e){return oT(t,e,"post")}var zne=M(()=>{"use strict";mD();o(gD,"postorder")});function yD(t,e){return oT(t,e,"pre")}var Gne=M(()=>{"use strict";mD();o(yD,"preorder")});var $ne=M(()=>{"use strict";uD();rT()});var Vne=M(()=>{"use strict";Mne();hD();Ine();One();Pne();Bne();zne();Gne();$ne();fD();pD()});function Zh(t){t=gne(t),Iv(t);var e=sT(t);xD(e),vD(e,t);for(var r,n;r=Yne(e);)n=qne(e,t,r),Xne(e,t,r,n)}function vD(t,e){var r=gD(t,t.nodes());r=r.slice(0,r.length-1),Ce(r,function(n){eOe(t,e,n)})}function eOe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Hne(t,e,r)}function Hne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ce(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,rOe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function xD(t,e){arguments.length<2&&(e=t.nodes()[0]),Wne(t,{},1,e)}function Wne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ce(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Wne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Yne(t){return Za(t.edges(),function(e){return t.edge(e).cutvalue<0})}function qne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===Une(t,t.node(f.v),l)&&u!==Une(t,t.node(f.w),l)});return Id(h,function(f){return Fd(e,f)})}function Xne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),xD(t),vD(t,e),tOe(t,e)}function tOe(t,e){var r=Za(t.nodes(),function(i){return!e.node(i).parent}),n=yD(t,r);n=n.slice(1),Ce(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function rOe(t,e,r){return t.hasEdge(e,r)}function Une(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var jne=M(()=>{"use strict";Ht();Vne();Sc();cD();aT();Zh.initLowLimValues=xD;Zh.initCutValues=vD;Zh.calcCutValue=Hne;Zh.leaveEdge=Yne;Zh.enterEdge=qne;Zh.exchangeEdges=Xne;o(Zh,"networkSimplex");o(vD,"initCutValues");o(eOe,"assignCutValue");o(Hne,"calcCutValue");o(xD,"initLowLimValues");o(Wne,"dfsAssignLowLim");o(Yne,"leaveEdge");o(qne,"enterEdge");o(Xne,"exchangeEdges");o(tOe,"updateRanks");o(rOe,"isTreeEdge");o(Une,"isDescendant")});function bD(t){switch(t.graph().ranker){case"network-simplex":Kne(t);break;case"tight-tree":iOe(t);break;case"longest-path":nOe(t);break;default:Kne(t)}}function iOe(t){Iv(t),sT(t)}function Kne(t){Zh(t)}var nOe,wD=M(()=>{"use strict";cD();jne();aT();o(bD,"rank");nOe=Iv;o(iOe,"tightTreeRanker");o(Kne,"networkSimplexRanker")});function Qne(t){var e=Ec(t,"root",{},"_root"),r=aOe(t),n=Ls(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ce(t.edges(),function(s){t.edge(s).minlen*=i});var a=sOe(t)+1;Ce(t.children(),function(s){Zne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function Zne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=iD(t,"_bt"),h=iD(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ce(l,function(d){Zne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function aOe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ce(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ce(t.children(),function(n){r(n,1)}),e}function sOe(t){return qr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Jne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ce(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var eie=M(()=>{"use strict";Ht();Sc();o(Qne,"run");o(Zne,"dfs");o(aOe,"treeDepths");o(sOe,"sumWeights");o(Jne,"cleanup")});function tie(t,e,r){var n={},i;Ce(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var rie=M(()=>{"use strict";Ht();o(tie,"addSubgraphConstraints")});function nie(t,e,r){var n=lOe(t),i=new Mr({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ce(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ce(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=dr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function lOe(t){for(var e;t.hasNode(e=Pd("_root")););return e}var iie=M(()=>{"use strict";Ht();Ns();o(nie,"buildLayerGraph");o(lOe,"createRootNode")});function aie(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var sie=M(()=>{"use strict";Ht();o(aie,"crossCount");o(cOe,"twoLayerCrossCount")});function oie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Ls(Je(r,function(l){return t.node(l).rank})),i=Je(Uo(n+1),function(){return[]});function a(l){if(!It(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ce(t.successors(l),a)}}o(a,"dfs");var s=kc(r,function(l){return t.node(l).rank});return Ce(s,a),i}var lie=M(()=>{"use strict";Ht();o(oie,"initOrder")});function cie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=qr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var uie=M(()=>{"use strict";Ht();o(cie,"barycenter")});function hie(t,e){var r={};Ce(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};dr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ce(e.edges(),function(i){var a=r[i.v],s=r[i.w];!dr(a)&&!dr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return uOe(n)}function uOe(t){var e=[];function r(a){return function(s){s.merged||(dr(s.barycenter)||dr(a.barycenter)||s.barycenter>=a.barycenter)&&hOe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ce(i.in.reverse(),r(i)),Ce(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Od(a,["vs","i","barycenter","weight"])})}function hOe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var fie=M(()=>{"use strict";Ht();o(hie,"resolveConflicts");o(uOe,"doResolveConflicts");o(hOe,"mergeEntries")});function pie(t,e){var r=xne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=kc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(fOe(!!e)),u=die(a,i,u),Ce(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=die(a,i,u)});var h={vs:Wr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function die(t,e,r){for(var n;e.length&&(n=fa(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function fOe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var mie=M(()=>{"use strict";Ht();Sc();o(pie,"sort");o(die,"consumeUnsortable");o(fOe,"compareWithBias")});function TD(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=cie(t,i);Ce(h,function(g){if(t.children(g.v).length){var y=TD(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&pOe(g,y)}});var f=hie(h,r);dOe(f,u);var d=pie(f,n);if(s&&(d.vs=Wr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function dOe(t,e){Ce(t,function(r){r.vs=Wr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function pOe(t,e){dr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var gie=M(()=>{"use strict";Ht();uie();fie();mie();o(TD,"sortSubgraph");o(dOe,"expandSubgraphs");o(pOe,"mergeBarycenters")});function xie(t){var e=aD(t),r=yie(t,Uo(1,e+1),"inEdges"),n=yie(t,Uo(e-1,-1,-1),"outEdges"),i=oie(t);vie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){mOe(l%2?r:n,l%4>=2),i=Kh(t);var h=aie(t,i);h{"use strict";Ht();Ns();Sc();rie();iie();sie();lie();gie();o(xie,"order");o(yie,"buildLayerGraphs");o(mOe,"sweepLayerGraphs");o(vie,"assignOrder")});function wie(t){var e=yOe(t);Ce(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=gOe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function yOe(t){var e={},r=0;function n(i){var a=r;Ce(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ce(t.children(),n),e}var Tie=M(()=>{"use strict";Ht();o(wie,"parentDummyChains");o(gOe,"findPath");o(yOe,"postorder")});function vOe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=fa(a);return Ce(a,function(f,d){var p=bOe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ce(a.slice(l,d+1),function(g){Ce(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&kie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ce(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),qr(e,i),r}function bOe(t,e){if(t.node(e).dummy)return Za(t.predecessors(e),function(r){return t.node(r).dummy})}function kie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function wOe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function TOe(t,e,r,n){var i={},a={},s={};return Ce(e,function(l){Ce(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ce(e,function(l){var u=-1;Ce(l,function(h){var f=n(h);if(f.length){f=kc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";Ht();Ns();Sc();o(vOe,"findType1Conflicts");o(xOe,"findType2Conflicts");o(bOe,"findOtherInnerSegmentNode");o(kie,"addConflict");o(wOe,"hasConflict");o(TOe,"verticalAlignment");o(kOe,"horizontalCompaction");o(EOe,"buildBlockGraph");o(SOe,"findSmallestWidthAlignment");o(COe,"alignCoordinates");o(AOe,"balance");o(Eie,"positionX");o(_Oe,"sep");o(LOe,"width")});function Cie(t){t=iT(t),DOe(t),VL(Eie(t),function(e,r){t.node(r).x=e})}function DOe(t){var e=Kh(t),r=t.graph().ranksep,n=0;Ce(e,function(i){var a=Ls(Je(i,function(s){return t.node(s).height}));Ce(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Aie=M(()=>{"use strict";Ht();Sc();Sie();o(Cie,"position");o(DOe,"positionY")});function Du(t,e){var r=e&&e.debugTiming?bne:wne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>$Oe(t));r(" runLayout",()=>NOe(n,r)),r(" updateInputGraph",()=>ROe(t,n))})}function NOe(t,e){e(" makeSpaceForEdgeLabels",()=>VOe(t)),e(" removeSelfEdges",()=>QOe(t)),e(" acyclic",()=>dne(t)),e(" nestingGraph.run",()=>Qne(t)),e(" rank",()=>bD(iT(t))),e(" injectEdgeLabelProxies",()=>UOe(t)),e(" removeEmptyRanks",()=>vne(t)),e(" nestingGraph.cleanup",()=>Jne(t)),e(" normalizeRanks",()=>yne(t)),e(" assignRankMinMax",()=>HOe(t)),e(" removeEdgeLabelProxies",()=>WOe(t)),e(" normalize.run",()=>Dne(t)),e(" parentDummyChains",()=>wie(t)),e(" addBorderSegments",()=>kne(t)),e(" order",()=>xie(t)),e(" insertSelfEdges",()=>ZOe(t)),e(" adjustCoordinateSystem",()=>Cne(t)),e(" position",()=>Cie(t)),e(" positionSelfEdges",()=>JOe(t)),e(" removeBorderNodes",()=>KOe(t)),e(" normalize.undo",()=>Nne(t)),e(" fixupEdgeLabelCoords",()=>XOe(t)),e(" undoCoordinateSystem",()=>Ane(t)),e(" translateGraph",()=>YOe(t)),e(" assignNodeIntersects",()=>qOe(t)),e(" reversePoints",()=>jOe(t)),e(" acyclic.undo",()=>pne(t))}function ROe(t,e){Ce(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ce(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function $Oe(t){var e=new Mr({multigraph:!0,compound:!0}),r=ED(t.graph());return e.setGraph(Ih({},IOe,kD(r,MOe),Od(r,OOe))),Ce(t.nodes(),function(n){var i=ED(t.node(n));e.setNode(n,qh(kD(i,POe),BOe)),e.setParent(n,t.parent(n))}),Ce(t.edges(),function(n){var i=ED(t.edge(n));e.setEdge(n,Ih({},zOe,kD(i,FOe),Od(i,GOe)))}),e}function VOe(t){var e=t.graph();e.ranksep/=2,Ce(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function UOe(t){Ce(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ec(t,"edge-proxy",a,"_ep")}})}function HOe(t){var e=0;Ce(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Ls(e,n.maxRank))}),t.graph().maxRank=e}function WOe(t){Ce(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function YOe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ce(t.nodes(),function(h){u(t.node(h))}),Ce(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ce(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ce(t.edges(),function(h){var f=t.edge(h);Ce(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function qOe(t){Ce(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(nD(n,a)),r.points.push(nD(i,s))})}function XOe(t){Ce(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function jOe(t){Ce(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function KOe(t){Ce(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(fa(r.borderLeft)),s=t.node(fa(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ce(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function QOe(t){Ce(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function ZOe(t){var e=Kh(t);Ce(e,function(r){var n=0;Ce(r,function(i,a){var s=t.node(i);s.order=a+n,Ce(s.selfEdges,function(l){Ec(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function JOe(t){Ce(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function kD(t,e){return Md(Od(t,e),Number)}function ED(t){var e={};return Ce(t,function(r,n){e[n.toLowerCase()]=r}),e}var MOe,IOe,OOe,POe,BOe,FOe,zOe,GOe,_ie=M(()=>{"use strict";Ht();Ns();Ene();Lne();rD();lD();wD();eie();bie();Tie();Aie();Sc();o(Du,"layout");o(NOe,"runLayout");o(ROe,"updateInputGraph");MOe=["nodesep","edgesep","ranksep","marginx","marginy"],IOe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},OOe=["acyclicer","ranker","rankdir","align"],POe=["width","height"],BOe={width:0,height:0},FOe=["minlen","weight","width","height","labeloffset"],zOe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},GOe=["labelpos"];o($Oe,"buildLayoutGraph");o(VOe,"makeSpaceForEdgeLabels");o(UOe,"injectEdgeLabelProxies");o(HOe,"assignRankMinMax");o(WOe,"removeEdgeLabelProxies");o(YOe,"translateGraph");o(qOe,"assignNodeIntersects");o(XOe,"fixupEdgeLabelCoords");o(jOe,"reversePointsForReversedEdges");o(KOe,"removeBorderNodes");o(QOe,"removeSelfEdges");o(ZOe,"insertSelfEdges");o(JOe,"positionSelfEdges");o(kD,"selectNumberAttrs");o(ED,"canonicalize")});var Pv=M(()=>{"use strict";rD();_ie();lD();wD()});function Ho(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:ePe(t),edges:tPe(t)};return dr(t.graph())||(e.value=rn(t.graph())),e}function ePe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return dr(r)||(i.value=r),dr(n)||(i.parent=n),i})}function tPe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return dr(e.name)||(n.name=e.name),dr(r)||(n.value=r),n})}var SD=M(()=>{"use strict";Ht();rT();o(Ho,"write");o(ePe,"writeNodes");o(tPe,"writeEdges")});var wr,zd,Nie,Rie,lT,rPe,Mie,Iie,nPe,Bm,Die,Oie,Pie,Bie,Fie,zie=M(()=>{"use strict";ht();Ns();SD();wr=new Map,zd=new Map,Nie=new Map,Rie=o(()=>{zd.clear(),Nie.clear(),wr.clear()},"clear"),lT=o((t,e)=>{let r=zd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),rPe=o((t,e)=>{let r=zd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||lT(t.v,e)||lT(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Mie=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Mie(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{rPe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Iie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)Nie.set(i,t),n=[...n,...Iie(i,e)];return n},"extractDescendants"),nPe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Bm=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Bm(a,e,r),l=nPe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Die=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Oie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Bm(r,t,r)),zd.set(r,Iie(r,t)),wr.set(r,{id:Bm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,zd),i.forEach(a=>{let s=lT(a.v,r),l=lT(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",zd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,zd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Die(r.v),a=Die(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Ho(t)),Pie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Pie=o((t,e)=>{if(Y.warn("extractor - ",e,Ho(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new Mr({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Ho(t)),Mie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Ho(l)),Y.debug("Old graph after copy",Ho(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Pie(a.graph,e+1)}},"extractor"),Bie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Bie(t,i);r=[...r,...a]}),r},"sorter"),Fie=o(t=>Bie(t,t.children()),"sortNodesByHierarchy")});var $ie={};vr($ie,{render:()=>iPe});var Gie,iPe,Vie=M(()=>{"use strict";Pv();SD();Ns();uL();Ft();zie();sw();K5();cL();ht();Cv();Vt();Gie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Ho(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Gie(d,v.graph,r,n,e.node(y),a),_=w.elem;Qe(v,_),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),aJ(_,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Bm(v.id,e)),wr.set(v.id,{id:Bm(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await gm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await tw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Ho(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),Du(e),Y.info("Graph after layout:",JSON.stringify(Ho(e)));let m=0,{subGraphTitleTotalMargin:g}=_u(a);return await Promise.all(Fie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,_v(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await mm(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),_v(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(_=>_.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=nw(h,v,wr,r,x,b,n);rw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),iPe=o(async(t,e)=>{let r=new Mr({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");iw(n,t.markers,t.type,t.diagramId),sJ(),iJ(),ZZ(),Rie(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";lJ();ht();Bv={},CD=o(t=>{for(let e of t)Bv[e.name]=e},"registerLayoutLoaders"),aPe=o(()=>{CD([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Vie(),$ie)),"loader")}])},"registerDefaultLayoutLoaders");aPe();Fm=o(async(t,e)=>{if(!(t.layoutAlgorithm in Bv))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=Bv[t.layoutAlgorithm];return(await r.loader()).render(t,e,oJ,{algorithm:r.algorithm})},"render"),cT=o((t="",{fallback:e="dagre"}={})=>{if(t in Bv)return t;if(e in Bv)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var zm,sPe,oPe,uT=M(()=>{"use strict";ni();ht();zm=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=sPe(t,e);Zr(t,a,i,n);let u=oPe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),sPe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),oPe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var lPe,cPe,Uie,Hie=M(()=>{"use strict";mr();Vt();ht();j5();Fv();uT();hr();oL();lPe=o(function(t,e){return e.db.getClasses()},"getClasses"),cPe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=de(),l;i==="sandbox"&&(l=ze("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=pm(e,i),d=sL();h.type=n.type,h.layoutAlgorithm=cT(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Fm(h,f);let p=h.config.flowchart?.diagramPadding??8;Ut.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),zm(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=ze(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),Uie={getClasses:lPe,draw:cPe}});var AD,Wie,Yie=M(()=>{"use strict";AD=function(){var t=o(function(kn,_t,St,bt){for(St=St||{},bt=kn.length;bt--;St[kn[bt]]=_t);return St},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],_=[1,33],T=[1,44],E=[1,46],L=[1,42],C=[1,47],A=[1,43],I=[1,50],D=[1,45],k=[1,51],R=[1,52],S=[1,34],O=[1,35],N=[1,36],P=[1,37],F=[1,57],B=[1,8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],$=[1,61],z=[1,60],W=[1,62],j=[8,9,11,75,77],K=[1,77],ie=[1,90],Q=[1,95],ee=[1,94],J=[1,91],H=[1,87],q=[1,93],Z=[1,89],ae=[1,96],ue=[1,92],ce=[1,97],te=[1,88],De=[8,9,10,11,40,75,77],oe=[8,9,10,11,40,46,75,77],ke=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,88,101,104,105,108,110,113,114,115],Fe=[8,9,11,44,60,75,77,88,101,104,105,108,110,113,114,115],Be=[44,60,88,101,104,105,108,110,113,114,115],Ve=[1,123],Ge=[1,122],He=[1,130],xe=[1,144],X=[1,145],fe=[1,146],he=[1,147],ge=[1,132],ne=[1,134],ye=[1,138],U=[1,139],Te=[1,140],se=[1,141],Ee=[1,142],Ae=[1,143],Pe=[1,148],Me=[1,149],me=[1,128],We=[1,129],Re=[1,136],tt=[1,131],gt=[1,135],Et=[1,133],vt=[8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],Ye=[1,151],Tt=[1,153],$e=[8,9,11],rt=[8,9,10,11,14,44,60,88,104,105,108,110,113,114,115],ft=[1,173],kt=[1,169],er=[1,170],dt=[1,174],Xe=[1,171],ct=[1,172],Lt=[77,115,118],Rt=[8,9,10,11,12,14,27,29,32,44,60,75,83,84,85,86,87,88,89,104,108,110,113,114,115],zt=[10,105],Xn=[31,49,51,53,55,57,62,64,66,67,69,71,115,116,117],or=[1,242],hn=[1,240],Tn=[1,244],Ur=[1,238],ri=[1,239],Mn=[1,241],yt=[1,243],Se=[1,245],at=[1,263],At=[8,9,11,105],pr=[8,9,10,11,60,83,104,105,108,109,110,111],In={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,edgeTextToken:78,STR:79,MD_STR:80,textToken:81,keywords:82,STYLE:83,LINKSTYLE:84,CLASSDEF:85,CLASS:86,CLICK:87,DOWN:88,UP:89,textNoTagsToken:90,stylesOpt:91,"idString[vertex]":92,"idString[class]":93,CALLBACKNAME:94,CALLBACKARGS:95,HREF:96,LINK_TARGET:97,"STR[link]":98,"STR[tooltip]":99,alphaNum:100,DEFAULT:101,numList:102,INTERPOLATE:103,NUM:104,COMMA:105,style:106,styleComponent:107,NODE_STRING:108,UNIT:109,BRKT:110,PCT:111,idStringToken:112,MINUS:113,MULT:114,UNICODE_TEXT:115,TEXT:116,TAGSTART:117,EDGE_TEXT:118,alphaNumToken:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",79:"STR",80:"MD_STR",83:"STYLE",84:"LINKSTYLE",85:"CLASSDEF",86:"CLASS",87:"CLICK",88:"DOWN",89:"UP",92:"idString[vertex]",93:"idString[class]",94:"CALLBACKNAME",95:"CALLBACKARGS",96:"HREF",97:"LINK_TARGET",98:"STR[link]",99:"STR[tooltip]",101:"DEFAULT",103:"INTERPOLATE",104:"NUM",105:"COMMA",108:"NODE_STRING",109:"UNIT",110:"BRKT",111:"PCT",113:"MINUS",114:"MULT",115:"UNICODE_TEXT",116:"TEXT",117:"TAGSTART",118:"EDGE_TEXT",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[76,1],[76,2],[76,1],[76,1],[72,1],[73,3],[30,1],[30,2],[30,1],[30,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[102,1],[102,3],[91,1],[91,3],[106,1],[106,2],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[81,1],[81,1],[81,1],[81,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[78,1],[78,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[47,1],[47,2],[100,1],[100,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(_t,St,bt,Ue,Kt,pe,bi){var be=pe.length-1;switch(Kt){case 2:this.$=[];break;case 3:(!Array.isArray(pe[be])||pe[be].length>0)&&pe[be-1].push(pe[be]),this.$=pe[be-1];break;case 4:case 181:this.$=pe[be];break;case 11:Ue.setDirection("TB"),this.$="TB";break;case 12:Ue.setDirection(pe[be-1]),this.$=pe[be-1];break;case 27:this.$=pe[be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=Ue.addSubGraph(pe[be-6],pe[be-1],pe[be-4]);break;case 34:this.$=Ue.addSubGraph(pe[be-3],pe[be-1],pe[be-3]);break;case 35:this.$=Ue.addSubGraph(void 0,pe[be-1],void 0);break;case 37:this.$=pe[be].trim(),Ue.setAccTitle(this.$);break;case 38:case 39:this.$=pe[be].trim(),Ue.setAccDescription(this.$);break;case 43:this.$=pe[be-1]+pe[be];break;case 44:this.$=pe[be];break;case 45:Ue.addVertex(pe[be-1][0],void 0,void 0,void 0,void 0,void 0,void 0,pe[be]),Ue.addLink(pe[be-3].stmt,pe[be-1],pe[be-2]),this.$={stmt:pe[be-1],nodes:pe[be-1].concat(pe[be-3].nodes)};break;case 46:Ue.addLink(pe[be-2].stmt,pe[be],pe[be-1]),this.$={stmt:pe[be],nodes:pe[be].concat(pe[be-2].nodes)};break;case 47:Ue.addLink(pe[be-3].stmt,pe[be-1],pe[be-2]),this.$={stmt:pe[be-1],nodes:pe[be-1].concat(pe[be-3].nodes)};break;case 48:this.$={stmt:pe[be-1],nodes:pe[be-1]};break;case 49:Ue.addVertex(pe[be-1][0],void 0,void 0,void 0,void 0,void 0,void 0,pe[be]),this.$={stmt:pe[be-1],nodes:pe[be-1],shapeData:pe[be]};break;case 50:this.$={stmt:pe[be],nodes:pe[be]};break;case 51:this.$=[pe[be]];break;case 52:Ue.addVertex(pe[be-5][0],void 0,void 0,void 0,void 0,void 0,void 0,pe[be-4]),this.$=pe[be-5].concat(pe[be]);break;case 53:this.$=pe[be-4].concat(pe[be]);break;case 54:this.$=pe[be];break;case 55:this.$=pe[be-2],Ue.setClass(pe[be-2],pe[be]);break;case 56:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"square");break;case 57:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"doublecircle");break;case 58:this.$=pe[be-5],Ue.addVertex(pe[be-5],pe[be-2],"circle");break;case 59:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"ellipse");break;case 60:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"stadium");break;case 61:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"subroutine");break;case 62:this.$=pe[be-7],Ue.addVertex(pe[be-7],pe[be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[pe[be-5],pe[be-3]]]));break;case 63:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"cylinder");break;case 64:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"round");break;case 65:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"diamond");break;case 66:this.$=pe[be-5],Ue.addVertex(pe[be-5],pe[be-2],"hexagon");break;case 67:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"odd");break;case 68:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"trapezoid");break;case 69:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"inv_trapezoid");break;case 70:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"lean_right");break;case 71:this.$=pe[be-3],Ue.addVertex(pe[be-3],pe[be-1],"lean_left");break;case 72:this.$=pe[be],Ue.addVertex(pe[be]);break;case 73:pe[be-1].text=pe[be],this.$=pe[be-1];break;case 74:case 75:pe[be-2].text=pe[be-1],this.$=pe[be-2];break;case 76:this.$=pe[be];break;case 77:var vo=Ue.destructLink(pe[be],pe[be-2]);this.$={type:vo.type,stroke:vo.stroke,length:vo.length,text:pe[be-1]};break;case 78:this.$={text:pe[be],type:"text"};break;case 79:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 80:this.$={text:pe[be],type:"string"};break;case 81:this.$={text:pe[be],type:"markdown"};break;case 82:var vo=Ue.destructLink(pe[be]);this.$={type:vo.type,stroke:vo.stroke,length:vo.length};break;case 83:this.$=pe[be-1];break;case 84:this.$={text:pe[be],type:"text"};break;case 85:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 86:this.$={text:pe[be],type:"string"};break;case 87:case 102:this.$={text:pe[be],type:"markdown"};break;case 99:this.$={text:pe[be],type:"text"};break;case 100:this.$={text:pe[be-1].text+""+pe[be],type:pe[be-1].type};break;case 101:this.$={text:pe[be],type:"text"};break;case 103:this.$=pe[be-4],Ue.addClass(pe[be-2],pe[be]);break;case 104:this.$=pe[be-4],Ue.setClass(pe[be-2],pe[be]);break;case 105:case 113:this.$=pe[be-1],Ue.setClickEvent(pe[be-1],pe[be]);break;case 106:case 114:this.$=pe[be-3],Ue.setClickEvent(pe[be-3],pe[be-2]),Ue.setTooltip(pe[be-3],pe[be]);break;case 107:this.$=pe[be-2],Ue.setClickEvent(pe[be-2],pe[be-1],pe[be]);break;case 108:this.$=pe[be-4],Ue.setClickEvent(pe[be-4],pe[be-3],pe[be-2]),Ue.setTooltip(pe[be-4],pe[be]);break;case 109:this.$=pe[be-2],Ue.setLink(pe[be-2],pe[be]);break;case 110:this.$=pe[be-4],Ue.setLink(pe[be-4],pe[be-2]),Ue.setTooltip(pe[be-4],pe[be]);break;case 111:this.$=pe[be-4],Ue.setLink(pe[be-4],pe[be-2],pe[be]);break;case 112:this.$=pe[be-6],Ue.setLink(pe[be-6],pe[be-4],pe[be]),Ue.setTooltip(pe[be-6],pe[be-2]);break;case 115:this.$=pe[be-1],Ue.setLink(pe[be-1],pe[be]);break;case 116:this.$=pe[be-3],Ue.setLink(pe[be-3],pe[be-2]),Ue.setTooltip(pe[be-3],pe[be]);break;case 117:this.$=pe[be-3],Ue.setLink(pe[be-3],pe[be-2],pe[be]);break;case 118:this.$=pe[be-5],Ue.setLink(pe[be-5],pe[be-4],pe[be]),Ue.setTooltip(pe[be-5],pe[be-2]);break;case 119:this.$=pe[be-4],Ue.addVertex(pe[be-2],void 0,void 0,pe[be]);break;case 120:this.$=pe[be-4],Ue.updateLink([pe[be-2]],pe[be]);break;case 121:this.$=pe[be-4],Ue.updateLink(pe[be-2],pe[be]);break;case 122:this.$=pe[be-8],Ue.updateLinkInterpolate([pe[be-6]],pe[be-2]),Ue.updateLink([pe[be-6]],pe[be]);break;case 123:this.$=pe[be-8],Ue.updateLinkInterpolate(pe[be-6],pe[be-2]),Ue.updateLink(pe[be-6],pe[be]);break;case 124:this.$=pe[be-6],Ue.updateLinkInterpolate([pe[be-4]],pe[be]);break;case 125:this.$=pe[be-6],Ue.updateLinkInterpolate(pe[be-4],pe[be]);break;case 126:case 128:this.$=[pe[be]];break;case 127:case 129:pe[be-2].push(pe[be]),this.$=pe[be-2];break;case 131:this.$=pe[be-1]+pe[be];break;case 179:this.$=pe[be];break;case 180:this.$=pe[be-1]+""+pe[be];break;case 182:this.$=pe[be-1]+""+pe[be];break;case 183:this.$={stmt:"dir",value:"TB"};break;case 184:this.$={stmt:"dir",value:"BT"};break;case 185:this.$={stmt:"dir",value:"RL"};break;case 186:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R,120:S,121:O,122:N,123:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(B,[2,3]),t(B,[2,4]),t(B,[2,5]),t(B,[2,6]),t(B,[2,7]),t(B,[2,8]),{8:$,9:z,11:W,21:58,41:59,72:63,75:[1,64],77:[1,65]},{8:$,9:z,11:W,21:66},{8:$,9:z,11:W,21:67},{8:$,9:z,11:W,21:68},{8:$,9:z,11:W,21:69},{8:$,9:z,11:W,21:70},{8:$,9:z,10:[1,71],11:W,21:72},t(B,[2,36]),{35:[1,73]},{37:[1,74]},t(B,[2,39]),t(j,[2,50],{18:75,39:76,10:F,40:K}),{10:[1,78]},{10:[1,79]},{10:[1,80]},{10:[1,81]},{14:ie,44:Q,60:ee,79:[1,85],88:J,94:[1,82],96:[1,83],100:84,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te,119:86},t(B,[2,183]),t(B,[2,184]),t(B,[2,185]),t(B,[2,186]),t(De,[2,51]),t(De,[2,54],{46:[1,98]}),t(oe,[2,72],{112:111,29:[1,99],44:g,48:[1,100],50:[1,101],52:[1,102],54:[1,103],56:[1,104],58:[1,105],60:y,63:[1,106],65:[1,107],67:[1,108],68:[1,109],70:[1,110],88:T,101:E,104:L,105:C,108:A,110:I,113:D,114:k,115:R}),t(ke,[2,179]),t(ke,[2,140]),t(ke,[2,141]),t(ke,[2,142]),t(ke,[2,143]),t(ke,[2,144]),t(ke,[2,145]),t(ke,[2,146]),t(ke,[2,147]),t(ke,[2,148]),t(ke,[2,149]),t(ke,[2,150]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,112]},t(Fe,[2,26],{18:113,10:F}),t(B,[2,27]),{42:114,43:38,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},t(B,[2,40]),t(B,[2,41]),t(B,[2,42]),t(Be,[2,76],{73:115,62:[1,117],74:[1,116]}),{76:118,78:119,79:[1,120],80:[1,121],115:Ve,118:Ge},t([44,60,62,74,88,101,104,105,108,110,113,114,115],[2,82]),t(B,[2,28]),t(B,[2,29]),t(B,[2,30]),t(B,[2,31]),t(B,[2,32]),{10:He,12:xe,14:X,27:fe,28:124,32:he,44:ge,60:ne,75:ye,79:[1,126],80:[1,127],82:137,83:U,84:Te,85:se,86:Ee,87:Ae,88:Pe,89:Me,90:125,104:me,108:We,110:Re,113:tt,114:gt,115:Et},t(vt,a,{5:150}),t(B,[2,37]),t(B,[2,38]),t(j,[2,48],{44:Ye}),t(j,[2,49],{18:152,10:F,40:Tt}),t(De,[2,44]),{44:g,47:154,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},{101:[1,155],102:156,104:[1,157]},{44:g,47:158,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},{44:g,47:159,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},t($e,[2,105],{10:[1,160],95:[1,161]}),{79:[1,162]},t($e,[2,113],{119:164,10:[1,163],14:ie,44:Q,60:ee,88:J,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te}),t($e,[2,115],{10:[1,165]}),t(rt,[2,181]),t(rt,[2,168]),t(rt,[2,169]),t(rt,[2,170]),t(rt,[2,171]),t(rt,[2,172]),t(rt,[2,173]),t(rt,[2,174]),t(rt,[2,175]),t(rt,[2,176]),t(rt,[2,177]),t(rt,[2,178]),{44:g,47:166,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},{30:167,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:175,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:177,50:[1,176],67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:178,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:179,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:180,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{108:[1,181]},{30:182,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:183,65:[1,184],67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:185,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:186,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{30:187,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},t(ke,[2,180]),t(i,[2,20]),t(Fe,[2,25]),t(j,[2,46],{39:188,18:189,10:F,40:K}),t(Be,[2,73],{10:[1,190]}),{10:[1,191]},{30:192,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{77:[1,193],78:194,115:Ve,118:Ge},t(Lt,[2,78]),t(Lt,[2,80]),t(Lt,[2,81]),t(Lt,[2,166]),t(Lt,[2,167]),{8:$,9:z,10:He,11:W,12:xe,14:X,21:196,27:fe,29:[1,195],32:he,44:ge,60:ne,75:ye,82:137,83:U,84:Te,85:se,86:Ee,87:Ae,88:Pe,89:Me,90:197,104:me,108:We,110:Re,113:tt,114:gt,115:Et},t(Rt,[2,99]),t(Rt,[2,101]),t(Rt,[2,102]),t(Rt,[2,155]),t(Rt,[2,156]),t(Rt,[2,157]),t(Rt,[2,158]),t(Rt,[2,159]),t(Rt,[2,160]),t(Rt,[2,161]),t(Rt,[2,162]),t(Rt,[2,163]),t(Rt,[2,164]),t(Rt,[2,165]),t(Rt,[2,88]),t(Rt,[2,89]),t(Rt,[2,90]),t(Rt,[2,91]),t(Rt,[2,92]),t(Rt,[2,93]),t(Rt,[2,94]),t(Rt,[2,95]),t(Rt,[2,96]),t(Rt,[2,97]),t(Rt,[2,98]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,198],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R,120:S,121:O,122:N,123:P},{10:F,18:199},{44:[1,200]},t(De,[2,43]),{10:[1,201],44:g,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,202]},{10:[1,203],105:[1,204]},t(zt,[2,126]),{10:[1,205],44:g,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,206],44:g,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:111,113:D,114:k,115:R},{79:[1,207]},t($e,[2,107],{10:[1,208]}),t($e,[2,109],{10:[1,209]}),{79:[1,210]},t(rt,[2,182]),{79:[1,211],97:[1,212]},t(De,[2,55],{112:111,44:g,60:y,88:T,101:E,104:L,105:C,108:A,110:I,113:D,114:k,115:R}),{31:[1,213],67:ft,81:214,115:dt,116:Xe,117:ct},t(Xn,[2,84]),t(Xn,[2,86]),t(Xn,[2,87]),t(Xn,[2,151]),t(Xn,[2,152]),t(Xn,[2,153]),t(Xn,[2,154]),{49:[1,215],67:ft,81:214,115:dt,116:Xe,117:ct},{30:216,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{51:[1,217],67:ft,81:214,115:dt,116:Xe,117:ct},{53:[1,218],67:ft,81:214,115:dt,116:Xe,117:ct},{55:[1,219],67:ft,81:214,115:dt,116:Xe,117:ct},{57:[1,220],67:ft,81:214,115:dt,116:Xe,117:ct},{60:[1,221]},{64:[1,222],67:ft,81:214,115:dt,116:Xe,117:ct},{66:[1,223],67:ft,81:214,115:dt,116:Xe,117:ct},{30:224,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},{31:[1,225],67:ft,81:214,115:dt,116:Xe,117:ct},{67:ft,69:[1,226],71:[1,227],81:214,115:dt,116:Xe,117:ct},{67:ft,69:[1,229],71:[1,228],81:214,115:dt,116:Xe,117:ct},t(j,[2,45],{18:152,10:F,40:Tt}),t(j,[2,47],{44:Ye}),t(Be,[2,75]),t(Be,[2,74]),{62:[1,230],67:ft,81:214,115:dt,116:Xe,117:ct},t(Be,[2,77]),t(Lt,[2,79]),{30:231,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},t(vt,a,{5:232}),t(Rt,[2,100]),t(B,[2,35]),{43:233,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},{10:F,18:234},{10:or,60:hn,83:Tn,91:235,104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},{10:or,60:hn,83:Tn,91:246,103:[1,247],104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},{10:or,60:hn,83:Tn,91:248,103:[1,249],104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},{104:[1,250]},{10:or,60:hn,83:Tn,91:251,104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},{44:g,47:252,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},t($e,[2,106]),{79:[1,253]},{79:[1,254],97:[1,255]},t($e,[2,114]),t($e,[2,116],{10:[1,256]}),t($e,[2,117]),t(oe,[2,56]),t(Xn,[2,85]),t(oe,[2,57]),{51:[1,257],67:ft,81:214,115:dt,116:Xe,117:ct},t(oe,[2,64]),t(oe,[2,59]),t(oe,[2,60]),t(oe,[2,61]),{108:[1,258]},t(oe,[2,63]),t(oe,[2,65]),{66:[1,259],67:ft,81:214,115:dt,116:Xe,117:ct},t(oe,[2,67]),t(oe,[2,68]),t(oe,[2,70]),t(oe,[2,69]),t(oe,[2,71]),t([10,44,60,88,101,104,105,108,110,113,114,115],[2,83]),{31:[1,260],67:ft,81:214,115:dt,116:Xe,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,261],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R,120:S,121:O,122:N,123:P},t(De,[2,53]),{43:262,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R},t($e,[2,119],{105:at}),t(At,[2,128],{107:264,10:or,60:hn,83:Tn,104:Ur,108:ri,109:Mn,110:yt,111:Se}),t(pr,[2,130]),t(pr,[2,132]),t(pr,[2,133]),t(pr,[2,134]),t(pr,[2,135]),t(pr,[2,136]),t(pr,[2,137]),t(pr,[2,138]),t(pr,[2,139]),t($e,[2,120],{105:at}),{10:[1,265]},t($e,[2,121],{105:at}),{10:[1,266]},t(zt,[2,127]),t($e,[2,103],{105:at}),t($e,[2,104],{112:111,44:g,60:y,88:T,101:E,104:L,105:C,108:A,110:I,113:D,114:k,115:R}),t($e,[2,108]),t($e,[2,110],{10:[1,267]}),t($e,[2,111]),{97:[1,268]},{51:[1,269]},{62:[1,270]},{66:[1,271]},{8:$,9:z,11:W,21:272},t(B,[2,34]),t(De,[2,52]),{10:or,60:hn,83:Tn,104:Ur,106:273,107:237,108:ri,109:Mn,110:yt,111:Se},t(pr,[2,131]),{14:ie,44:Q,60:ee,88:J,100:274,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te,119:86},{14:ie,44:Q,60:ee,88:J,100:275,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te,119:86},{97:[1,276]},t($e,[2,118]),t(oe,[2,58]),{30:277,67:ft,79:kt,80:er,81:168,115:dt,116:Xe,117:ct},t(oe,[2,66]),t(vt,a,{5:278}),t(At,[2,129],{107:264,10:or,60:hn,83:Tn,104:Ur,108:ri,109:Mn,110:yt,111:Se}),t($e,[2,124],{119:164,10:[1,279],14:ie,44:Q,60:ee,88:J,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te}),t($e,[2,125],{119:164,10:[1,280],14:ie,44:Q,60:ee,88:J,104:H,105:q,108:Z,110:ae,113:ue,114:ce,115:te}),t($e,[2,112]),{31:[1,281],67:ft,81:214,115:dt,116:Xe,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,282],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:C,108:A,110:I,112:41,113:D,114:k,115:R,120:S,121:O,122:N,123:P},{10:or,60:hn,83:Tn,91:283,104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},{10:or,60:hn,83:Tn,91:284,104:Ur,106:236,107:237,108:ri,109:Mn,110:yt,111:Se},t(oe,[2,62]),t(B,[2,33]),t($e,[2,122],{105:at}),t($e,[2,123],{105:at})],defaultActions:{},parseError:o(function(_t,St){if(St.recoverable)this.trace(_t);else{var bt=new Error(_t);throw bt.hash=St,bt}},"parseError"),parse:o(function(_t){var St=this,bt=[0],Ue=[],Kt=[null],pe=[],bi=this.table,be="",vo=0,bF=0,wF=0,axe=2,TF=1,sxe=pe.slice.call(arguments,1),ji=Object.create(this.lexer),Pf={yy:{}};for(var gS in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gS)&&(Pf.yy[gS]=this.yy[gS]);ji.setInput(_t,Pf.yy),Pf.yy.lexer=ji,Pf.yy.parser=this,typeof ji.yylloc>"u"&&(ji.yylloc={});var yS=ji.yylloc;pe.push(yS);var oxe=ji.options&&ji.options.ranges;typeof Pf.yy.parseError=="function"?this.parseError=Pf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Sat(Vs){bt.length=bt.length-2*Vs,Kt.length=Kt.length-Vs,pe.length=pe.length-Vs}o(Sat,"popStack");function lxe(){var Vs;return Vs=Ue.pop()||ji.lex()||TF,typeof Vs!="number"&&(Vs instanceof Array&&(Ue=Vs,Vs=Ue.pop()),Vs=St.symbols_[Vs]||Vs),Vs}o(lxe,"lex");for(var Va,vS,Bf,xo,Cat,xS,Q0={},Eb,Xc,kF,Sb;;){if(Bf=bt[bt.length-1],this.defaultActions[Bf]?xo=this.defaultActions[Bf]:((Va===null||typeof Va>"u")&&(Va=lxe()),xo=bi[Bf]&&bi[Bf][Va]),typeof xo>"u"||!xo.length||!xo[0]){var bS="";Sb=[];for(Eb in bi[Bf])this.terminals_[Eb]&&Eb>axe&&Sb.push("'"+this.terminals_[Eb]+"'");ji.showPosition?bS="Parse error on line "+(vo+1)+`: +`+ji.showPosition()+` +Expecting `+Sb.join(", ")+", got '"+(this.terminals_[Va]||Va)+"'":bS="Parse error on line "+(vo+1)+": Unexpected "+(Va==TF?"end of input":"'"+(this.terminals_[Va]||Va)+"'"),this.parseError(bS,{text:ji.match,token:this.terminals_[Va]||Va,line:ji.yylineno,loc:yS,expected:Sb})}if(xo[0]instanceof Array&&xo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Bf+", token: "+Va);switch(xo[0]){case 1:bt.push(Va),Kt.push(ji.yytext),pe.push(ji.yylloc),bt.push(xo[1]),Va=null,vS?(Va=vS,vS=null):(bF=ji.yyleng,be=ji.yytext,vo=ji.yylineno,yS=ji.yylloc,wF>0&&wF--);break;case 2:if(Xc=this.productions_[xo[1]][1],Q0.$=Kt[Kt.length-Xc],Q0._$={first_line:pe[pe.length-(Xc||1)].first_line,last_line:pe[pe.length-1].last_line,first_column:pe[pe.length-(Xc||1)].first_column,last_column:pe[pe.length-1].last_column},oxe&&(Q0._$.range=[pe[pe.length-(Xc||1)].range[0],pe[pe.length-1].range[1]]),xS=this.performAction.apply(Q0,[be,bF,vo,Pf.yy,xo[1],Kt,pe].concat(sxe)),typeof xS<"u")return xS;Xc&&(bt=bt.slice(0,-1*Xc*2),Kt=Kt.slice(0,-1*Xc),pe=pe.slice(0,-1*Xc)),bt.push(this.productions_[xo[1]][0]),Kt.push(Q0.$),pe.push(Q0._$),kF=bi[bt[bt.length-2]][bt[bt.length-1]],bt.push(kF);break;case 3:return!0}}return!0},"parse")},On=function(){var kn={EOF:1,parseError:o(function(St,bt){if(this.yy.parser)this.yy.parser.parseError(St,bt);else throw new Error(St)},"parseError"),setInput:o(function(_t,St){return this.yy=St||this.yy||{},this._input=_t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var _t=this._input[0];this.yytext+=_t,this.yyleng++,this.offset++,this.match+=_t,this.matched+=_t;var St=_t.match(/(?:\r\n?|\n).*/g);return St?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_t},"input"),unput:o(function(_t){var St=_t.length,bt=_t.split(/(?:\r\n?|\n)/g);this._input=_t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-St),this.offset-=St;var Ue=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),bt.length-1&&(this.yylineno-=bt.length-1);var Kt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:bt?(bt.length===Ue.length?this.yylloc.first_column:0)+Ue[Ue.length-bt.length].length-bt[0].length:this.yylloc.first_column-St},this.options.ranges&&(this.yylloc.range=[Kt[0],Kt[0]+this.yyleng-St]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(_t){this.unput(this.match.slice(_t))},"less"),pastInput:o(function(){var _t=this.matched.substr(0,this.matched.length-this.match.length);return(_t.length>20?"...":"")+_t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var _t=this.match;return _t.length<20&&(_t+=this._input.substr(0,20-_t.length)),(_t.substr(0,20)+(_t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var _t=this.pastInput(),St=new Array(_t.length+1).join("-");return _t+this.upcomingInput()+` +`+St+"^"},"showPosition"),test_match:o(function(_t,St){var bt,Ue,Kt;if(this.options.backtrack_lexer&&(Kt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Kt.yylloc.range=this.yylloc.range.slice(0))),Ue=_t[0].match(/(?:\r\n?|\n).*/g),Ue&&(this.yylineno+=Ue.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ue?Ue[Ue.length-1].length-Ue[Ue.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_t[0].length},this.yytext+=_t[0],this.match+=_t[0],this.matches=_t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_t[0].length),this.matched+=_t[0],bt=this.performAction.call(this,this.yy,this,St,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),bt)return bt;if(this._backtrack){for(var pe in Kt)this[pe]=Kt[pe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _t,St,bt,Ue;this._more||(this.yytext="",this.match="");for(var Kt=this._currentRules(),pe=0;peSt[0].length)){if(St=bt,Ue=pe,this.options.backtrack_lexer){if(_t=this.test_match(bt,Kt[pe]),_t!==!1)return _t;if(this._backtrack){St=!1;continue}else return!1}else if(!this.options.flex)break}return St?(_t=this.test_match(St,Kt[Ue]),_t!==!1?_t:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var St=this.next();return St||this.lex()},"lex"),begin:o(function(St){this.conditionStack.push(St)},"begin"),popState:o(function(){var St=this.conditionStack.length-1;return St>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(St){return St=this.conditionStack.length-1-Math.abs(St||0),St>=0?this.conditionStack[St]:"INITIAL"},"topState"),pushState:o(function(St){this.begin(St)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(St,bt,Ue,Kt){var pe=Kt;switch(Ue){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),bt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let bi=/\n\s*/g;return bt.yytext=bt.yytext.replace(bi,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 94;case 17:this.popState();break;case 18:return 95;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 83;case 26:return 101;case 27:return 84;case 28:return 103;case 29:return 85;case 30:return 86;case 31:return 96;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 87;case 35:return St.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return St.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return St.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 97;case 41:return 97;case 42:return 97;case 43:return 97;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 120;case 56:return 121;case 57:return 122;case 58:return 123;case 59:return 104;case 60:return 110;case 61:return 46;case 62:return 60;case 63:return 44;case 64:return 8;case 65:return 105;case 66:return 114;case 67:return this.popState(),77;break;case 68:return this.pushState("edgeText"),75;break;case 69:return 118;case 70:return this.popState(),77;break;case 71:return this.pushState("thickEdgeText"),75;break;case 72:return 118;case 73:return this.popState(),77;break;case 74:return this.pushState("dottedEdgeText"),75;break;case 75:return 118;case 76:return 77;case 77:return this.popState(),53;break;case 78:return"TEXT";case 79:return this.pushState("ellipseText"),52;break;case 80:return this.popState(),55;break;case 81:return this.pushState("text"),54;break;case 82:return this.popState(),57;break;case 83:return this.pushState("text"),56;break;case 84:return 58;case 85:return this.pushState("text"),67;break;case 86:return this.popState(),64;break;case 87:return this.pushState("text"),63;break;case 88:return this.popState(),49;break;case 89:return this.pushState("text"),48;break;case 90:return this.popState(),69;break;case 91:return this.popState(),71;break;case 92:return 116;case 93:return this.pushState("trapText"),68;break;case 94:return this.pushState("trapText"),70;break;case 95:return 117;case 96:return 67;case 97:return 89;case 98:return"SEP";case 99:return 88;case 100:return 114;case 101:return 110;case 102:return 44;case 103:return 108;case 104:return 113;case 105:return 115;case 106:return this.popState(),62;break;case 107:return this.pushState("text"),62;break;case 108:return this.popState(),51;break;case 109:return this.pushState("text"),50;break;case 110:return this.popState(),31;break;case 111:return this.pushState("text"),29;break;case 112:return this.popState(),66;break;case 113:return this.pushState("text"),65;break;case 114:return"TEXT";case 115:return"QUOTE";case 116:return 9;case 117:return 10;case 118:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeData:{rules:[8,11,12,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackargs:{rules:[17,18,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackname:{rules:[14,15,16,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},href:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},click:{rules:[21,24,33,34,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dottedEdgeText:{rules:[21,24,73,75,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},thickEdgeText:{rules:[21,24,70,72,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},edgeText:{rules:[21,24,67,69,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},trapText:{rules:[21,24,76,79,81,83,87,89,90,91,92,93,94,107,109,111,113],inclusive:!1},ellipseText:{rules:[21,24,76,77,78,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},text:{rules:[21,24,76,79,80,81,82,83,86,87,88,89,93,94,106,107,108,109,110,111,112,113,114],inclusive:!1},vertex:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr:{rules:[3,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_title:{rules:[1,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},md_string:{rules:[19,20,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},string:{rules:[21,22,23,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,73,74,76,79,81,83,84,85,87,89,93,94,95,96,97,98,99,100,101,102,103,104,105,107,109,111,113,115,116,117,118],inclusive:!0}}};return kn}();In.lexer=On;function Ir(){this.yy={}}return o(Ir,"Parser"),Ir.prototype=In,In.Parser=Ir,new Ir}();AD.parser=AD;Wie=AD});var uPe,hPe,qie,Xie=M(()=>{"use strict";To();uPe=o((t,e)=>{let r=z1,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Hs(n,i,a,e)},"fade"),hPe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + + .root .anchor path { + fill: ${t.lineColor} !important; + stroke-width: 0; + stroke: ${t.lineColor}; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${uPe(t.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + padding: 2px; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } +`,"getStyles"),qie=hPe});var hT={};vr(hT,{diagram:()=>fPe});var fPe,fT=M(()=>{"use strict";Vt();oL();Hie();Yie();Xie();fPe={parser:Wie,db:X5,renderer:Uie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&n7({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,n7({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),X5.clear(),X5.setGen("gen-2")},"init")}});var _D,Jie,eae=M(()=>{"use strict";_D=function(){var t=o(function(C,A,I,D){for(I=I||{},D=C.length;D--;I[C[D]]=A);return I},"o"),e=[6,8,10,20,22,24,26,27,28],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,14],l=[1,15],u=[1,21],h=[1,22],f=[1,23],d=[1,24],p=[1,25],m=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],g=[1,34],y=[27,28,46,47],v=[41,42,43,44,45],x=[17,34],b=[1,54],w=[1,53],_=[17,34,36,38],T={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:o(function(A,I,D,k,R,S,O){var N=S.length-1;switch(R){case 1:break;case 2:this.$=[];break;case 3:S[N-1].push(S[N]),this.$=S[N-1];break;case 4:case 5:this.$=S[N];break;case 6:case 7:this.$=[];break;case 8:k.addEntity(S[N-4]),k.addEntity(S[N-2]),k.addRelationship(S[N-4],S[N],S[N-2],S[N-3]);break;case 9:k.addEntity(S[N-3]),k.addAttributes(S[N-3],S[N-1]);break;case 10:k.addEntity(S[N-2]);break;case 11:k.addEntity(S[N]);break;case 12:k.addEntity(S[N-6],S[N-4]),k.addAttributes(S[N-6],S[N-1]);break;case 13:k.addEntity(S[N-5],S[N-3]);break;case 14:k.addEntity(S[N-3],S[N-1]);break;case 15:case 16:this.$=S[N].trim(),k.setAccTitle(this.$);break;case 17:case 18:this.$=S[N].trim(),k.setAccDescription(this.$);break;case 19:case 43:this.$=S[N];break;case 20:case 41:case 42:this.$=S[N].replace(/"/g,"");break;case 21:case 29:this.$=[S[N]];break;case 22:S[N].push(S[N-1]),this.$=S[N];break;case 23:this.$={attributeType:S[N-1],attributeName:S[N]};break;case 24:this.$={attributeType:S[N-2],attributeName:S[N-1],attributeKeyTypeList:S[N]};break;case 25:this.$={attributeType:S[N-2],attributeName:S[N-1],attributeComment:S[N]};break;case 26:this.$={attributeType:S[N-3],attributeName:S[N-2],attributeKeyTypeList:S[N-1],attributeComment:S[N]};break;case 27:case 28:case 31:this.$=S[N];break;case 30:S[N-2].push(S[N]),this.$=S[N-2];break;case 32:this.$=S[N].replace(/"/g,"");break;case 33:this.$={cardA:S[N],relType:S[N-1],cardB:S[N-2]};break;case 34:this.$=k.Cardinality.ZERO_OR_ONE;break;case 35:this.$=k.Cardinality.ZERO_OR_MORE;break;case 36:this.$=k.Cardinality.ONE_OR_MORE;break;case 37:this.$=k.Cardinality.ONLY_ONE;break;case 38:this.$=k.Cardinality.MD_PARENT;break;case 39:this.$=k.Identification.NON_IDENTIFYING;break;case 40:this.$=k.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:u,42:h,43:f,44:d,45:p}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(m,[2,19]),t(m,[2,20]),t(e,[2,4]),{11:29,27:s,28:l},{16:30,17:[1,31],29:32,30:33,34:g},{11:35,27:s,28:l},{40:36,46:[1,37],47:[1,38]},t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),t(y,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:g},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:u,42:h,43:f,44:d,45:p},t(v,[2,39]),t(v,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(x,[2,23],{32:50,33:51,35:52,37:b,38:w}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(x,[2,24],{33:56,36:[1,57],38:w}),t(x,[2,25]),t(_,[2,29]),t(x,[2,32]),t(_,[2,31]),{16:58,17:[1,59],29:32,30:33,34:g},t(x,[2,26]),{35:60,37:b},{17:[1,61]},t(e,[2,13]),t(_,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:o(function(A,I){if(I.recoverable)this.trace(A);else{var D=new Error(A);throw D.hash=I,D}},"parseError"),parse:o(function(A){var I=this,D=[0],k=[],R=[null],S=[],O=this.table,N="",P=0,F=0,B=0,$=2,z=1,W=S.slice.call(arguments,1),j=Object.create(this.lexer),K={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(K.yy[ie]=this.yy[ie]);j.setInput(A,K.yy),K.yy.lexer=j,K.yy.parser=this,typeof j.yylloc>"u"&&(j.yylloc={});var Q=j.yylloc;S.push(Q);var ee=j.options&&j.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function J(Ge){D.length=D.length-2*Ge,R.length=R.length-Ge,S.length=S.length-Ge}o(J,"popStack");function H(){var Ge;return Ge=k.pop()||j.lex()||z,typeof Ge!="number"&&(Ge instanceof Array&&(k=Ge,Ge=k.pop()),Ge=I.symbols_[Ge]||Ge),Ge}o(H,"lex");for(var q,Z,ae,ue,ce,te,De={},oe,ke,Fe,Be;;){if(ae=D[D.length-1],this.defaultActions[ae]?ue=this.defaultActions[ae]:((q===null||typeof q>"u")&&(q=H()),ue=O[ae]&&O[ae][q]),typeof ue>"u"||!ue.length||!ue[0]){var Ve="";Be=[];for(oe in O[ae])this.terminals_[oe]&&oe>$&&Be.push("'"+this.terminals_[oe]+"'");j.showPosition?Ve="Parse error on line "+(P+1)+`: +`+j.showPosition()+` +Expecting `+Be.join(", ")+", got '"+(this.terminals_[q]||q)+"'":Ve="Parse error on line "+(P+1)+": Unexpected "+(q==z?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(Ve,{text:j.match,token:this.terminals_[q]||q,line:j.yylineno,loc:Q,expected:Be})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+q);switch(ue[0]){case 1:D.push(q),R.push(j.yytext),S.push(j.yylloc),D.push(ue[1]),q=null,Z?(q=Z,Z=null):(F=j.yyleng,N=j.yytext,P=j.yylineno,Q=j.yylloc,B>0&&B--);break;case 2:if(ke=this.productions_[ue[1]][1],De.$=R[R.length-ke],De._$={first_line:S[S.length-(ke||1)].first_line,last_line:S[S.length-1].last_line,first_column:S[S.length-(ke||1)].first_column,last_column:S[S.length-1].last_column},ee&&(De._$.range=[S[S.length-(ke||1)].range[0],S[S.length-1].range[1]]),te=this.performAction.apply(De,[N,F,P,K.yy,ue[1],R,S].concat(W)),typeof te<"u")return te;ke&&(D=D.slice(0,-1*ke*2),R=R.slice(0,-1*ke),S=S.slice(0,-1*ke)),D.push(this.productions_[ue[1]][0]),R.push(De.$),S.push(De._$),Fe=O[D[D.length-2]][D[D.length-1]],D.push(Fe);break;case 3:return!0}}return!0},"parse")},E=function(){var C={EOF:1,parseError:o(function(I,D){if(this.yy.parser)this.yy.parser.parseError(I,D);else throw new Error(I)},"parseError"),setInput:o(function(A,I){return this.yy=I||this.yy||{},this._input=A,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var I=A.match(/(?:\r\n?|\n).*/g);return I?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var I=A.length,D=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-I),this.offset-=I;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),D.length-1&&(this.yylineno-=D.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:D?(D.length===k.length?this.yylloc.first_column:0)+k[k.length-D.length].length-D[0].length:this.yylloc.first_column-I},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-I]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),I=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+I+"^"},"showPosition"),test_match:o(function(A,I){var D,k,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),k=A[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(A[0].length),this.matched+=A[0],D=this.performAction.call(this,this.yy,this,I,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),D)return D;if(this._backtrack){for(var S in R)this[S]=R[S];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,I,D,k;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),S=0;SI[0].length)){if(I=D,k=S,this.options.backtrack_lexer){if(A=this.test_match(D,R[S]),A!==!1)return A;if(this._backtrack){I=!1;continue}else return!1}else if(!this.options.flex)break}return I?(A=this.test_match(I,R[k]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var I=this.next();return I||this.lex()},"lex"),begin:o(function(I){this.conditionStack.push(I)},"begin"),popState:o(function(){var I=this.conditionStack.length-1;return I>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(I){return I=this.conditionStack.length-1-Math.abs(I||0),I>=0?this.conditionStack[I]:"INITIAL"},"topState"),pushState:o(function(I){this.begin(I)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(I,D,k,R){var S=R;switch(k){case 0:return this.begin("acc_title"),22;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),24;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;break;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;break;case 22:return D.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return D.yytext[0];case 55:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return C}();T.lexer=E;function L(){this.yy={}}return o(L,"Parser"),L.prototype=T,T.Parser=L,new L}();_D.parser=_D;Jie=_D});var Gd,LD,xPe,bPe,tae,wPe,TPe,kPe,EPe,SPe,rae,nae=M(()=>{"use strict";ht();Vt();ki();Gd=new Map,LD=[],xPe={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},bPe={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},tae=o(function(t,e=void 0){return Gd.has(t)?!Gd.get(t).alias&&e&&(Gd.get(t).alias=e,Y.info(`Add alias '${e}' to entity '${t}'`)):(Gd.set(t,{attributes:[],alias:e}),Y.info("Added new entity :",t)),Gd.get(t)},"addEntity"),wPe=o(()=>Gd,"getEntities"),TPe=o(function(t,e){let r=tae(t),n;for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),Y.debug("Added attribute ",e[n].attributeName)},"addAttributes"),kPe=o(function(t,e,r,n){let i={entityA:t,roleA:e,entityB:r,relSpec:n};LD.push(i),Y.debug("Added new relationship :",i)},"addRelationship"),EPe=o(()=>LD,"getRelationships"),SPe=o(function(){Gd=new Map,LD=[],_r()},"clear"),rae={Cardinality:xPe,Identification:bPe,getConfig:o(()=>de().er,"getConfig"),addEntity:tae,addAttributes:TPe,getEntities:wPe,addRelationship:kPe,getRelationships:EPe,clear:SPe,setAccTitle:Rr,getAccTitle:Pr,setAccDescription:Br,getAccDescription:Fr,setDiagramTitle:ln,getDiagramTitle:Jr}});var Rl,CPe,Wo,iae=M(()=>{"use strict";Rl={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},CPe=o(function(t,e){let r;t.append("defs").append("marker").attr("id",Rl.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Rl.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Rl.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Rl.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Rl.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Rl.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Rl.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Rl.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",Rl.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",Rl.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"insertMarkers"),Wo={ERMarkers:Rl,insertMarkers:CPe}});var aae,sae=M(()=>{"use strict";aae=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function APe(t){return typeof t=="string"&&aae.test(t)}var oae,lae=M(()=>{"use strict";sae();o(APe,"validate");oae=APe});function cae(t,e=0){return pa[t[e+0]]+pa[t[e+1]]+pa[t[e+2]]+pa[t[e+3]]+"-"+pa[t[e+4]]+pa[t[e+5]]+"-"+pa[t[e+6]]+pa[t[e+7]]+"-"+pa[t[e+8]]+pa[t[e+9]]+"-"+pa[t[e+10]]+pa[t[e+11]]+pa[t[e+12]]+pa[t[e+13]]+pa[t[e+14]]+pa[t[e+15]]}var pa,uae=M(()=>{"use strict";pa=[];for(let t=0;t<256;++t)pa.push((t+256).toString(16).slice(1));o(cae,"unsafeStringify")});function _Pe(t){if(!oae(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var hae,fae=M(()=>{"use strict";lae();o(_Pe,"parse");hae=_Pe});function LPe(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r{"use strict";uae();fae();o(LPe,"stringToBytes");DPe="6ba7b810-9dad-11d1-80b4-00c04fd430c8",NPe="6ba7b811-9dad-11d1-80b4-00c04fd430c8";o(DD,"v35")});function RPe(t,e,r,n){switch(t){case 0:return e&r^~e&n;case 1:return e^r^n;case 2:return e&r^e&n^r&n;case 3:return e^r^n}}function ND(t,e){return t<>>32-e}function MPe(t){let e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){let s=unescape(encodeURIComponent(t));t=[];for(let l=0;l>>0;p=d,d=f,f=ND(h,30)>>>0,h=u,u=y}r[0]=r[0]+u>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+d>>>0,r[4]=r[4]+p>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var pae,mae=M(()=>{"use strict";o(RPe,"f");o(ND,"ROTL");o(MPe,"sha1");pae=MPe});var IPe,RD,gae=M(()=>{"use strict";dae();mae();IPe=DD("v5",80,pae),RD=IPe});var yae=M(()=>{"use strict";gae()});function HPe(t="",e=""){let r=t.replace(OPe,"");return`${xae(e)}${xae(r)}${RD(t,UPe)}`}function xae(t=""){return t.length>0?`${t}-`:""}var OPe,Bi,zv,PPe,BPe,FPe,zPe,bae,GPe,vae,$Pe,VPe,UPe,wae,Tae=M(()=>{"use strict";Ns();mr();Pv();Vt();ht();hr();iae();ni();fr();yae();OPe=/[^\dA-Za-z](\W)*/g,Bi={},zv=new Map,PPe=o(function(t){let e=Object.keys(t);for(let r of e)Bi[r]=t[r]},"setConf"),BPe=o((t,e,r)=>{let n=Bi.entityPadding/3,i=Bi.entityPadding/3,a=Bi.fontSize*.85,s=e.node().getBBox(),l=[],u=!1,h=!1,f=0,d=0,p=0,m=0,g=s.height+n*2,y=1;r.forEach(w=>{w.attributeKeyTypeList!==void 0&&w.attributeKeyTypeList.length>0&&(u=!0),w.attributeComment!==void 0&&(h=!0)}),r.forEach(w=>{let _=`${e.node().id}-attr-${y}`,T=0,E=ou(w.attributeType),L=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(E),C=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(w.attributeName),A={};A.tn=L,A.nn=C;let I=L.node().getBBox(),D=C.node().getBBox();if(f=Math.max(f,I.width),d=Math.max(d,D.width),T=Math.max(I.height,D.height),u){let k=w.attributeKeyTypeList!==void 0?w.attributeKeyTypeList.join(","):"",R=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(k);A.kn=R;let S=R.node().getBBox();p=Math.max(p,S.width),T=Math.max(T,S.height)}if(h){let k=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",de().fontFamily).style("font-size",a+"px").text(w.attributeComment||"");A.cn=k;let R=k.node().getBBox();m=Math.max(m,R.width),T=Math.max(T,R.height)}A.height=T,l.push(A),g+=T+n*2,y+=1});let v=4;u&&(v+=2),h&&(v+=2);let x=f+d+p+m,b={width:Math.max(Bi.minEntityWidth,Math.max(s.width+Bi.entityPadding*2,x+i*v)),height:r.length>0?g:Math.max(Bi.minEntityHeight,s.height+Bi.entityPadding*2)};if(r.length>0){let w=Math.max(0,(b.width-x-i*v)/(v/2));e.attr("transform","translate("+b.width/2+","+(n+s.height/2)+")");let _=s.height+n*2,T="attributeBoxOdd";l.forEach(E=>{let L=_+n+E.height/2;E.tn.attr("transform","translate("+i+","+L+")");let C=t.insert("rect","#"+E.tn.node().id).classed(`er ${T}`,!0).attr("x",0).attr("y",_).attr("width",f+i*2+w).attr("height",E.height+n*2),A=parseFloat(C.attr("x"))+parseFloat(C.attr("width"));E.nn.attr("transform","translate("+(A+i)+","+L+")");let I=t.insert("rect","#"+E.nn.node().id).classed(`er ${T}`,!0).attr("x",A).attr("y",_).attr("width",d+i*2+w).attr("height",E.height+n*2),D=parseFloat(I.attr("x"))+parseFloat(I.attr("width"));if(u){E.kn.attr("transform","translate("+(D+i)+","+L+")");let k=t.insert("rect","#"+E.kn.node().id).classed(`er ${T}`,!0).attr("x",D).attr("y",_).attr("width",p+i*2+w).attr("height",E.height+n*2);D=parseFloat(k.attr("x"))+parseFloat(k.attr("width"))}h&&(E.cn.attr("transform","translate("+(D+i)+","+L+")"),t.insert("rect","#"+E.cn.node().id).classed(`er ${T}`,"true").attr("x",D).attr("y",_).attr("width",m+i*2+w).attr("height",E.height+n*2)),_+=E.height+n*2,T=T==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else b.height=Math.max(Bi.minEntityHeight,g),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b},"drawAttributes"),FPe=o(function(t,e,r){let n=[...e.keys()],i;return n.forEach(function(a){let s=HPe(a,"entity");zv.set(a,s);let l=t.append("g").attr("id",s);i=i===void 0?s:i;let u="text-"+s,h=l.append("text").classed("er entityLabel",!0).attr("id",u).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",de().fontFamily).style("font-size",Bi.fontSize+"px").text(e.get(a).alias??a),{width:f,height:d}=BPe(l,h,e.get(a).attributes),m=l.insert("rect","#"+u).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",f).attr("height",d).node().getBBox();r.setNode(s,{width:m.width,height:m.height,shape:"rect",id:s})}),i},"drawEntities"),zPe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},"adjustEntities"),bae=o(function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},"getEdgeName"),GPe=o(function(t,e){return t.forEach(function(r){e.setEdge(zv.get(r.entityA),zv.get(r.entityB),{relationship:r},bae(r))}),t},"addRelationships"),vae=0,$Pe=o(function(t,e,r,n,i){vae++;let a=r.edge(zv.get(e.entityA),zv.get(e.entityB),bae(e)),s=Ka().x(function(y){return y.x}).y(function(y){return y.y}).curve(Do),l=t.insert("path","#"+n).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",Bi.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let u="";switch(Bi.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+u+"#"+Wo.ERMarkers.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+u+"#"+Wo.ERMarkers.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+u+"#"+Wo.ERMarkers.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+u+"#"+Wo.ERMarkers.ONLY_ONE_END+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+u+"#"+Wo.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+u+"#"+Wo.ERMarkers.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+u+"#"+Wo.ERMarkers.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+u+"#"+Wo.ERMarkers.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+u+"#"+Wo.ERMarkers.ONLY_ONE_START+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+u+"#"+Wo.ERMarkers.MD_PARENT_START+")");break}let h=l.node().getTotalLength(),f=l.node().getPointAtLength(h*.5),d="rel"+vae,p=e.roleA.split(/
    /g),m=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",f.x).attr("y",f.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",de().fontFamily).style("font-size",Bi.fontSize+"px");if(p.length==1)m.text(e.roleA);else{let y=-(p.length-1)*.5;p.forEach((v,x)=>{m.append("tspan").attr("x",f.x).attr("dy",`${x===0?y:1}em`).text(v)})}let g=m.node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",f.x-g.width/2).attr("y",f.y-g.height/2).attr("width",g.width).attr("height",g.height)},"drawRelationshipFromLayout"),VPe=o(function(t,e,r,n){Bi=de().er,Y.info("Drawing ER diagram");let i=de().securityLevel,a;i==="sandbox"&&(a=ze("#i"+e));let l=(i==="sandbox"?ze(a.nodes()[0].contentDocument.body):ze("body")).select(`[id='${e}']`);Wo.insertMarkers(l,Bi);let u;u=new Mr({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:Bi.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let h=FPe(l,n.db.getEntities(),u),f=GPe(n.db.getRelationships(),u);Du(u),zPe(l,u),f.forEach(function(y){$Pe(l,y,u,h,n)});let d=Bi.diagramPadding;Ut.insertTitle(l,"entityTitleText",Bi.titleTopMargin,n.db.getDiagramTitle());let p=l.node().getBBox(),m=p.width+d*2,g=p.height+d*2;Zr(l,g,m,Bi.useMaxWidth),l.attr("viewBox",`${p.x-d} ${p.y-d} ${m} ${g}`)},"draw"),UPe="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";o(HPe,"generateId");o(xae,"strWithHyphen");wae={setConf:PPe,draw:VPe}});var WPe,kae,Eae=M(()=>{"use strict";WPe=o(t=>` + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${t.attributeBackgroundColorOdd}; + stroke: ${t.nodeBorder}; + } + + .attributeBoxEven { + fill: ${t.attributeBackgroundColorEven}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${t.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } + +`,"getStyles"),kae=WPe});var Sae={};vr(Sae,{diagram:()=>YPe});var YPe,Cae=M(()=>{"use strict";eae();nae();Tae();Eae();YPe={parser:Jie,db:rae,renderer:wae,styles:kae}});function ei(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function ma(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function MD(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function Vd(t){return typeof t=="object"&&t!==null&&ei(t.container)&&ma(t.reference)&&typeof t.message=="string"}function io(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function Jh(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function Gv(t){return io(t)&&typeof t.fullText=="string"}var $d,Yo=M(()=>{"use strict";o(ei,"isAstNode");o(ma,"isReference");o(MD,"isAstNodeDescription");o(Vd,"isLinkingError");$d=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ei(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(io,"isCompositeCstNode");o(Jh,"isLeafCstNode");o(Gv,"isRootCstNode")});function KPe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function dT(t){return!!t&&typeof t[Symbol.iterator]=="function"}function tn(...t){if(t.length===1){let e=t[0];if(e instanceof ao)return e;if(dT(e))return new ao(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new ao(()=>({index:0}),r=>r.index1?new ao(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";ao=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){let r=e[Symbol.iterator]();return new t(()=>({first:this.startFn(),firstDone:!1}),n=>{let i;if(!n.firstDone){do if(i=this.nextFn(n.first),!i.done)return i;while(!i.done);n.firstDone=!0}do if(i=r.next(),!i.done)return i;while(!i.done);return Ja})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=KPe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ja:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ja})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(dT(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ja})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(dT(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ja})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ja:this.nextFn(r.state)))}distinct(e){let r=new Set;return this.filter(n=>{let i=e?e(n):n;return r.has(i)?!1:(r.add(i),!0)})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(KPe,"toString");o(dT,"isIterable");$v=new ao(()=>{},()=>Ja),Ja=Object.freeze({done:!0,value:void 0});o(tn,"stream");Cc=class extends ao{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ja})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(Gm||(Gm={}))});var mT={};vr(mT,{DefaultNameRegexp:()=>pT,RangeComparison:()=>Nu,compareRange:()=>Dae,findCommentNode:()=>BD,findDeclarationNodeAtOffset:()=>ZPe,findLeafNodeAtOffset:()=>FD,findLeafNodeBeforeOffset:()=>Nae,flattenCst:()=>QPe,getInteriorNodes:()=>tBe,getNextNode:()=>JPe,getPreviousNode:()=>Mae,getStartlineNode:()=>eBe,inRange:()=>PD,isChildNode:()=>OD,isCommentNode:()=>ID,streamCst:()=>Ud,toDocumentSegment:()=>Hd,tokenToRange:()=>$m});function Ud(t){return new Cc(t,e=>io(e)?e.content:[],{includeRoot:!0})}function QPe(t){return Ud(t).filter(Jh)}function OD(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function $m(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Hd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Dae(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>e.end.character)return Nu.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.lineNu.After}function ZPe(t,e,r=pT){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return FD(t,e)}}function BD(t,e){if(t){let r=Mae(t,!0);if(r&&ID(r,e))return r;if(Gv(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(ID(a,e))return a}}}}function ID(t,e){return Jh(t)&&e.includes(t.tokenType.name)}function FD(t,e){if(Jh(t))return t;if(io(t)){let r=Rae(t,e,!1);if(r)return FD(r,e)}}function Nae(t,e){if(Jh(t))return t;if(io(t)){let r=Rae(t,e,!0);if(r)return Nae(r,e)}}function Rae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function Mae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function JPe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Yo();Rs();o(Ud,"streamCst");o(QPe,"flattenCst");o(OD,"isChildNode");o($m,"tokenToRange");o(Hd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside"})(Nu||(Nu={}));o(Dae,"compareRange");o(PD,"inRange");pT=/^[\w\p{L}]$/u;o(ZPe,"findDeclarationNodeAtOffset");o(BD,"findCommentNode");o(ID,"isCommentNode");o(FD,"findLeafNodeAtOffset");o(Nae,"findLeafNodeBeforeOffset");o(Rae,"binarySearch");o(Mae,"getPreviousNode");o(JPe,"getNextNode");o(eBe,"getStartlineNode");o(tBe,"getInteriorNodes");o(rBe,"getCommonParent");o(Lae,"getParentChain")});function ef(t){throw new Error("Error! The input value was not handled.")}var Wd,gT=M(()=>{"use strict";Wd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(ef,"assertUnreachable")});var Yv={};vr(Yv,{AbstractElement:()=>GD,AbstractRule:()=>Vv,AbstractType:()=>Uv,Action:()=>pN,Alternatives:()=>mN,ArrayLiteral:()=>$D,ArrayType:()=>VD,Assignment:()=>gN,BooleanLiteral:()=>HD,CharacterRange:()=>yN,Condition:()=>yT,Conjunction:()=>YD,CrossReference:()=>xN,Disjunction:()=>XD,EndOfFile:()=>bN,Grammar:()=>KD,GrammarImport:()=>Oae,Group:()=>TN,InferredType:()=>QD,Interface:()=>ZD,Keyword:()=>kN,LangiumGrammarAstReflection:()=>Vm,LangiumGrammarTerminals:()=>nBe,NamedArgument:()=>Pae,NegatedToken:()=>EN,Negation:()=>JD,NumberLiteral:()=>tN,Parameter:()=>rN,ParameterReference:()=>nN,ParserRule:()=>aN,ReferenceType:()=>sN,RegexToken:()=>CN,ReturnType:()=>Bae,RuleCall:()=>_N,SimpleType:()=>cN,StringLiteral:()=>uN,TerminalAlternatives:()=>LN,TerminalGroup:()=>NN,TerminalRule:()=>xT,TerminalRuleCall:()=>MN,Type:()=>hN,TypeAttribute:()=>Fae,TypeDefinition:()=>zD,UnionType:()=>fN,UnorderedGroup:()=>IN,UntilToken:()=>ON,ValueLiteral:()=>vT,Wildcard:()=>BN,isAbstractElement:()=>Hv,isAbstractRule:()=>iBe,isAbstractType:()=>aBe,isAction:()=>Ru,isAlternatives:()=>kT,isArrayLiteral:()=>uBe,isArrayType:()=>UD,isAssignment:()=>Il,isBooleanLiteral:()=>WD,isCharacterRange:()=>vN,isCondition:()=>sBe,isConjunction:()=>qD,isCrossReference:()=>Yd,isDisjunction:()=>jD,isEndOfFile:()=>wN,isFeatureName:()=>oBe,isGrammar:()=>hBe,isGrammarImport:()=>fBe,isGroup:()=>tf,isInferredType:()=>bT,isInterface:()=>wT,isKeyword:()=>Xo,isNamedArgument:()=>dBe,isNegatedToken:()=>SN,isNegation:()=>eN,isNumberLiteral:()=>pBe,isParameter:()=>mBe,isParameterReference:()=>iN,isParserRule:()=>Ma,isPrimitiveType:()=>Iae,isReferenceType:()=>oN,isRegexToken:()=>AN,isReturnType:()=>lN,isRuleCall:()=>Ol,isSimpleType:()=>TT,isStringLiteral:()=>gBe,isTerminalAlternatives:()=>DN,isTerminalGroup:()=>RN,isTerminalRule:()=>qo,isTerminalRuleCall:()=>ET,isType:()=>Wv,isTypeAttribute:()=>yBe,isTypeDefinition:()=>lBe,isUnionType:()=>dN,isUnorderedGroup:()=>ST,isUntilToken:()=>PN,isValueLiteral:()=>cBe,isWildcard:()=>FN,reflection:()=>lr});function iBe(t){return lr.isInstance(t,Vv)}function aBe(t){return lr.isInstance(t,Uv)}function sBe(t){return lr.isInstance(t,yT)}function oBe(t){return Iae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Iae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function lBe(t){return lr.isInstance(t,zD)}function cBe(t){return lr.isInstance(t,vT)}function Hv(t){return lr.isInstance(t,GD)}function uBe(t){return lr.isInstance(t,$D)}function UD(t){return lr.isInstance(t,VD)}function WD(t){return lr.isInstance(t,HD)}function qD(t){return lr.isInstance(t,YD)}function jD(t){return lr.isInstance(t,XD)}function hBe(t){return lr.isInstance(t,KD)}function fBe(t){return lr.isInstance(t,Oae)}function bT(t){return lr.isInstance(t,QD)}function wT(t){return lr.isInstance(t,ZD)}function dBe(t){return lr.isInstance(t,Pae)}function eN(t){return lr.isInstance(t,JD)}function pBe(t){return lr.isInstance(t,tN)}function mBe(t){return lr.isInstance(t,rN)}function iN(t){return lr.isInstance(t,nN)}function Ma(t){return lr.isInstance(t,aN)}function oN(t){return lr.isInstance(t,sN)}function lN(t){return lr.isInstance(t,Bae)}function TT(t){return lr.isInstance(t,cN)}function gBe(t){return lr.isInstance(t,uN)}function qo(t){return lr.isInstance(t,xT)}function Wv(t){return lr.isInstance(t,hN)}function yBe(t){return lr.isInstance(t,Fae)}function dN(t){return lr.isInstance(t,fN)}function Ru(t){return lr.isInstance(t,pN)}function kT(t){return lr.isInstance(t,mN)}function Il(t){return lr.isInstance(t,gN)}function vN(t){return lr.isInstance(t,yN)}function Yd(t){return lr.isInstance(t,xN)}function wN(t){return lr.isInstance(t,bN)}function tf(t){return lr.isInstance(t,TN)}function Xo(t){return lr.isInstance(t,kN)}function SN(t){return lr.isInstance(t,EN)}function AN(t){return lr.isInstance(t,CN)}function Ol(t){return lr.isInstance(t,_N)}function DN(t){return lr.isInstance(t,LN)}function RN(t){return lr.isInstance(t,NN)}function ET(t){return lr.isInstance(t,MN)}function ST(t){return lr.isInstance(t,IN)}function PN(t){return lr.isInstance(t,ON)}function FN(t){return lr.isInstance(t,BN)}var nBe,Vv,Uv,yT,zD,vT,GD,$D,VD,HD,YD,XD,KD,Oae,QD,ZD,Pae,JD,tN,rN,nN,aN,sN,Bae,cN,uN,xT,hN,Fae,fN,pN,mN,gN,yN,xN,bN,TN,kN,EN,CN,_N,LN,NN,MN,IN,ON,BN,Vm,lr,Ac=M(()=>{"use strict";Yo();nBe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Vv="AbstractRule";o(iBe,"isAbstractRule");Uv="AbstractType";o(aBe,"isAbstractType");yT="Condition";o(sBe,"isCondition");o(oBe,"isFeatureName");o(Iae,"isPrimitiveType");zD="TypeDefinition";o(lBe,"isTypeDefinition");vT="ValueLiteral";o(cBe,"isValueLiteral");GD="AbstractElement";o(Hv,"isAbstractElement");$D="ArrayLiteral";o(uBe,"isArrayLiteral");VD="ArrayType";o(UD,"isArrayType");HD="BooleanLiteral";o(WD,"isBooleanLiteral");YD="Conjunction";o(qD,"isConjunction");XD="Disjunction";o(jD,"isDisjunction");KD="Grammar";o(hBe,"isGrammar");Oae="GrammarImport";o(fBe,"isGrammarImport");QD="InferredType";o(bT,"isInferredType");ZD="Interface";o(wT,"isInterface");Pae="NamedArgument";o(dBe,"isNamedArgument");JD="Negation";o(eN,"isNegation");tN="NumberLiteral";o(pBe,"isNumberLiteral");rN="Parameter";o(mBe,"isParameter");nN="ParameterReference";o(iN,"isParameterReference");aN="ParserRule";o(Ma,"isParserRule");sN="ReferenceType";o(oN,"isReferenceType");Bae="ReturnType";o(lN,"isReturnType");cN="SimpleType";o(TT,"isSimpleType");uN="StringLiteral";o(gBe,"isStringLiteral");xT="TerminalRule";o(qo,"isTerminalRule");hN="Type";o(Wv,"isType");Fae="TypeAttribute";o(yBe,"isTypeAttribute");fN="UnionType";o(dN,"isUnionType");pN="Action";o(Ru,"isAction");mN="Alternatives";o(kT,"isAlternatives");gN="Assignment";o(Il,"isAssignment");yN="CharacterRange";o(vN,"isCharacterRange");xN="CrossReference";o(Yd,"isCrossReference");bN="EndOfFile";o(wN,"isEndOfFile");TN="Group";o(tf,"isGroup");kN="Keyword";o(Xo,"isKeyword");EN="NegatedToken";o(SN,"isNegatedToken");CN="RegexToken";o(AN,"isRegexToken");_N="RuleCall";o(Ol,"isRuleCall");LN="TerminalAlternatives";o(DN,"isTerminalAlternatives");NN="TerminalGroup";o(RN,"isTerminalGroup");MN="TerminalRuleCall";o(ET,"isTerminalRuleCall");IN="UnorderedGroup";o(ST,"isUnorderedGroup");ON="UntilToken";o(PN,"isUntilToken");BN="Wildcard";o(FN,"isWildcard");Vm=class extends $d{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return["AbstractElement","AbstractRule","AbstractType","Action","Alternatives","ArrayLiteral","ArrayType","Assignment","BooleanLiteral","CharacterRange","Condition","Conjunction","CrossReference","Disjunction","EndOfFile","Grammar","GrammarImport","Group","InferredType","Interface","Keyword","NamedArgument","NegatedToken","Negation","NumberLiteral","Parameter","ParameterReference","ParserRule","ReferenceType","RegexToken","ReturnType","RuleCall","SimpleType","StringLiteral","TerminalAlternatives","TerminalGroup","TerminalRule","TerminalRuleCall","Type","TypeAttribute","TypeDefinition","UnionType","UnorderedGroup","UntilToken","ValueLiteral","Wildcard"]}computeIsSubtype(e,r){switch(e){case pN:case mN:case gN:case yN:case xN:case bN:case TN:case kN:case EN:case CN:case _N:case LN:case NN:case MN:case IN:case ON:case BN:return this.isSubtype(GD,r);case $D:case tN:case uN:return this.isSubtype(vT,r);case VD:case sN:case cN:case fN:return this.isSubtype(zD,r);case HD:return this.isSubtype(yT,r)||this.isSubtype(vT,r);case YD:case XD:case JD:case nN:return this.isSubtype(yT,r);case QD:case ZD:case hN:return this.isSubtype(Uv,r);case aN:return this.isSubtype(Vv,r)||this.isSubtype(Uv,r);case xT:return this.isSubtype(Vv,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Uv;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Vv;case"Grammar:usedGrammars":return KD;case"NamedArgument:parameter":case"ParameterReference:parameter":return rN;case"TerminalRuleCall:rule":return xT;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"AbstractElement":return{name:"AbstractElement",properties:[{name:"cardinality"},{name:"lookahead"}]};case"ArrayLiteral":return{name:"ArrayLiteral",properties:[{name:"elements",defaultValue:[]}]};case"ArrayType":return{name:"ArrayType",properties:[{name:"elementType"}]};case"BooleanLiteral":return{name:"BooleanLiteral",properties:[{name:"true",defaultValue:!1}]};case"Conjunction":return{name:"Conjunction",properties:[{name:"left"},{name:"right"}]};case"Disjunction":return{name:"Disjunction",properties:[{name:"left"},{name:"right"}]};case"Grammar":return{name:"Grammar",properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case"GrammarImport":return{name:"GrammarImport",properties:[{name:"path"}]};case"InferredType":return{name:"InferredType",properties:[{name:"name"}]};case"Interface":return{name:"Interface",properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case"NamedArgument":return{name:"NamedArgument",properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case"Negation":return{name:"Negation",properties:[{name:"value"}]};case"NumberLiteral":return{name:"NumberLiteral",properties:[{name:"value"}]};case"Parameter":return{name:"Parameter",properties:[{name:"name"}]};case"ParameterReference":return{name:"ParameterReference",properties:[{name:"parameter"}]};case"ParserRule":return{name:"ParserRule",properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case"ReferenceType":return{name:"ReferenceType",properties:[{name:"referenceType"}]};case"ReturnType":return{name:"ReturnType",properties:[{name:"name"}]};case"SimpleType":return{name:"SimpleType",properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case"StringLiteral":return{name:"StringLiteral",properties:[{name:"value"}]};case"TerminalRule":return{name:"TerminalRule",properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case"Type":return{name:"Type",properties:[{name:"name"},{name:"type"}]};case"TypeAttribute":return{name:"TypeAttribute",properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case"UnionType":return{name:"UnionType",properties:[{name:"types",defaultValue:[]}]};case"Action":return{name:"Action",properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case"Alternatives":return{name:"Alternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"Assignment":return{name:"Assignment",properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case"CharacterRange":return{name:"CharacterRange",properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case"CrossReference":return{name:"CrossReference",properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case"EndOfFile":return{name:"EndOfFile",properties:[{name:"cardinality"},{name:"lookahead"}]};case"Group":return{name:"Group",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case"Keyword":return{name:"Keyword",properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case"NegatedToken":return{name:"NegatedToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"RegexToken":return{name:"RegexToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case"RuleCall":return{name:"RuleCall",properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"TerminalAlternatives":return{name:"TerminalAlternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalGroup":return{name:"TerminalGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalRuleCall":return{name:"TerminalRuleCall",properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"UnorderedGroup":return{name:"UnorderedGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"UntilToken":return{name:"UntilToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"Wildcard":return{name:"Wildcard",properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new Vm});var AT={};vr(AT,{assignMandatoryProperties:()=>$N,copyAstNode:()=>GN,findLocalReferences:()=>xBe,findRootNode:()=>zae,getContainerOfType:()=>qd,getDocument:()=>Fi,hasContainerOfType:()=>vBe,linkContentToContainer:()=>CT,streamAllContents:()=>_c,streamAst:()=>jo,streamContents:()=>qv,streamReferences:()=>Um});function CT(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ei(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ei(r)&&(r.$container=t,r.$containerProperty=e))}function qd(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function vBe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Fi(t){let r=zae(t).$document;if(!r)throw new Error("AST node has no document.");return r}function zae(t){for(;t.$container;)t=t.$container;return t}function qv(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexqv(r,e))}function jo(t,e){if(t){if(e?.range&&!zN(t,e.range))return new Cc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Cc(t,r=>qv(r,e),{includeRoot:!0})}function zN(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?PD(n,e):!1}function Um(t){return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{Um(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),tn(r)}function $N(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=Gae(i.defaultValue))}function Gae(t){return Array.isArray(t)?[...t.map(Gae)]:t}function GN(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ei(i))r[n]=GN(i,e);else if(ma(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ei(s)?a.push(GN(s,e)):ma(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return CT(r),r}var es=M(()=>{"use strict";Yo();Rs();Ml();o(CT,"linkContentToContainer");o(qd,"getContainerOfType");o(vBe,"hasContainerOfType");o(Fi,"getDocument");o(zae,"findRootNode");o(qv,"streamContents");o(_c,"streamAllContents");o(jo,"streamAst");o(zN,"isAstNodeInRange");o(Um,"streamReferences");o(xBe,"findLocalReferences");o($N,"assignMandatoryProperties");o(Gae,"copyDefaultValue");o(GN,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function _T(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function Hm(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function Xd(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function Xv(){throw Error("Internal Error - Should never get here!")}function VN(t){return t.type==="Character"}var UN=M(()=>{"use strict";o(ar,"cc");o(_T,"insertToSet");o(Hm,"addFlag");o(Xd,"ASSERT_EXISTS");o(Xv,"ASSERT_NEVER_REACH_HERE");o(VN,"isCharacter")});var jv,Kv,HN,$ae=M(()=>{"use strict";UN();jv=[];for(let t=ar("0");t<=ar("9");t++)jv.push(t);Kv=[ar("_")].concat(jv);for(let t=ar("a");t<=ar("z");t++)Kv.push(t);for(let t=ar("A");t<=ar("Z");t++)Kv.push(t);HN=[ar(" "),ar("\f"),ar(` +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var bBe,LT,wBe,jd,Vae=M(()=>{"use strict";UN();$ae();bBe=/[0-9a-fA-F]/,LT=/[0-9]/,wBe=/[1-9]/,jd=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":Hm(n,"global");break;case"i":Hm(n,"ignoreCase");break;case"m":Hm(n,"multiLine");break;case"u":Hm(n,"unicode");break;case"y":Hm(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}Xd(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return Xv()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;Xd(r);break}if(!(e===!0&&r===void 0)&&Xd(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),Xd(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):Xv()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=jv;break;case"D":e=jv,r=!0;break;case"s":e=HN;break;case"S":e=HN,r=!0;break;case"w":e=Kv;break;case"W":e=Kv,r=!0;break}return Xd(e)?{type:"Set",value:e,complement:r}:Xv()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return Xd(e)?{type:"Character",value:e}:Xv()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(VN(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(VN(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Lc,Uae=M(()=>{"use strict";Lc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var Qv=M(()=>{"use strict";Vae();Uae()});var NT={};vr(NT,{NEWLINE_REGEXP:()=>YN,escapeRegExp:()=>Qd,getCaseInsensitivePattern:()=>XN,getTerminalParts:()=>TBe,isMultilineComment:()=>qN,isWhitespace:()=>DT,partialMatches:()=>jN,partialRegExp:()=>Wae});function TBe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=Hae.pattern(t),r=[];for(let n of e.value.value)Kd.reset(t),Kd.visit(n),r.push({start:Kd.startRegexp,end:Kd.endRegex});return r}catch{return[]}}function qN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),Kd.reset(t),Kd.visit(Hae.pattern(t)),Kd.multiline}catch{return!1}}function DT(t){return(typeof t=="string"?new RegExp(t):t).test(" ")}function Qd(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function XN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:Qd(e)).join("")}function jN(t,e){let r=Wae(t),n=e.match(r);return!!n&&n[0].length>0}function Wae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var YN,Hae,WN,Kd,Wm=M(()=>{"use strict";Qv();YN=/\r?\n/gm,Hae=new jd,WN=class extends Lc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=Qd(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},Kd=new WN;o(TBe,"getTerminalParts");o(qN,"isMultilineComment");o(DT,"isWhitespace");o(Qd,"escapeRegExp");o(XN,"getCaseInsensitivePattern");o(jN,"partialMatches");o(Wae,"partialRegExp")});var MT={};vr(MT,{findAssignment:()=>iR,findNameAssignment:()=>RT,findNodeForKeyword:()=>rR,findNodeForProperty:()=>Jv,findNodesForKeyword:()=>kBe,findNodesForKeywordInternal:()=>nR,findNodesForProperty:()=>eR,getActionAtElement:()=>Kae,getActionType:()=>Zae,getAllReachableRules:()=>Zv,getCrossReferenceTerminal:()=>ZN,getEntryRule:()=>Yae,getExplicitRuleType:()=>aR,getHiddenRules:()=>qae,getRuleType:()=>sR,getTypeName:()=>Zd,isArrayCardinality:()=>SBe,isArrayOperator:()=>CBe,isCommentTerminal:()=>JN,isDataType:()=>ABe,isDataTypeRule:()=>e2,isOptionalCardinality:()=>EBe,terminalRegex:()=>Ym});function Yae(t){return t.rules.find(e=>Ma(e)&&e.entry)}function qae(t){return t.rules.filter(e=>qo(e)&&e.hidden)}function Zv(t,e){let r=new Set,n=Yae(t);if(!n)return new Set(t.rules);let i=[n].concat(qae(t));for(let s of i)Xae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||qo(s)&&s.hidden)&&a.add(s);return a}function Xae(t,e,r){e.add(t.name),_c(t).forEach(n=>{if(Ol(n)||r&&ET(n)){let i=n.rule.ref;i&&!e.has(i.name)&&Xae(i,e,r)}})}function ZN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=RT(t.type.ref);return e?.terminal}}function JN(t){return t.hidden&&!Ym(t).test(" ")}function eR(t,e){return!t||!e?[]:tR(t,e,t.astNode,!0)}function Jv(t,e,r){if(!t||!e)return;let n=tR(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function tR(t,e,r,n){if(!n){let i=qd(t.grammarSource,Il);if(i&&i.feature===e)return[t]}return io(t)&&t.astNode===r?t.content.flatMap(i=>tR(i,e,r,!1)):[]}function kBe(t,e){return t?nR(t,e,t?.astNode):[]}function rR(t,e,r){if(!t)return;let n=nR(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function nR(t,e,r){if(t.astNode!==r)return[];if(Xo(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Ud(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Xo(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function iR(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=qd(t.grammarSource,Il);if(n)return n;t=t.container}}function RT(t){let e=t;return bT(e)&&(Ru(e.$container)?e=e.$container.$container:Ma(e.$container)?e=e.$container:ef(e.$container)),jae(t,e,new Map)}function jae(t,e,r){var n;function i(a,s){let l;return qd(a,Il)||(l=jae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of _c(e)){if(Il(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Ol(a)&&Ma(a.rule.ref))return i(a,a.rule.ref);if(TT(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Kae(t){let e=t.$container;if(tf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Ru(a))return a;{let s=_c(r[i]).find(Ru);if(s)return s}}}if(Hv(e))return Kae(e)}function EBe(t,e){return t==="?"||t==="*"||tf(e)&&!!e.guardCondition}function SBe(t){return t==="*"||t==="+"}function CBe(t){return t==="+="}function e2(t){return Qae(t,new Set)}function Qae(t,e){if(e.has(t))return!0;e.add(t);for(let r of _c(t))if(Ol(r)){if(!r.rule.ref||Ma(r.rule.ref)&&!Qae(r.rule.ref,e))return!1}else{if(Il(r))return!1;if(Ru(r))return!1}return!!t.definition}function ABe(t){return QN(t.type,new Set)}function QN(t,e){if(e.has(t))return!0;if(e.add(t),UD(t))return!1;if(oN(t))return!1;if(dN(t))return t.types.every(r=>QN(r,e));if(TT(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return Wv(r)?QN(r.type,e):!1}else return!1}else return!1}function aR(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Ma(e))return e.name;if(wT(e)||Wv(e))return e.name}}}function Zd(t){var e;if(Ma(t))return e2(t)?t.name:(e=aR(t))!==null&&e!==void 0?e:t.name;if(wT(t)||Wv(t)||lN(t))return t.name;if(Ru(t)){let r=Zae(t);if(r)return r}else if(bT(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Zae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return Zd(t.type.ref)}function sR(t){var e,r,n;return qo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":e2(t)?t.name:(n=aR(t))!==null&&n!==void 0?n:t.name}function Ym(t){let e={s:!1,i:!1,u:!1},r=qm(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function qm(t,e){if(DN(t))return _Be(t);if(RN(t))return LBe(t);if(vN(t))return RBe(t);if(ET(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Mu(qm(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(SN(t))return NBe(t);if(PN(t))return DBe(t);if(AN(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Mu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(FN(t))return Mu(oR,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function _Be(t){return Mu(t.elements.map(e=>qm(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function LBe(t){return Mu(t.elements.map(e=>qm(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function DBe(t){return Mu(`${oR}*?${qm(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function NBe(t){return Mu(`(?!${qm(t.terminal)})${oR}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function RBe(t){return t.right?Mu(`[${KN(t.left)}-${KN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Mu(KN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function KN(t){return Qd(t.value)}function Mu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var oR,Pl=M(()=>{"use strict";gT();Ac();Yo();es();Ml();Wm();o(Yae,"getEntryRule");o(qae,"getHiddenRules");o(Zv,"getAllReachableRules");o(Xae,"ruleDfs");o(ZN,"getCrossReferenceTerminal");o(JN,"isCommentTerminal");o(eR,"findNodesForProperty");o(Jv,"findNodeForProperty");o(tR,"findNodesForPropertyInternal");o(kBe,"findNodesForKeyword");o(rR,"findNodeForKeyword");o(nR,"findNodesForKeywordInternal");o(iR,"findAssignment");o(RT,"findNameAssignment");o(jae,"findNameAssignmentInternal");o(Kae,"getActionAtElement");o(EBe,"isOptionalCardinality");o(SBe,"isArrayCardinality");o(CBe,"isArrayOperator");o(e2,"isDataTypeRule");o(Qae,"isDataTypeRuleInternal");o(ABe,"isDataType");o(QN,"isDataTypeInternal");o(aR,"getExplicitRuleType");o(Zd,"getTypeName");o(Zae,"getActionType");o(sR,"getRuleType");o(Ym,"terminalRegex");oR=/[\s\S]/.source;o(qm,"abstractElementToRegex");o(_Be,"terminalAlternativesToRegex");o(LBe,"terminalGroupToRegex");o(DBe,"untilTokenToRegex");o(NBe,"negateTokenToRegex");o(RBe,"characterRangeToRegex");o(KN,"keywordToRegex");o(Mu,"withCardinality")});function lR(t){let e=[],r=t.Grammar;for(let n of r.rules)qo(n)&&JN(n)&&qN(Ym(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:pT}}var cR=M(()=>{"use strict";Ml();Pl();Wm();Ac();o(lR,"createGrammarConfig")});var uR=M(()=>{"use strict"});function Xm(t){console&&console.error&&console.error(`Error: ${t}`)}function t2(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Jae=M(()=>{"use strict";o(Xm,"PRINT_ERROR");o(t2,"PRINT_WARNING")});function r2(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var ese=M(()=>{"use strict";o(r2,"timer")});function n2(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var tse=M(()=>{"use strict";o(n2,"toFastProperties")});var jm=M(()=>{"use strict";Jae();ese();tse()});function MBe(t){return IBe(t)?t.LABEL:t.name}function IBe(t){return gi(t.LABEL)&&t.LABEL!==""}function IT(t){return Je(t,Km)}function Km(t){function e(r){return Je(r,Km)}if(o(e,"convertDefinition"),t instanceof nn){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return gi(t.label)&&(r.label=t.label),r}else{if(t instanceof Cn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof an)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof An)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof _n)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Km(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof vn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Km(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Lr)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof xn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:MBe(t.terminalType),idx:t.idx};gi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Vo(n)?n.source:n),r}else{if(t instanceof ts)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var so,nn,ts,Cn,an,An,_n,Lr,vn,xn,kr,OT=M(()=>{"use strict";Ht();o(MBe,"tokenLabel");o(IBe,"hasTokenLabel");so=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ce(this.definition,r=>{r.accept(e)})}},nn=class extends so{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},ts=class extends so{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ha(this,Ds(e,r=>r!==void 0))}},Cn=class extends so{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ha(this,Ds(e,r=>r!==void 0))}},an=class extends so{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}},An=class extends so{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}},_n=class extends so{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}},Lr=class extends so{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}},vn=class extends so{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ha(this,Ds(e,r=>r!==void 0))}},xn=class extends so{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ha(this,Ds(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ha(this,Ds(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(IT,"serializeGrammar");o(Km,"serializeProduction")});var rs,rse=M(()=>{"use strict";OT();rs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case nn:return this.visitNonTerminal(r);case Cn:return this.visitAlternative(r);case an:return this.visitOption(r);case An:return this.visitRepetitionMandatory(r);case _n:return this.visitRepetitionMandatoryWithSeparator(r);case vn:return this.visitRepetitionWithSeparator(r);case Lr:return this.visitRepetition(r);case xn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case ts:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function hR(t){return t instanceof Cn||t instanceof an||t instanceof Lr||t instanceof An||t instanceof _n||t instanceof vn||t instanceof kr||t instanceof ts}function Jd(t,e=[]){return t instanceof an||t instanceof Lr||t instanceof vn?!0:t instanceof xn?Rv(t.definition,n=>Jd(n,e)):t instanceof nn&&Hn(e,t)?!1:t instanceof so?(t instanceof nn&&e.push(t),Ra(t.definition,n=>Jd(n,e))):!1}function fR(t){return t instanceof xn}function Ms(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof xn)return"OR";if(t instanceof An)return"AT_LEAST_ONE";if(t instanceof _n)return"AT_LEAST_ONE_SEP";if(t instanceof vn)return"MANY_SEP";if(t instanceof Lr)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var nse=M(()=>{"use strict";Ht();OT();o(hR,"isSequenceProd");o(Jd,"isOptionalProd");o(fR,"isBranchingProd");o(Ms,"getProductionDslName")});var ns=M(()=>{"use strict";OT();rse();nse()});function ise(t,e,r){return[new an({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Iu,PT=M(()=>{"use strict";Ht();ns();Iu=class{static{o(this,"RestWalker")}walk(e,r=[]){Ce(e.definition,(n,i)=>{let a=mi(e.definition,i+1);if(n instanceof nn)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Cn)this.walkFlat(n,a,r);else if(n instanceof an)this.walkOption(n,a,r);else if(n instanceof An)this.walkAtLeastOne(n,a,r);else if(n instanceof _n)this.walkAtLeastOneSep(n,a,r);else if(n instanceof vn)this.walkManySep(n,a,r);else if(n instanceof Lr)this.walkMany(n,a,r);else if(n instanceof xn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=ise(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=ise(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ce(e.definition,a=>{let s=new Cn({definition:[a]});this.walk(s,i)})}};o(ise,"restForRepetitionWithSeparator")});function e0(t){if(t instanceof nn)return e0(t.referencedRule);if(t instanceof kr)return BBe(t);if(hR(t))return OBe(t);if(fR(t))return PBe(t);throw Error("non exhaustive match")}function OBe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=Jd(a),e=e.concat(e0(a)),n=n+1,i=r.length>n;return Om(e)}function PBe(t){let e=Je(t.definition,r=>e0(r));return Om(Wr(e))}function BBe(t){return[t.terminalType]}var dR=M(()=>{"use strict";Ht();ns();o(e0,"first");o(OBe,"firstForSequence");o(PBe,"firstForBranching");o(BBe,"firstForTerminal")});var BT,pR=M(()=>{"use strict";BT="_~IN~_"});function ase(t){let e={};return Ce(t,r=>{let n=new mR(r).startWalking();ha(e,n)}),e}function FBe(t,e){return t.name+e+BT}var mR,sse=M(()=>{"use strict";PT();dR();Ht();pR();ns();mR=class extends Iu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=FBe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Cn({definition:a}),l=e0(s);this.follows[i]=l}};o(ase,"computeAllProdsFollows");o(FBe,"buildBetweenProdsFollowPrefix")});function Qm(t){let e=t.toString();if(FT.hasOwnProperty(e))return FT[e];{let r=zBe.pattern(e);return FT[e]=r,r}}function ose(){FT={}}var FT,zBe,zT=M(()=>{"use strict";Qv();FT={},zBe=new jd;o(Qm,"getRegExpAst");o(ose,"clearRegExpParserCache")});function use(t,e=!1){try{let r=Qm(t);return gR(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===cse)e&&t2(`${i2} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Xm(`${i2} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function gR(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")GT(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)GT(f,e,r);else{for(let f=h.from;f<=h.to&&f=Zm){let f=h.from>=Zm?h.from:Zm,d=h.to,p=Dc(f),m=Dc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":gR(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&yR(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function GT(t,e,r){let n=Dc(t);e[n]=n,r===!0&&GBe(t,e)}function GBe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Dc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Dc(i.charCodeAt(0));e[a]=a}}}function lse(t,e){return Za(t.value,r=>{if(typeof r=="number")return Hn(e,r);{let n=r;return Za(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function yR(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Mt(t.value)?Ra(t.value,yR):yR(t.value):!1}function $T(t,e){if(e instanceof RegExp){let r=Qm(e),n=new vR(t);return n.visit(r),n.found}else return Za(e,r=>Hn(t,r.charCodeAt(0)))!==void 0}var cse,i2,vR,hse=M(()=>{"use strict";Qv();Ht();jm();zT();xR();cse="Complement Sets are not supported for first char optimization",i2=`Unable to use "first char" lexer optimizations: +`;o(use,"getOptimizedStartCodesIndices");o(gR,"firstCharOptimizedIndices");o(GT,"addOptimizedIdxToResult");o(GBe,"handleIgnoreCase");o(lse,"findCode");o(yR,"isWholeOptional");vR=class extends Lc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){Hn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?lse(e,this.targetCharCodes)===void 0&&(this.found=!0):lse(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o($T,"canMatchCharCode")});function pse(t,e){e=qh(e,{useSticky:wR,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{iFe()});let n;r("Reject Lexer.NA",()=>{n=jh(t,b=>b[t0]===oi.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[t0];if(Vo(w)){let _=w.source;return _.length===1&&_!=="^"&&_!=="$"&&_!=="."&&!w.ignoreCase?_:_.length===2&&_[0]==="\\"&&!Hn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],_[1])?_[1]:e.useSticky?dse(w):fse(w)}else{if(Ei(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let _=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(_);return e.useSticky?dse(T):fse(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==oi.SKIPPED){if(gi(w))return w;if(dr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Mt(w)?Je(w,T=>jw(n,T)):[jw(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>It(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Tse(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>It(w,"LINE_BREAKS")?!!w.LINE_BREAKS:wse(w,b)===!1&&$T(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,xse),m=Je(a,rFe),g=qr(n,(b,w)=>{let _=w.GROUP;return gi(_)&&_!==oi.SKIPPED&&(b[_]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=qr(n,(b,w,_)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Dc(T);bR(b,E,y[_])}else if(Mt(w.START_CHARS_HINT)){let T;Ce(w.START_CHARS_HINT,E=>{let L=typeof E=="string"?E.charCodeAt(0):E,C=Dc(L);T!==C&&(T=C,bR(b,C,y[_]))})}else if(Vo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Xm(`${i2} Unable to analyze < ${w.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=use(w.PATTERN,e.ensureOptimizations);cr(T)&&(v=!1),Ce(T,E=>{bR(b,E,y[_])})}else e.ensureOptimizations&&Xm(`${i2} TokenType: <${w.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function mse(t,e){let r=[],n=VBe(t);r=r.concat(n.errors);let i=UBe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat($Be(a)),r=r.concat(QBe(a)),r=r.concat(ZBe(a,e)),r=r.concat(JBe(a)),r}function $Be(t){let e=[],r=Yr(t,n=>Vo(n[t0]));return e=e.concat(WBe(r)),e=e.concat(XBe(r)),e=e.concat(jBe(r)),e=e.concat(KBe(r)),e=e.concat(YBe(r)),e}function VBe(t){let e=Yr(t,i=>!It(i,t0)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Wn.MISSING_PATTERN,tokenTypes:[i]})),n=Xh(t,e);return{errors:r,valid:n}}function UBe(t){let e=Yr(t,i=>{let a=i[t0];return!Vo(a)&&!Ei(a)&&!It(a,"exec")&&!gi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Wn.INVALID_PATTERN,tokenTypes:[i]})),n=Xh(t,e);return{errors:r,valid:n}}function WBe(t){class e extends Lc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Qm(a),l=new e;return l.visit(s),l.found}catch{return HBe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Wn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function YBe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Wn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function XBe(t){class e extends Lc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Qm(a),l=new e;return l.visit(s),l.found}catch{return qBe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Wn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function jBe(t){let e=Yr(t,n=>{let i=n[t0];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Wn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function KBe(t){let e=[],r=Je(t,a=>qr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!Hn(e,l)&&l.PATTERN!==oi.NA&&(e.push(l),s.push(l)),s),[]));r=Tc(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ra(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Wn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function QBe(t){let e=Yr(t,n=>{if(!It(n,"GROUP"))return!1;let i=n.GROUP;return i!==oi.SKIPPED&&i!==oi.NA&&!gi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Wn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function ZBe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!Hn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Wn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function JBe(t){let e=[],r=qr(t,(n,i,a)=>{let s=i.PATTERN;return s===oi.NA||(gi(s)?n.push({str:s,idx:a,tokenType:i}):Vo(s)&&tFe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ce(t,(n,i)=>{Ce(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Wn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function eFe(t,e){if(Vo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Ei(e))return e(t,0,[],{});if(It(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function tFe(t){return Za([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function fse(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function dse(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function gse(t,e,r){let n=[];return It(t,Jm)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Jm+`> property in its definition +`,type:Wn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),It(t,VT)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+VT+`> property in its definition +`,type:Wn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),It(t,VT)&&It(t,Jm)&&!It(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${Jm}: <${t.defaultMode}>which does not exist +`,type:Wn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),It(t,VT)&&Ce(t.modes,(i,a)=>{Ce(i,(s,l)=>{if(dr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:Wn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(It(s,"LONGER_ALT")){let u=Mt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ce(u,h=>{!dr(h)&&!Hn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:Wn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function yse(t,e,r){let n=[],i=!1,a=Tc(Wr(br(t.modes))),s=jh(a,u=>u[t0]===oi.NA),l=Tse(r);return e&&Ce(s,u=>{let h=wse(u,l);if(h!==!1){let d={message:nFe(u,h),type:h.issue,tokenType:u};n.push(d)}else It(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):$T(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:Wn.NO_LINE_BREAKS_FLAGS}),n}function vse(t){let e={},r=zr(t);return Ce(r,n=>{let i=t[n];if(Mt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function xse(t){let e=t.PATTERN;if(Vo(e))return!1;if(Ei(e))return!0;if(It(e,"exec"))return!0;if(gi(e))return!1;throw Error("non exhaustive match")}function rFe(t){return gi(t)&&t.length===1?t.charCodeAt(0):!1}function wse(t,e){if(It(t,"LINE_BREAKS"))return!1;if(Vo(t.PATTERN)){try{$T(e,t.PATTERN)}catch(r){return{issue:Wn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(gi(t.PATTERN))return!1;if(xse(t))return{issue:Wn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function nFe(t,e){if(e.issue===Wn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Wn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Tse(t){return Je(t,r=>gi(r)?r.charCodeAt(0):r)}function bR(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Dc(t){return t255?255+~~(t/255):t}}var t0,Jm,VT,wR,HBe,qBe,bse,Zm,UT,xR=M(()=>{"use strict";Qv();a2();Ht();jm();hse();zT();t0="PATTERN",Jm="defaultMode",VT="modes",wR=typeof new RegExp("(?:)").sticky=="boolean";o(pse,"analyzeTokenTypes");o(mse,"validatePatterns");o($Be,"validateRegExpPattern");o(VBe,"findMissingPatterns");o(UBe,"findInvalidPatterns");HBe=/[^\\][$]/;o(WBe,"findEndOfInputAnchor");o(YBe,"findEmptyMatchRegExps");qBe=/[^\\[][\^]|^\^/;o(XBe,"findStartOfInputAnchor");o(jBe,"findUnsupportedFlags");o(KBe,"findDuplicatePatterns");o(QBe,"findInvalidGroupType");o(ZBe,"findModesThatDoNotExist");o(JBe,"findUnreachablePatterns");o(eFe,"testTokenType");o(tFe,"noMetaChar");o(fse,"addStartOfInput");o(dse,"addStickyFlag");o(gse,"performRuntimeChecks");o(yse,"performWarningRuntimeChecks");o(vse,"cloneEmptyGroups");o(xse,"isCustomPattern");o(rFe,"isShortPattern");bse={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function aFe(t){let e=rn(t),r=t,n=!0;for(;n;){r=Tc(Wr(Je(r,a=>a.CATEGORIES)));let i=Xh(r,e);e=e.concat(i),cr(i)?n=!1:r=i}return e}function sFe(t){Ce(t,e=>{TR(e)||(Sse[kse]=e,e.tokenTypeIdx=kse++),Ese(e)&&!Mt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ese(e)||(e.CATEGORIES=[]),cFe(e)||(e.categoryMatches=[]),uFe(e)||(e.categoryMatchesMap={})})}function oFe(t){Ce(t,e=>{e.categoryMatches=[],Ce(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(Sse[n].tokenTypeIdx)})})}function lFe(t){Ce(t,e=>{Cse([],e)})}function Cse(t,e){Ce(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ce(e.CATEGORIES,r=>{let n=t.concat(e);Hn(n,r)||Cse(n,r)})}function TR(t){return It(t,"tokenTypeIdx")}function Ese(t){return It(t,"CATEGORIES")}function cFe(t){return It(t,"categoryMatches")}function uFe(t){return It(t,"categoryMatchesMap")}function Ase(t){return It(t,"tokenTypeIdx")}var kse,Sse,r0=M(()=>{"use strict";Ht();o(Ou,"tokenStructuredMatcher");o(eg,"tokenStructuredMatcherNoCategories");kse=1,Sse={};o(Pu,"augmentTokenTypes");o(aFe,"expandCategories");o(sFe,"assignTokenDefaultProps");o(oFe,"assignCategoriesTokensProp");o(lFe,"assignCategoriesMapProp");o(Cse,"singleAssignCategoriesToksMap");o(TR,"hasShortKeyProperty");o(Ese,"hasCategoriesProperty");o(cFe,"hasExtendingTokensTypesProperty");o(uFe,"hasExtendingTokensTypesMapProperty");o(Ase,"isTokenType")});var kR,ER=M(()=>{"use strict";kR={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Wn,s2,oi,a2=M(()=>{"use strict";xR();Ht();jm();r0();ER();zT();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Wn||(Wn={}));s2={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:kR,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(s2);oi=class{static{o(this,"Lexer")}constructor(e,r=s2){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=r2(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=ha({},s2,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===s2.lineTerminatorsPattern)this.config.lineTerminatorsPattern=bse;else if(this.config.lineTerminatorCharacters===s2.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Mt(e)?i={modes:{defaultMode:rn(e)},defaultMode:Jm}:(a=!1,i=rn(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(gse(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(yse(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ce(i.modes,(l,u)=>{i.modes[u]=jh(l,h=>dr(h))});let s=zr(i.modes);if(Ce(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(mse(l,s))}),cr(this.lexerDefinitionErrors)){Pu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=pse(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ha({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!cr(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Ce(this.lexerDefinitionWarning,l=>{t2(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(wR?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=Jn,this.match=this.matchWithExec),a&&(this.handleModes=Jn),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=Jn),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=qr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!cr(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{ose()}),this.TRACE_INIT("toFastProperties",()=>{n2(this)})})}tokenize(e,r=this.defaultMode){if(!cr(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,_=w.length,T=0,E=0,L=this.hasCustom?0:Math.floor(e.length/10),C=new Array(L),A=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=vse(this.emptyGroups),R=this.trackStartLines,S=this.config.lineTerminatorsPattern,O=0,N=[],P=[],F=[],B=[];Object.freeze(B);let $;function z(){return N}o(z,"getPossiblePatternsSlow");function W(ee){let J=Dc(ee),H=P[J];return H===void 0?B:H}o(W,"getPossiblePatternsOptimized");let j=o(ee=>{if(F.length===1&&ee.tokenType.PUSH_MODE===void 0){let J=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(ee);A.push({offset:ee.startOffset,line:ee.startLine,column:ee.startColumn,length:ee.image.length,message:J})}else{F.pop();let J=fa(F);N=this.patternIdxToConfig[J],P=this.charCodeToPatternIdxToConfig[J],O=N.length;let H=this.canModeBeOptimized[J]&&this.config.safeMode===!1;P&&H?$=W:$=z}},"pop_mode");function K(ee){F.push(ee),P=this.charCodeToPatternIdxToConfig[ee],N=this.patternIdxToConfig[ee],O=N.length,O=N.length;let J=this.canModeBeOptimized[ee]&&this.config.safeMode===!1;P&&J?$=W:$=z}o(K,"push_mode"),K.call(this,r);let ie,Q=this.config.recoveryEnabled;for(;T<_;){u=null;let ee=w.charCodeAt(T),J=$(ee),H=J.length;for(n=0;nu.length){u=s,h=f,ie=ue;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(C,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),R===!0&&ie.canLineTerminator===!0){let q=0,Z,ae;S.lastIndex=0;do Z=S.test(u),Z===!0&&(ae=S.lastIndex-1,q++);while(Z===!0);q!==0&&(I=I+q,D=d-ae,this.updateTokenEndLineColumnLocation(g,p,ae,q,I,D,d))}this.handleModes(ie,j,K,g)}else{let q=T,Z=I,ae=D,ue=Q===!1;for(;ue===!1&&T<_;)for(e=this.chopInput(e,1),T++,i=0;i{"use strict";Ht();a2();r0();o(Bu,"tokenLabel");o(SR,"hasTokenLabel");hFe="parent",_se="categories",Lse="label",Dse="group",Nse="push_mode",Rse="pop_mode",Mse="longer_alt",Ise="line_breaks",Ose="start_chars_hint";o(HT,"createToken");o(fFe,"createTokenInternal");oo=HT({name:"EOF",pattern:oi.NA});Pu([oo]);o(n0,"createTokenInstance");o(o2,"tokenMatcher")});var Fu,Pse,Bl,tg=M(()=>{"use strict";i0();Ht();ns();Fu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${SR(t)?`--> ${Bu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+ra(e).image+"'";if(n)return a+n+l;{let u=qr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Bu(m)).join(", ")}]`),d=`one of these possible Token sequences: +${Je(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` +but found: '`+ra(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${Je(t,h=>`[${Je(h,f=>Bu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Fu);Pse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},Bl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof nn?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ra(e),a=i.idx,s=Ms(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${n}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Bu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Bu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n},buildEmptyRepetitionError(t){let e=Ms(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Je(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${n} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof ts?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Bse(t,e){let r=new CR(t,e);return r.resolveRefs(),r.errors}var CR,Fse=M(()=>{"use strict";Is();Ht();ns();o(Bse,"resolveGrammar");CR=class extends rs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ce(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:zi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function XT(t,e,r=[]){r=rn(r);let n=[],i=0;function a(l){return l.concat(mi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=XT(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{cr(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:mi(t,i)}),n}function jT(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!cr(d);){let p=d.pop();if(p===s){l&&fa(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(cr(m))continue;let x=m[0];if(x===i){let b={idx:g,def:mi(m),ruleStack:Lu(y),occurrenceStack:Lu(v)};d.push(b)}else if(x instanceof kr)if(g=0;b--){let w=x.definition[b],_={idx:g,def:w.definition.concat(mi(m)),ruleStack:y,occurrenceStack:v};d.push(_),d.push(s)}else if(x instanceof Cn)d.push({idx:g,def:x.definition.concat(mi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof ts)d.push(dFe(x,g,y,v));else throw Error("non exhaustive match")}return f}function dFe(t,e,r,n){let i=rn(r);i.push(t.name);let a=rn(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var AR,WT,rg,YT,l2,qT,c2,u2=M(()=>{"use strict";Ht();dR();PT();ns();AR=class extends Iu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=rn(this.path.ruleStack).reverse(),this.occurrenceStack=rn(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){cr(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},WT=class extends AR{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Cn({definition:i});this.possibleTokTypes=e0(a),this.found=!0}}},rg=class extends Iu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},YT=class extends rg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ra(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},l2=class extends rg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ra(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},qT=class extends rg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ra(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},c2=class extends rg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ra(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(XT,"possiblePathsFrom");o(jT,"nextPossibleTokensAfter");o(dFe,"expandTopLevelRule")});function h2(t){if(t instanceof an||t==="Option")return Yn.OPTION;if(t instanceof Lr||t==="Repetition")return Yn.REPETITION;if(t instanceof An||t==="RepetitionMandatory")return Yn.REPETITION_MANDATORY;if(t instanceof _n||t==="RepetitionMandatoryWithSeparator")return Yn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof vn||t==="RepetitionWithSeparator")return Yn.REPETITION_WITH_SEPARATOR;if(t instanceof xn||t==="Alternation")return Yn.ALTERNATION;throw Error("non exhaustive match")}function QT(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=h2(n);return a===Yn.ALTERNATION?ng(e,r,i):ig(e,r,a,i)}function Gse(t,e,r,n,i,a){let s=ng(t,e,r),l=Yse(s)?eg:Ou;return a(s,n,l,i)}function $se(t,e,r,n,i,a){let s=ig(t,e,i,r),l=Yse(s)?eg:Ou;return a(s[0],l,n)}function Vse(t,e,r,n){let i=t.length,a=Ra(t,s=>Ra(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;uWr(u)),l=qr(s,(u,h,f)=>(Ce(h,d=>{It(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ce(d.categoryMatches,p=>{It(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=Wr(t);if(a.length===1&&cr(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=qr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ce(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aXT([s],1)),n=zse(r.length),i=Je(r,s=>{let l={};return Ce(s,u=>{let h=_R(u.partialPath);Ce(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=zse(l.length);for(let u=0;u{let x=_R(v.partialPath);Ce(x,b=>{i[u][b]=!0})})}}}}return n}function ng(t,e,r,n){let i=new KT(t,Yn.ALTERNATION,n);return e.accept(i),Hse(i.result,r)}function ig(t,e,r,n){let i=new KT(t,r);e.accept(i);let a=i.result,l=new LR(e,t,r).startWalking(),u=new Cn({definition:a}),h=new Cn({definition:l});return Hse([u,h],n)}function ZT(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Yse(t){return Ra(t,e=>Ra(e,r=>Ra(r,n=>cr(n.categoryMatches))))}var Yn,LR,KT,ag=M(()=>{"use strict";Ht();u2();PT();r0();ns();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(Yn||(Yn={}));o(h2,"getProdType");o(QT,"getLookaheadPaths");o(Gse,"buildLookaheadFuncForOr");o($se,"buildLookaheadFuncForOptionalProd");o(Vse,"buildAlternativesLookAheadFunc");o(Use,"buildSingleAlternativeLookaheadFunction");LR=class extends Iu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,Yn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,Yn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,Yn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,Yn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,Yn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},KT=class extends rs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,Yn.OPTION)}visitRepetition(e){this.checkIsTarget(e,Yn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,Yn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,Yn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,Yn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,Yn.ALTERNATION)}};o(zse,"initializeArrayOfArrays");o(_R,"pathToHashKeys");o(pFe,"isUniquePrefixHash");o(Hse,"lookAheadSequenceFromAlternatives");o(ng,"getLookaheadPathsForOr");o(ig,"getLookaheadPathsForOptionalProd");o(ZT,"containsPath");o(Wse,"isStrictPrefixOfPath");o(Yse,"areTokenCategoriesNotUsed")});function qse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:zi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Xse(t,e,r,n){let i=da(t,u=>mFe(u,r)),a=wFe(t,e,r),s=da(t,u=>vFe(u,r)),l=da(t,u=>yFe(u,t,n,r));return i.concat(a,s,l)}function mFe(t,e){let r=new DR;t.accept(r);let n=r.allProductions,i=UL(n,gFe),a=Ds(i,l=>l.length>1);return Je(br(a),l=>{let u=ra(l),h=e.buildDuplicateFoundError(t,l),f=Ms(u),d={message:h,type:zi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=jse(u);return p&&(d.parameter=p),d})}function gFe(t){return`${Ms(t)}_#_${t.idx}_#_${jse(t)}`}function jse(t){return t instanceof kr?t.terminalType.name:t instanceof nn?t.nonTerminalName:""}function yFe(t,e,r,n){let i=[];if(qr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:zi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Kse(t,e,r){let n=[],i;return Hn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:zi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function RR(t,e,r,n=[]){let i=[],a=JT(e.definition);if(cr(a))return[];{let s=t.name;Hn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:zi.LEFT_RECURSION,ruleName:s});let u=Xh(a,n.concat([t])),h=da(u,f=>{let d=rn(n);return d.push(f),RR(t,f,r,d)});return i.concat(h)}}function JT(t){let e=[];if(cr(t))return e;let r=ra(t);if(r instanceof nn)e.push(r.referencedRule);else if(r instanceof Cn||r instanceof an||r instanceof An||r instanceof _n||r instanceof vn||r instanceof Lr)e=e.concat(JT(r.definition));else if(r instanceof xn)e=Wr(Je(r.definition,a=>JT(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=Jd(r),i=t.length>1;if(n&&i){let a=mi(t);return e.concat(JT(a))}else return e}function Qse(t,e){let r=new f2;t.accept(r);let n=r.alternations;return da(n,a=>{let s=Lu(a.definition);return da(s,(l,u)=>{let h=jT([l],[],Ou,1);return cr(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:zi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Zse(t,e,r){let n=new f2;t.accept(n);let i=n.alternations;return i=jh(i,s=>s.ignoreAmbiguities===!0),da(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=ng(l,t,u,s),f=xFe(h,s,t,r),d=bFe(h,s,t,r);return f.concat(d)})}function vFe(t,e){let r=new f2;t.accept(r);let n=r.alternations;return da(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:zi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Jse(t,e,r){let n=[];return Ce(t,i=>{let a=new NR;i.accept(a);let s=a.allProductions;Ce(s,l=>{let u=h2(l),h=l.maxLookahead||e,f=l.idx,p=ig(f,i,u,h)[0];if(cr(Wr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:zi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function xFe(t,e,r,n){let i=[],a=qr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ce(u,f=>{let d=[h];Ce(t,(p,m)=>{h!==m&&ZT(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!ZT(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:zi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function bFe(t,e,r,n){let i=qr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Tc(da(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:zi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function wFe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ce(t,a=>{let s=a.name;if(Hn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:zi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var DR,f2,NR,d2=M(()=>{"use strict";Ht();Is();ns();ag();u2();r0();o(qse,"validateLookahead");o(Xse,"validateGrammar");o(mFe,"validateDuplicateProductions");o(gFe,"identifyProductionForDuplicates");o(jse,"getExtraProductionArgument");DR=class extends rs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(yFe,"validateRuleDoesNotAlreadyExist");o(Kse,"validateRuleIsOverridden");o(RR,"validateNoLeftRecursion");o(JT,"getFirstNoneTerminal");f2=class extends rs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Qse,"validateEmptyOrAlternative");o(Zse,"validateAmbiguousAlternationAlternatives");NR=class extends rs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(vFe,"validateTooManyAlts");o(Jse,"validateSomeNonEmptyLookaheadPath");o(xFe,"checkAlternativesAmbiguities");o(bFe,"checkPrefixAlternativesAmbiguities");o(wFe,"checkTerminalAndNoneTerminalsNameSpace")});function eoe(t){let e=qh(t,{errMsgProvider:Pse}),r={};return Ce(t.rules,n=>{r[n.name]=n}),Bse(r,e.errMsgProvider)}function toe(t){return t=qh(t,{errMsgProvider:Bl}),Xse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var roe=M(()=>{"use strict";Ht();Fse();d2();tg();o(eoe,"resolveGrammar");o(toe,"validateGrammar")});function rf(t){return Hn(ooe,t.name)}var noe,ioe,aoe,soe,ooe,sg,a0,p2,m2,g2,og=M(()=>{"use strict";Ht();noe="MismatchedTokenException",ioe="NoViableAltException",aoe="EarlyExitException",soe="NotAllInputParsedException",ooe=[noe,ioe,aoe,soe];Object.freeze(ooe);o(rf,"isRecognitionException");sg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},a0=class extends sg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=noe}},p2=class extends sg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=ioe}},m2=class extends sg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=soe}},g2=class extends sg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=aoe}}});function TFe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=oo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var MR,OR,IR,ek,PR=M(()=>{"use strict";i0();Ht();og();pR();Is();MR={},OR="InRuleRecoveryException",IR=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=OR}},ek=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=It(e,"recoveryEnabled")?e.recoveryEnabled:is.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=TFe)}getTokenToInsert(e){let r=n0(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new a0(m,h,this.LA(0));g.resyncedTokens=Lu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new IR("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||cr(r))return!1;let n=this.LA(1);return Za(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return Hn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=Za(e,a=>o2(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return MR;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?MR:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return Wr(e)}getFollowSetFromFollowKey(e){if(e===MR)return[oo];let r=e.ruleName+e.idxInCallingRule+BT+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,oo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Lu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=rn(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(TFe,"attemptInRepetitionRecovery")});function tk(t,e,r){return r|e|t}var rk=M(()=>{"use strict";o(tk,"getKeyForAutomaticLookahead")});var zu,BR=M(()=>{"use strict";Ht();tg();Is();d2();ag();zu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:is.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(cr(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return da(e,r=>RR(r,r,Bl))}validateEmptyOrAlternatives(e){return da(e,r=>Qse(r,Bl))}validateAmbiguousAlternationAlternatives(e,r){return da(e,n=>Zse(n,r,Bl))}validateSomeNonEmptyLookaheadPath(e,r){return Jse(e,r,Bl)}buildLookaheadForAlternation(e){return Gse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Vse)}buildLookaheadForOptional(e){return $se(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,h2(e.prodType),Use)}}});function kFe(t){nk.reset(),t.accept(nk);let e=nk.dslMethods;return nk.reset(),e}var ik,FR,nk,loe=M(()=>{"use strict";Ht();Is();rk();ns();BR();ik=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=It(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:is.dynamicTokensEnabled,this.maxLookahead=It(e,"maxLookahead")?e.maxLookahead:is.maxLookahead,this.lookaheadStrategy=It(e,"lookaheadStrategy")?e.lookaheadStrategy:new zu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ce(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=kFe(r);Ce(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Ms(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=tk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ce(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Ms(h))}),Ce(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Ms(h))}),Ce(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Ms(h))}),Ce(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Ms(h))}),Ce(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Ms(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=tk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return tk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},FR=class extends rs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},nk=new FR;o(kFe,"collectMethods")});function $R(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o($R,"setNodeLocationOnlyOffset");o(VR,"setNodeLocationFull");o(coe,"addTerminalToCst");o(uoe,"addNoneTerminalToCst")});function UR(t,e){Object.defineProperty(t,EFe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var EFe,foe=M(()=>{"use strict";EFe="name";o(UR,"defineNameProp")});function SFe(t,e){let r=zr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function poe(t,e,r){let n=o(function(){},"derivedConstructor");UR(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ce(e,a=>{i[a]=SFe}),n.prototype=i,n.prototype.constructor=n,n}function CFe(t,e){return AFe(t,e)}function AFe(t,e){let r=Yr(e,i=>Ei(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:HR.MISSING_METHOD,methodName:i}));return Tc(n)}var HR,moe=M(()=>{"use strict";Ht();foe();o(SFe,"defaultVisit");o(doe,"createBaseSemanticVisitorConstructor");o(poe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(HR||(HR={}));o(CFe,"validateVisitor");o(AFe,"validateMissingCstMethods")});var lk,goe=M(()=>{"use strict";hoe();Ht();moe();Is();lk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=It(e,"nodeLocationTracking")?e.nodeLocationTracking:is.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Jn,this.cstFinallyStateUpdate=Jn,this.cstPostTerminal=Jn,this.cstPostNonTerminal=Jn,this.cstPostRule=Jn;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=VR,this.setNodeLocationFromNode=VR,this.cstPostRule=Jn,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Jn,this.setNodeLocationFromNode=Jn,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=$R,this.setNodeLocationFromNode=$R,this.cstPostRule=Jn,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Jn,this.setNodeLocationFromNode=Jn,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Jn,this.setNodeLocationFromNode=Jn,this.cstPostRule=Jn,this.setInitialNodeLocation=Jn;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];coe(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];uoe(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(dr(this.baseCstVisitorConstructor)){let e=doe(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(dr(this.baseCstVisitorWithDefaultsConstructor)){let e=poe(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var ck,yoe=M(()=>{"use strict";Is();ck=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):lg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?lg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var uk,voe=M(()=>{"use strict";Ht();og();Is();tg();d2();ns();uk=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=cg){if(Hn(this.definedRulesNames,e)){let s={message:Bl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:zi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=cg){let i=Kse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(rf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return IT(br(this.gastProductionsCache))}}});var hk,xoe=M(()=>{"use strict";Ht();rk();og();ag();u2();Is();PR();i0();r0();hk=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=eg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},It(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Mt(e)){if(cr(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Mt(e))this.tokensMap=qr(e,(a,s)=>(a[s.name]=s,a),{});else if(It(e,"modes")&&Ra(Wr(br(e.modes)),Ase)){let a=Wr(br(e.modes)),s=Om(a);this.tokensMap=qr(s,(l,u)=>(l[u.name]=u,l),{})}else if(yn(e))this.tokensMap=rn(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=oo;let n=It(e,"modes")?Wr(br(e.modes)):br(e),i=Ra(n,a=>cr(a.categoryMatches));this.tokenMatcher=i?eg:Ou,Pu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=It(n,"resyncEnabled")?n.resyncEnabled:cg.resyncEnabled,a=It(n,"recoveryValueFunc")?n.recoveryValueFunc:cg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(rf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,Yn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,qT)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,c2],l,1536,e,c2)}else throw this.raiseEarlyExitException(e,Yn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,YT,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,l2],l,1280,e,l2)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Mt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new m2(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw rf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new a0(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===OR?n:a}}else throw n}saveRecogState(){let e=this.errors,r=rn(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),oo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var fk,boe=M(()=>{"use strict";og();Ht();ag();Is();fk=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=It(e,"errorMessageProvider")?e.errorMessageProvider:is.errorMessageProvider}SAVE_ERROR(e){if(rf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:rn(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return rn(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=ig(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new g2(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=ng(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new p2(u,this.LA(1),l))}}});var dk,woe=M(()=>{"use strict";u2();Ht();dk=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(dr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return jT([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ra(e.ruleStack),i=this.getGAstProductions()[r];return new WT(i,e).startWalking()}}});function v2(t,e,r,n=!1){mk(r);let i=fa(this.recordingProdStack),a=Ei(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),It(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),gk}function DFe(t,e){mk(e);let r=fa(this.recordingProdStack),n=Mt(t)===!1,i=n===!1?t:t.DEF,a=new xn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});It(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=Rv(i,l=>Ei(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ce(i,l=>{let u=new Cn({definition:[]});a.definition.push(u),It(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:It(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),gk}function Eoe(t){return t===0?"":`${t}`}function mk(t){if(t<0||t>koe){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${koe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var gk,Toe,koe,Soe,Coe,LFe,pk,Aoe=M(()=>{"use strict";Ht();ns();a2();r0();i0();Is();rk();gk={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(gk);Toe=!0,koe=Math.pow(2,8)-1,Soe=HT({name:"RECORDING_PHASE_TOKEN",pattern:oi.NA});Pu([Soe]);Coe=n0(Soe,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Coe);LFe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},pk=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return lg}topLevelRuleRecord(e,r){try{let n=new ts({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return v2.call(this,an,e,r)}atLeastOneInternalRecord(e,r){v2.call(this,An,r,e)}atLeastOneSepFirstInternalRecord(e,r){v2.call(this,_n,r,e,Toe)}manyInternalRecord(e,r){v2.call(this,Lr,r,e)}manySepFirstInternalRecord(e,r){v2.call(this,vn,r,e,Toe)}orInternalRecord(e,r){return DFe.call(this,e,r)}subruleInternalRecord(e,r,n){if(mk(r),!e||It(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=fa(this.recordingProdStack),a=e.ruleName,s=new nn({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?LFe:gk}consumeInternalRecord(e,r,n){if(mk(r),!TR(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=fa(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),Coe}};o(v2,"recordProd");o(DFe,"recordOrProd");o(Eoe,"getIdxSuffix");o(mk,"assertMethodIdxIsValid")});var yk,_oe=M(()=>{"use strict";Ht();jm();Is();yk=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(It(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=is.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=r2(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function Loe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Doe=M(()=>{"use strict";o(Loe,"applyMixins")});function vk(t=void 0){return function(){return t}}var lg,is,cg,zi,x2,b2,Is=M(()=>{"use strict";Ht();jm();sse();i0();tg();roe();PR();loe();goe();yoe();voe();xoe();boe();woe();Aoe();_oe();Doe();d2();lg=n0(oo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(lg);is=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Fu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),cg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(zi||(zi={}));o(vk,"EMPTY_ALT");x2=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{n2(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ce(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=eoe({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(cr(n)&&this.skipValidations===!1){let i=toe({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Bl,grammarName:r}),a=qse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),cr(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=ase(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!cr(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),It(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=It(r,"skipValidations")?r.skipValidations:is.skipValidations}};x2.DEFER_DEFINITION_ERRORS_HANDLING=!1;Loe(x2,[ek,ik,lk,ck,hk,uk,fk,dk,pk,yk]);b2=class extends x2{static{o(this,"EmbeddedActionsParser")}constructor(e,r=is){let n=rn(r);n.outputCst=!1,super(e,n)}}});var Noe=M(()=>{"use strict";ns()});var Roe=M(()=>{"use strict"});var Moe=M(()=>{"use strict";Noe();Roe()});var Ioe=M(()=>{"use strict";uR()});var s0=M(()=>{"use strict";uR();Is();a2();i0();ag();BR();tg();og();ER();ns();ns();Moe();Ioe()});function o0(t,e,r){return`${t.name}_${e}_${r}`}function Foe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};BFe(e,t);let r=t.length;for(let n=0;nzoe(t,e,s));return dg(t,e,n,r,...i)}function UFe(t,e,r){let n=na(t,e,r,{type:nf});af(t,n);let i=dg(t,e,n,r,l0(t,e,r));return HFe(t,e,r,i)}function l0(t,e,r){let n=Yr(Je(r.definition,i=>zoe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:YFe(t,n)}function Goe(t,e,r,n,i){let a=n.left,s=n.right,l=na(t,e,r,{type:PFe});af(t,l);let u=na(t,e,r,{type:Boe});return a.loopback=l,u.loopback=l,t.decisionMap[o0(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ai(s,l),i===void 0?(Ai(l,a),Ai(l,u)):(Ai(l,u),Ai(l,i.left),Ai(i.right,a)),{left:a,right:u}}function $oe(t,e,r,n,i){let a=n.left,s=n.right,l=na(t,e,r,{type:OFe});af(t,l);let u=na(t,e,r,{type:Boe}),h=na(t,e,r,{type:IFe});return l.loopback=h,u.loopback=h,Ai(l,a),Ai(l,u),Ai(s,h),i!==void 0?(Ai(h,u),Ai(h,i.left),Ai(i.right,a)):Ai(h,l),t.decisionMap[o0(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function HFe(t,e,r,n){let i=n.left,a=n.right;return Ai(i,a),t.decisionMap[o0(e,"Option",r.idx)]=i,n}function af(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function dg(t,e,r,n,...i){let a=na(t,e,n,{type:MFe,start:r});r.end=a;for(let l of i)l!==void 0?(Ai(r,l.left),Ai(l.right,a)):Ai(r,a);let s={left:r,right:a};return t.decisionMap[o0(e,WFe(n),n.idx)]=r,s}function WFe(t){if(t instanceof xn)return"Alternation";if(t instanceof an)return"Option";if(t instanceof Lr)return"Repetition";if(t instanceof vn)return"RepetitionWithSeparator";if(t instanceof An)return"RepetitionMandatory";if(t instanceof _n)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function YFe(t,e){let r=e.length;for(let a=0;a{"use strict";Rm();FL();s0();o(o0,"buildATNKey");nf=1,RFe=2,Ooe=4,Poe=5,fg=7,MFe=8,IFe=9,OFe=10,PFe=11,Boe=12,w2=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},ug=class extends w2{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},T2=class extends w2{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},hg=class extends w2{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(Foe,"createATN");o(BFe,"createRuleStartAndStopATNStates");o(zoe,"atom");o(FFe,"repetition");o(zFe,"repetitionSep");o(GFe,"repetitionMandatory");o($Fe,"repetitionMandatorySep");o(VFe,"alternation");o(UFe,"option");o(l0,"block");o(Goe,"plus");o($oe,"star");o(HFe,"optional");o(af,"defineDecisionState");o(dg,"makeAlts");o(WFe,"getProdType");o(YFe,"makeBlock");o(YR,"tokenRef");o(qFe,"ruleRef");o(XFe,"buildRuleHandle");o(Ai,"epsilon");o(na,"newState");o(qR,"addTransition");o(jFe,"removeState")});function XR(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var k2,pg,Uoe=M(()=>{"use strict";Rm();k2={},pg=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=XR(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(XR,"getATNConfigKey")});function KFe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Woe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function QFe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nBu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${rze(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n}function rze(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof xn)return"OR";if(t instanceof An)return"AT_LEAST_ONE";if(t instanceof _n)return"AT_LEAST_ONE_SEP";if(t instanceof vn)return"MANY_SEP";if(t instanceof Lr)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function nze(t,e,r){let n=da(e.configs.elements,a=>a.state.transitions),i=ene(n.filter(a=>a instanceof ug).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function ize(t,e){return t.edges[e.tokenTypeIdx]}function aze(t,e,r){let n=new pg,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===fg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!uze(a))for(let s of i)a.add(s);return a}function sze(t,e){if(t instanceof ug&&o2(e,t.tokenType))return t.target}function oze(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function qoe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Yoe(t,e,r,n){return n=Xoe(t,n),e.edges[r.tokenTypeIdx]=n,n}function Xoe(t,e){if(e===k2)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function lze(t){let e=new pg,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};bk(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function mze(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var xk,Hoe,E2,joe=M(()=>{"use strict";s0();Voe();Uoe();YL();GL();tne();Rm();gw();Ww();Kw();KL();o(KFe,"createDFACache");xk=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=Foe(e.rules),this.dfas=QFe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=o0(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(QT({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(Woe(d,!1)&&!a){let p=qr(d,(m,g,y)=>(Ce(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ce(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new xk,g=p===void 0?0:p.length;for(let v=0;vJe(p,m=>m[0]));if(Woe(d)&&d[0][0]&&!a){let p=d[0],m=Wr(p);if(m.length===1&&cr(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=qr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ce(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=jR.call(this,s,f,Hoe,l);return typeof p=="object"?!1:p===0}}};o(Woe,"isLL1Sequence");o(QFe,"initATNSimulator");o(jR,"adaptivePredict");o(ZFe,"performLookahead");o(JFe,"computeLookaheadTarget");o(eze,"reportLookaheadAmbiguity");o(tze,"buildAmbiguityError");o(rze,"getProductionDslName");o(nze,"buildAdaptivePredictError");o(ize,"getExistingTargetState");o(aze,"computeReachSet");o(sze,"getReachableTarget");o(oze,"getUniqueAlt");o(qoe,"newDFAState");o(Yoe,"addDFAEdge");o(Xoe,"addDFAState");o(lze,"computeStartState");o(bk,"closure");o(cze,"getEpsilonTarget");o(uze,"hasConfigInRuleStopState");o(hze,"allConfigsInRuleStopStates");o(fze,"hasConflictTerminatingPrediction");o(dze,"getConflictingAltSets");o(pze,"hasConflictingAltSet");o(mze,"hasStateAssociatedWithOneAlt")});var Koe=M(()=>{"use strict";joe()});var Qoe,KR,Zoe,wk,Xr,Dr,Tk,Joe,QR,ele,tle,rle,nle,ZR,ile,ale,sle,kk,mg,gg,JR,yg,ole,eM,tM,rM,nM,iM,lle,cle,aM,ule,sM,S2,hle,fle,dle,ple,mle,gle,yle,vle,Ek,xle,ble,wle,Tle,kle,Ele,Sle,Cle,Ale,_le,Lle,Sk,Dle,Nle,Rle,Mle,Ile,Ole,Ple,Ble,Fle,zle,Gle,$le,Vle,oM,lM,Ule,Hle,Wle,Yle,qle,Xle,jle,Kle,Qle,cM,Oe,uM=M(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Qoe||(Qoe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(KR||(KR={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Zoe||(Zoe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(wk||(wk={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=wk.MAX_VALUE),i===Number.MAX_VALUE&&(i=wk.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Oe.uinteger(i.line)&&Oe.uinteger(i.character)}o(r,"is"),t.is=r})(Xr||(Xr={}));(function(t){function e(n,i,a,s){if(Oe.uinteger(n)&&Oe.uinteger(i)&&Oe.uinteger(a)&&Oe.uinteger(s))return{start:Xr.create(n,i),end:Xr.create(a,s)};if(Xr.is(n)&&Xr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Xr.is(i.start)&&Xr.is(i.end)}o(r,"is"),t.is=r})(Dr||(Dr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Dr.is(i.range)&&(Oe.string(i.uri)||Oe.undefined(i.uri))}o(r,"is"),t.is=r})(Tk||(Tk={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Dr.is(i.targetRange)&&Oe.string(i.targetUri)&&Dr.is(i.targetSelectionRange)&&(Dr.is(i.originSelectionRange)||Oe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Joe||(Joe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Oe.numberRange(i.red,0,1)&&Oe.numberRange(i.green,0,1)&&Oe.numberRange(i.blue,0,1)&&Oe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(QR||(QR={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Dr.is(i.range)&&QR.is(i.color)}o(r,"is"),t.is=r})(ele||(ele={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Oe.string(i.label)&&(Oe.undefined(i.textEdit)||gg.is(i))&&(Oe.undefined(i.additionalTextEdits)||Oe.typedArray(i.additionalTextEdits,gg.is))}o(r,"is"),t.is=r})(tle||(tle={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(rle||(rle={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Oe.defined(a)&&(h.startCharacter=a),Oe.defined(s)&&(h.endCharacter=s),Oe.defined(l)&&(h.kind=l),Oe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Oe.uinteger(i.startLine)&&Oe.uinteger(i.startLine)&&(Oe.undefined(i.startCharacter)||Oe.uinteger(i.startCharacter))&&(Oe.undefined(i.endCharacter)||Oe.uinteger(i.endCharacter))&&(Oe.undefined(i.kind)||Oe.string(i.kind))}o(r,"is"),t.is=r})(nle||(nle={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Tk.is(i.location)&&Oe.string(i.message)}o(r,"is"),t.is=r})(ZR||(ZR={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(ile||(ile={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(ale||(ale={}));(function(t){function e(r){let n=r;return Oe.objectLiteral(n)&&Oe.string(n.href)}o(e,"is"),t.is=e})(sle||(sle={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Oe.defined(a)&&(h.severity=a),Oe.defined(s)&&(h.code=s),Oe.defined(l)&&(h.source=l),Oe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Oe.defined(a)&&Dr.is(a.range)&&Oe.string(a.message)&&(Oe.number(a.severity)||Oe.undefined(a.severity))&&(Oe.integer(a.code)||Oe.string(a.code)||Oe.undefined(a.code))&&(Oe.undefined(a.codeDescription)||Oe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Oe.string(a.source)||Oe.undefined(a.source))&&(Oe.undefined(a.relatedInformation)||Oe.typedArray(a.relatedInformation,ZR.is))}o(r,"is"),t.is=r})(kk||(kk={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Oe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.string(i.title)&&Oe.string(i.command)}o(r,"is"),t.is=r})(mg||(mg={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Oe.objectLiteral(s)&&Oe.string(s.newText)&&Dr.is(s.range)}o(i,"is"),t.is=i})(gg||(gg={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Oe.string(i.label)&&(Oe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Oe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(JR||(JR={}));(function(t){function e(r){let n=r;return Oe.string(n)}o(e,"is"),t.is=e})(yg||(yg={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return gg.is(s)&&(JR.is(s.annotationId)||yg.is(s.annotationId))}o(i,"is"),t.is=i})(ole||(ole={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&aM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(eM||(eM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Oe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Oe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Oe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||yg.is(i.annotationId))}o(r,"is"),t.is=r})(tM||(tM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Oe.string(i.oldUri)&&Oe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Oe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Oe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||yg.is(i.annotationId))}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Oe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Oe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Oe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||yg.is(i.annotationId))}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Oe.string(i.kind)?tM.is(i)||rM.is(i)||nM.is(i):eM.is(i)))}o(e,"is"),t.is=e})(iM||(iM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.string(i.uri)}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.string(i.uri)&&Oe.integer(i.version)}o(r,"is"),t.is=r})(cle||(cle={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.string(i.uri)&&(i.version===null||Oe.integer(i.version))}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.string(i.uri)&&Oe.string(i.languageId)&&Oe.integer(i.version)&&Oe.string(i.text)}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(sM||(sM={}));(function(t){function e(r){let n=r;return Oe.objectLiteral(r)&&sM.is(n.kind)&&Oe.string(n.value)}o(e,"is"),t.is=e})(S2||(S2={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(hle||(hle={}));(function(t){t.PlainText=1,t.Snippet=2})(fle||(fle={}));(function(t){t.Deprecated=1})(dle||(dle={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Oe.string(i.newText)&&Dr.is(i.insert)&&Dr.is(i.replace)}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){t.asIs=1,t.adjustIndentation=2})(mle||(mle={}));(function(t){function e(r){let n=r;return n&&(Oe.string(n.detail)||n.detail===void 0)&&(Oe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(gle||(gle={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(yle||(yle={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(vle||(vle={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Oe.string(i)||Oe.objectLiteral(i)&&Oe.string(i.language)&&Oe.string(i.value)}o(r,"is"),t.is=r})(Ek||(Ek={}));(function(t){function e(r){let n=r;return!!n&&Oe.objectLiteral(n)&&(S2.is(n.contents)||Ek.is(n.contents)||Oe.typedArray(n.contents,Ek.is))&&(r.range===void 0||Dr.is(r.range))}o(e,"is"),t.is=e})(xle||(xle={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){function e(r,n,...i){let a={label:r};return Oe.defined(n)&&(a.documentation=n),Oe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(wle||(wle={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Tle||(Tle={}));(function(t){function e(r,n){let i={range:r};return Oe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Ele||(Ele={}));(function(t){t.Deprecated=1})(Sle||(Sle={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(Cle||(Cle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(Ale||(Ale={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Oe.string(i.name)&&Oe.number(i.kind)&&Dr.is(i.range)&&Dr.is(i.selectionRange)&&(i.detail===void 0||Oe.string(i.detail))&&(i.deprecated===void 0||Oe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(_le||(_le={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Lle||(Lle={}));(function(t){t.Invoked=1,t.Automatic=2})(Sk||(Sk={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.typedArray(i.diagnostics,kk.is)&&(i.only===void 0||Oe.typedArray(i.only,Oe.string))&&(i.triggerKind===void 0||i.triggerKind===Sk.Invoked||i.triggerKind===Sk.Automatic)}o(r,"is"),t.is=r})(Dle||(Dle={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):mg.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Oe.string(i.title)&&(i.diagnostics===void 0||Oe.typedArray(i.diagnostics,kk.is))&&(i.kind===void 0||Oe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||mg.is(i.command))&&(i.isPreferred===void 0||Oe.boolean(i.isPreferred))&&(i.edit===void 0||iM.is(i.edit))}o(r,"is"),t.is=r})(Nle||(Nle={}));(function(t){function e(n,i){let a={range:n};return Oe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Dr.is(i.range)&&(Oe.undefined(i.command)||mg.is(i.command))}o(r,"is"),t.is=r})(Rle||(Rle={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Oe.uinteger(i.tabSize)&&Oe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(Mle||(Mle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Dr.is(i.range)&&(Oe.undefined(i.target)||Oe.string(i.target))}o(r,"is"),t.is=r})(Ile||(Ile={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Dr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(Ole||(Ole={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Ple||(Ple={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Ble||(Ble={}));(function(t){function e(r){let n=r;return Oe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(Fle||(Fle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Dr.is(i.range)&&Oe.string(i.text)}o(r,"is"),t.is=r})(zle||(zle={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Dr.is(i.range)&&Oe.boolean(i.caseSensitiveLookup)&&(Oe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(Gle||(Gle={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Dr.is(i.range)&&(Oe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})($le||($le={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.defined(i)&&Dr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(Vle||(Vle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(oM||(oM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&(i.tooltip===void 0||Oe.string(i.tooltip)||S2.is(i.tooltip))&&(i.location===void 0||Tk.is(i.location))&&(i.command===void 0||mg.is(i.command))}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Oe.objectLiteral(i)&&Xr.is(i.position)&&(Oe.string(i.label)||Oe.typedArray(i.label,lM.is))&&(i.kind===void 0||oM.is(i.kind))&&i.textEdits===void 0||Oe.typedArray(i.textEdits,gg.is)&&(i.tooltip===void 0||Oe.string(i.tooltip)||S2.is(i.tooltip))&&(i.paddingLeft===void 0||Oe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Oe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(Ule||(Ule={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(Hle||(Hle={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Wle||(Wle={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(Yle||(Yle={}));(function(t){t.Invoked=0,t.Automatic=1})(qle||(qle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(Xle||(Xle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(jle||(jle={}));(function(t){function e(r){let n=r;return Oe.objectLiteral(n)&&KR.is(n.uri)&&Oe.string(n.name)}o(e,"is"),t.is=e})(Kle||(Kle={}));(function(t){function e(a,s,l,u){return new cM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Oe.defined(s)&&Oe.string(s.uri)&&(Oe.undefined(s.languageId)||Oe.string(s.languageId))&&Oe.uinteger(s.lineCount)&&Oe.func(s.getText)&&Oe.func(s.positionAt)&&Oe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return Xr.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return Xr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Oe||(Oe={}))});var C2,A2,c0,u0,hM,vg,Ck=M(()=>{"use strict";uM();Yo();Ml();C2=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]}buildRootNode(e){return this.rootNode=new vg(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new u0;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new c0(e.startOffset,e.image.length,$m(e),e.tokenType,!1);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}addHiddenTokens(e){for(let r of e){let n=new c0(r.startOffset,r.image.length,$m(r),r.tokenType,!0);n.root=this.rootNode,this.addHiddenToken(this.rootNode,n)}}addHiddenToken(e,r){let{offset:n,end:i}=r;for(let a=0;al&&i=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},hM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},vg=class extends u0{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function fM(t){return t.$type===Ak}var Ak,Zle,Jle,_2,L2,_k,xg,D2,gze,dM,N2=M(()=>{"use strict";s0();Koe();Ac();Pl();es();Ck();Ak=Symbol("Datatype");o(fM,"isDataTypeNode");Zle="\u200B",Jle=o(t=>t.endsWith(Zle)?t:t+Zle,"withRuleSuffix"),_2=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition;this.wrapper=new dM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},L2=class extends _2{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new C2,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=e.fragment?void 0:e2(e)?Ak:Zd(e),i=this.wrapper.DEFINE_RULE(Jle(e.name),this.startImplementation(n,r).bind(this));return e.entry&&(this.mainRule=i),i}parse(e){this.nodeBuilder.buildRootNode(e);let r=this.lexer.tokenize(e);this.wrapper.input=r.tokens;let n=this.mainRule.call(this.wrapper,{});return this.nodeBuilder.addHiddenTokens(r.hidden),this.unorderedGroups.clear(),{value:n,lexerErrors:r.errors,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{if(!this.isRecording()){let a={$type:e};this.stack.push(a),e===Ak&&(a.value="")}let i;try{i=r(n)}catch{i=void 0}return!this.isRecording()&&i===void 0&&(i=this.construct()),i}}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.nodeBuilder.buildLeafNode(i,n),{assignment:s,isCrossRef:l}=this.getAssignment(n),u=this.current;if(s){let h=Xo(n)?i.image:this.converter.convert(i.image,a);this.assign(s.operator,s.feature,h,a,l)}else if(fM(u)){let h=i.image;Xo(n)||(h=this.converter.convert(h,a).toString()),u.value+=h}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i){let a;this.isRecording()||(a=this.nodeBuilder.buildCompositeNode(n));let s=this.wrapper.wrapSubrule(e,r,i);!this.isRecording()&&a&&a.length>0&&this.performSubruleAssignment(s,n,a)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(fM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let l=e.$type,u=this.assignWithoutOverride(e,s);l&&(u.$type=l);let h=u;this.stack.pop(),this.stack.push(h)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(!n.$cstNode&&r.feature&&r.operator){n=this.construct(!1);let a=n.$cstNode.feature;this.nodeBuilder.buildCompositeNode(a)}let i={$type:e};this.stack.pop(),this.stack.push(i),r.feature&&r.operator&&this.assign(r.operator,r.feature,n,n.$cstNode,!1)}}construct(e=!0){if(this.isRecording())return;let r=this.current;return CT(r),this.nodeBuilder.construct(r),e&&this.stack.pop(),fM(r)?this.converter.convert(r.value,r.$cstNode):($N(this.astReflection,r),r)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=qd(e,Il);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?Yd(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,i]of Object.entries(r)){let a=e[n];a===void 0?e[n]=i:Array.isArray(a)&&Array.isArray(i)&&(i.push(...a),e[n]=i)}return e}get definitionErrors(){return this.wrapper.definitionErrors}},_k=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Fu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Fu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Fu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Fu.buildEarlyExitMessage(e)}},xg=class extends _k{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},D2=class extends _2{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e);return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(Jle(e.name),this.startImplementation(r).bind(this));return e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i){this.before(n),this.wrapper.wrapSubrule(e,r,i),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},gze={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new xg},dM=class extends b2{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},gze),{lookaheadStrategy:n?new zu({maxLookahead:r.maxLookahead}):new E2}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Dk(t,e,r){return yze({parser:e,tokens:r,rules:new Map,ruleNames:new Map},t),e}function yze(t,e){let r=Zv(e,!1),n=tn(e.rules).filter(Ma).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});a.rules.set(i.name,t.parser.rule(i,h0(a,i.definition)))}}function h0(t,e,r=!1){let n;if(Xo(e))n=Eze(t,e);else if(Ru(e))n=vze(t,e);else if(Il(e))n=h0(t,e.terminal);else if(Yd(e))n=ece(t,e);else if(Ol(e))n=xze(t,e);else if(kT(e))n=wze(t,e);else if(ST(e))n=Tze(t,e);else if(tf(e))n=kze(t,e);else if(wN(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,oo,e),"method")}else throw new Wd(e.$cstNode,`Unexpected element type: ${e.$type}`);return tce(t,r?void 0:Lk(e),n,e.cardinality)}function vze(t,e){let r=Zd(e);return()=>t.parser.action(r,e)}function xze(t,e){let r=e.rule.ref;if(Ma(r)){let n=t.subrule++,i=e.arguments.length>0?bze(r,e.arguments):()=>({});return a=>t.parser.subrule(n,rce(t,r),e,i(a))}else if(qo(r)){let n=t.consume++,i=pM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)ef(r);else throw new Wd(e.$cstNode,`Undefined rule type: ${e.$type}`)}function bze(t,e){let r=e.map(n=>Gu(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(qD(t)){let e=Gu(t.left),r=Gu(t.right);return n=>e(n)&&r(n)}else if(eN(t)){let e=Gu(t.value);return r=>!e(r)}else if(iN(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(WD(t)){let e=!!t.true;return()=>e}ef(t)}function wze(t,e){if(e.elements.length===1)return h0(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:h0(t,i,!0)},s=Lk(i);s&&(a.GATE=Gu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function Tze(t,e){if(e.elements.length===1)return h0(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:h0(t,l,!0)},h=Lk(l);h&&(u.GATE=Gu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=tce(t,Lk(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function kze(t,e){let r=e.elements.map(n=>h0(t,n));return n=>r.forEach(i=>i(n))}function Lk(t){if(tf(t))return t.guardCondition}function ece(t,e,r=e.terminal){if(r)if(Ol(r)&&Ma(r.rule.ref)){let n=t.subrule++;return i=>t.parser.subrule(n,rce(t,r.rule.ref),e,i)}else if(Ol(r)&&qo(r.rule.ref)){let n=t.consume++,i=pM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Xo(r)){let n=t.consume++,i=pM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=RT(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+Zd(e.type.ref));return ece(t,e,i)}}function Eze(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function tce(t,e,r,n){let i=e&&Gu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:vk(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:vk(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else ef(n)}function rce(t,e){let r=Sze(t,e),n=t.rules.get(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function Sze(t,e){if(Ma(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Ma(n);)(tf(n)||kT(n)||ST(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function pM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var mM=M(()=>{"use strict";s0();Ac();gT();Rs();Pl();o(Dk,"createParser");o(yze,"buildRules");o(h0,"buildElement");o(vze,"buildAction");o(xze,"buildRuleCall");o(bze,"buildRuleCallPredicate");o(Gu,"buildPredicate");o(wze,"buildAlternatives");o(Tze,"buildUnorderedGroup");o(kze,"buildGroup");o(Lk,"getGuardCondition");o(ece,"buildCrossReference");o(Eze,"buildKeyword");o(tce,"wrap");o(rce,"getRule");o(Sze,"getRuleName");o(pM,"getToken")});function gM(t){let e=t.Grammar,r=t.parser.Lexer,n=new D2(t);return Dk(e,n,r.definition),n.finalize(),n}var yM=M(()=>{"use strict";N2();mM();o(gM,"createCompletionParser")});function vM(t){let e=nce(t);return e.finalize(),e}function nce(t){let e=t.Grammar,r=t.parser.Lexer,n=new L2(t);return Dk(e,n,r.definition)}var xM=M(()=>{"use strict";N2();mM();o(vM,"createLangiumParser");o(nce,"prepareLangiumParser")});var f0,bM=M(()=>{"use strict";s0();Ac();es();Pl();Wm();Rs();f0=class{static{o(this,"DefaultTokenBuilder")}buildTokens(e,r){let n=tn(Zv(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&DT(l)?a.unshift(s):a.push(s)}),a}buildTerminalTokens(e){return e.filter(qo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Ym(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n,LINE_BREAKS:!0};return e.hidden&&(i.GROUP=DT(r)?oi.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Ma).flatMap(i=>_c(i).filter(Xo)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){return{name:e.value,PATTERN:this.buildKeywordPattern(e,n),LONGER_ALT:this.findLongerAlt(e,r)}}buildKeywordPattern(e,r){return r?new RegExp(XN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&jN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var d0,Nc,wM=M(()=>{"use strict";Ac();Pl();d0=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(Yd(n)&&(n=ZN(n)),Ol(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Nc.convertInt(r);case"STRING":return Nc.convertString(r);case"ID":return Nc.convertID(r)}switch((i=sR(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Nc.convertNumber(r);case"boolean":return Nc.convertBoolean(r);case"bigint":return Nc.convertBigint(r);case"date":return Nc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(EM,"__esModule",{value:!0});var TM;function kM(){if(TM===void 0)throw new Error("No runtime abstraction layer installed");return TM}o(kM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");TM=r}o(e,"install"),t.install=e})(kM||(kM={}));EM.default=kM});var sce=Ni(Ia=>{"use strict";Object.defineProperty(Ia,"__esModule",{value:!0});Ia.stringArray=Ia.array=Ia.func=Ia.error=Ia.number=Ia.string=Ia.boolean=void 0;function Cze(t){return t===!0||t===!1}o(Cze,"boolean");Ia.boolean=Cze;function ice(t){return typeof t=="string"||t instanceof String}o(ice,"string");Ia.string=ice;function Aze(t){return typeof t=="number"||t instanceof Number}o(Aze,"number");Ia.number=Aze;function _ze(t){return t instanceof Error}o(_ze,"error");Ia.error=_ze;function Lze(t){return typeof t=="function"}o(Lze,"func");Ia.func=Lze;function ace(t){return Array.isArray(t)}o(ace,"array");Ia.array=ace;function Dze(t){return ace(t)&&t.every(e=>ice(e))}o(Dze,"stringArray");Ia.stringArray=Dze});var AM=Ni(bg=>{"use strict";Object.defineProperty(bg,"__esModule",{value:!0});bg.Emitter=bg.Event=void 0;var Nze=SM(),oce;(function(t){let e={dispose(){}};t.None=function(){return e}})(oce||(bg.Event=oce={}));var CM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new CM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};bg.Emitter=Nk;Nk._noop=function(){}});var lce=Ni(wg=>{"use strict";Object.defineProperty(wg,"__esModule",{value:!0});wg.CancellationTokenSource=wg.CancellationToken=void 0;var Rze=SM(),Mze=sce(),_M=AM(),Rk;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:_M.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:_M.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||Mze.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(Rk||(wg.CancellationToken=Rk={}));var Ize=Object.freeze(function(t,e){let r=(0,Rze.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),Mk=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Ize:(this._emitter||(this._emitter=new _M.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},LM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Mk),this._token}cancel(){this._token?this._token.cancel():this._token=Rk.Cancelled}dispose(){this._token?this._token instanceof Mk&&this._token.dispose():this._token=Rk.None}};wg.CancellationTokenSource=LM});var Cr={};var Ko=M(()=>{"use strict";Er(Cr,ka(lce(),1))});function NM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function uce(){return DM=Date.now(),new Cr.CancellationTokenSource}function hce(t){cce=t}function sf(t){return t===Rc}async function Gi(t){if(t===Cr.CancellationToken.None)return;let e=Date.now();if(e-DM>=cce&&(DM=e,await NM()),t.isCancellationRequested)throw Rc}var DM,cce,Rc,as,Qo=M(()=>{"use strict";Ko();o(NM,"delayNextTick");DM=0,cce=10;o(uce,"startCancelableOperation");o(hce,"setInterruptionPeriod");Rc=Symbol("OperationCancelled");o(sf,"isOperationCancelled");o(Gi,"interruptAndCheck");as=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function RM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);RM(n,e),RM(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function Oze(t){let e=pce(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var Ik,Tg,mce=M(()=>{"use strict";Ik=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=pce(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=fce(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&dce(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new Ik(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof Ik)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=RM(a.map(Oze),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(Tg||(Tg={}));o(RM,"mergeSort");o(fce,"computeLineOffsets");o(dce,"isEOL");o(pce,"getWellformedRange");o(Oze,"getWellformedEdit")});var gce,Os,kg,MM=M(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,R,S,O,N,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,B){return F||B?F:"file"}(k,P),this.authority=R||h,this.path=function(F,B){switch(F){case"https":case"http":case"file":B?B[0]!==f&&(B=f+B):B=f}return B}(this.scheme,S||h),this.query=O||h,this.fragment=N||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:R,authority:S,path:O,query:N,fragment:P}=k;return R===void 0?R=this.scheme:R===null&&(R=h),S===void 0?S=this.authority:S===null&&(S=h),O===void 0?O=this.path:O===null&&(O=h),N===void 0?N=this.query:N===null&&(N=h),P===void 0?P=this.fragment:P===null&&(P=h),R===this.scheme&&S===this.authority&&O===this.path&&N===this.query&&P===this.fragment?this:new g(R,S,O,N,P)}static parse(k,R=!1){let S=d.exec(k);return S?new g(S[2]||h,E(S[4]||h),E(S[5]||h),E(S[7]||h),E(S[9]||h),R):new g(h,h,h,h,h)}static file(k){let R=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let S=k.indexOf(f,2);S===-1?(R=k.substring(2),k=f):(R=k.substring(2,S),k=k.substring(S)||f)}return new g("file",R,k,h,h)}static from(k){let R=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(R,!0),R}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let R=new g(k);return R._formatted=k.external,R._fsPath=k._sep===m?k.fsPath:null,R}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,R){let S,O=-1;for(let N=0;N=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||R&&P===91||R&&P===93||R&&P===58)O!==-1&&(S+=encodeURIComponent(D.substring(O,N)),O=-1),S!==void 0&&(S+=D.charAt(N));else{S===void 0&&(S=D.substr(0,N));let F=y[P];F!==void 0?(O!==-1&&(S+=encodeURIComponent(D.substring(O,N)),O=-1),S+=F):O===-1&&(O=N)}}return O!==-1&&(S+=encodeURIComponent(D.substring(O))),S!==void 0?S:D}o(v,"d");function x(D){let k;for(let R=0;R1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(R=R.replace(/\//g,"\\")),R}o(b,"m");function w(D,k){let R=k?x:v,S="",{scheme:O,authority:N,path:P,query:F,fragment:B}=D;if(O&&(S+=O,S+=":"),(N||O==="file")&&(S+=f,S+=f),N){let $=N.indexOf("@");if($!==-1){let z=N.substr(0,$);N=N.substr($+1),$=z.lastIndexOf(":"),$===-1?S+=R(z,!1,!1):(S+=R(z.substr(0,$),!1,!1),S+=":",S+=R(z.substr($+1),!1,!0)),S+="@"}N=N.toLowerCase(),$=N.lastIndexOf(":"),$===-1?S+=R(N,!1,!0):(S+=R(N.substr(0,$),!1,!0),S+=N.substr($))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let $=P.charCodeAt(1);$>=65&&$<=90&&(P=`/${String.fromCharCode($+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let $=P.charCodeAt(0);$>=65&&$<=90&&(P=`${String.fromCharCode($+32)}:${P.substr(2)}`)}S+=R(P,!0,!1)}return F&&(S+="?",S+=R(F,!1,!1)),B&&(S+="#",S+=k?B:v(B,!1,!1)),S}o(w,"y");function _(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+_(D.substr(3)):D}}o(_,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>_(k)):D}o(E,"C");var L=r(470);let C=L.posix||L,A="/";var I;(function(D){D.joinPath=function(k,...R){return k.with({path:C.join(k.path,...R)})},D.resolvePath=function(k,...R){let S=k.path,O=!1;S[0]!==A&&(S=A+S,O=!0);let N=C.resolve(S,...R);return O&&N[0]===A&&!k.authority&&(N=N.substring(1)),k.with({path:N})},D.dirname=function(k){if(k.path.length===0||k.path===A)return k;let R=C.dirname(k.path);return R.length===1&&R.charCodeAt(0)===46&&(R=""),k.with({path:R})},D.basename=function(k){return C.basename(k.path)},D.extname=function(k){return C.extname(k.path)}})(I||(I={}))})(),gce=n})();({URI:Os,Utils:kg}=gce)});var ss,Mc=M(()=>{"use strict";MM();(function(t){t.basename=kg.basename,t.dirname=kg.dirname,t.extname=kg.extname,t.joinPath=kg.joinPath,t.resolvePath=kg.resolvePath;function e(n,i){return n?.toString()===i?.toString()}o(e,"equals"),t.equals=e;function r(n,i){let a=typeof n=="string"?n:n.path,s=typeof i=="string"?i:i.path,l=a.split("/").filter(p=>p.length>0),u=s.split("/").filter(p=>p.length>0),h=0;for(;h{"use strict";mce();Eg();Ko();Rs();Mc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(bn||(bn={}));R2=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=Cr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??Os.parse(e.uri),n?this.createAsync(r,e,n):this.create(r,e)}fromString(e,r,n){return n?this.createAsync(r,e,n):this.create(r,e)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r){if(typeof r=="string"){let n=this.parse(e,r);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText());return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:bn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:bn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=bn.Parsed,e}parse(e,r){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=Tg.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},M2=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory}get all(){return tn(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=bn.Changed,n.precomputedScopes=void 0,n.references=[],n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=bn.Changed,this.documentMap.delete(r)),n}}});var I2,IM=M(()=>{"use strict";Ko();Yo();es();Qo();Eg();I2=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=Cr.CancellationToken.None){for(let n of jo(e.parseResult.value))await Gi(r),Um(n).forEach(i=>this.doLink(i,e))}doLink(e,r){let n=e.reference;if(n._ref===void 0)try{let i=this.getCandidate(e);if(Vd(i))n._ref=i;else if(n._nodeDescription=i,this.langiumDocuments().hasDocument(i.documentUri)){let a=this.loadAstNode(i);n._ref=a??this.createLinkingError(e,i)}}catch(i){n._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${n.$refText}': ${i}`})}r.references.push(n)}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ei(this._ref))return this._ref;if(MD(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){let u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&Fi(e).state{"use strict";Pl();o(yce,"isNamed");O2=class{static{o(this,"DefaultNameProvider")}getName(e){if(yce(e))return e.name}getNameNode(e){return Jv(e.$cstNode,"name")}}});var P2,PM=M(()=>{"use strict";Pl();Yo();es();Ml();Rs();Mc();P2=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=iR(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(ma(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(ma(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||OD(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>ss.equals(a.sourceUri,r.documentUri))),n.push(...i),tn(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Fi(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Hd(r),local:!0}}}}});var Ic,p0,Sg=M(()=>{"use strict";Rs();Ic=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return Gm.sum(tn(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return tn(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return tn(this.map.keys())}values(){return tn(this.map.values()).flat()}entriesGroupedByKey(){return tn(this.map.entries())}},p0=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var B2,BM=M(()=>{"use strict";Ko();es();Sg();Qo();B2=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=Cr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=qv,i=Cr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await Gi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=Cr.CancellationToken.None){let n=e.parseResult.value,i=new Ic;for(let a of _c(n))await Gi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var Cg,F2,Pze,FM=M(()=>{"use strict";Rs();Cg=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},F2=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=tn(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},Pze={getElement(){},getAllElements(){return $v}}});var Ag,z2,m0,Ok,_g,Pk=M(()=>{"use strict";Ag=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},z2=class extends Ag{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},m0=class extends Ag{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},Ok=class extends m0{static{o(this,"DocumentCache")}constructor(e){super(r=>r.toString()),this.onDispose(e.workspace.DocumentBuilder.onUpdate((r,n)=>{let i=r.concat(n);for(let a of i)this.clear(a)}))}},_g=class extends z2{static{o(this,"WorkspaceCache")}constructor(e){super(),this.onDispose(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var G2,zM=M(()=>{"use strict";FM();es();Rs();Pk();G2=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new _g(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Fi(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(tn(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new Cg(tn(e),r,n)}createScopeForNodes(e,r,n){let i=tn(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new Cg(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new F2(this.indexManager.allElements(e)))}}});function GM(t){return typeof t.$comment=="string"}function vce(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var $2,Bk=M(()=>{"use strict";MM();Yo();es();Pl();o(GM,"isAstNodeWithComment");o(vce,"isIntermediateReference");$2=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r={}){let n=r?.replacer,i=o((s,l)=>this.replacer(s,l,r),"defaultReplacer"),a=n?(s,l)=>n(s,l,i):i;try{return this.currentDocument=Fi(e),JSON.stringify(e,a,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r={}){let n=JSON.parse(e);return this.linkNode(n,n,r),n}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(ma(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Fi(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ei(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=eR(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Mc();V2=class{static{o(this,"DefaultServiceRegistry")}register(e){if(!this.singleton&&!this.map){this.singleton=e;return}if(!this.map&&(this.map={},this.singleton)){for(let r of this.singleton.LanguageMetaData.fileExtensions)this.map[r]=this.singleton;this.singleton=void 0}for(let r of e.LanguageMetaData.fileExtensions)this.map[r]!==void 0&&this.map[r]!==e&&console.warn(`The file extension ${r} is used by multiple languages. It is now assigned to '${e.LanguageMetaData.languageId}'.`),this.map[r]=e}getServices(e){if(this.singleton!==void 0)return this.singleton;if(this.map===void 0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=ss.extname(e),n=this.map[r];if(!n)throw new Error(`The service registry contains no services for the extension '${r}'.`);return n}get all(){return this.singleton!==void 0?[this.singleton]:this.map!==void 0?Object.values(this.map):[]}}});function Fk(t){return{code:t}}var Lg,U2,H2=M(()=>{"use strict";Sg();Qo();Rs();o(Fk,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(Lg||(Lg={}));U2=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Ic,this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}}}wrapValidationException(e,r){return async(n,i,a)=>{try{await e.call(r,n,i,a)}catch(s){if(sf(s))throw s;console.error("An error occurred during validation:",s);let l=s instanceof Error?s.message:String(s);s instanceof Error&&s.stack&&console.error(s.stack),i("error","An error occurred during validation: "+l,{node:n})}}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=tn(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}}});function xce(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Jv(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=rR(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function zk(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}var W2,$u,VM=M(()=>{"use strict";Ko();Pl();es();Ml();Qo();H2();W2=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=Cr.CancellationToken.None){let i=e.parseResult,a=[];if(await Gi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===$u.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===$u.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===$u.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(sf(s))throw s;console.error("An error occurred during validation:",s)}return await Gi(n),a}processLexingErrors(e,r,n){for(let i of e.lexerErrors){let a={severity:zk("error"),range:{start:{line:i.line-1,character:i.column-1},end:{line:i.line-1,character:i.column+i.length-1}},message:i.message,data:Fk($u.LexingError),source:this.getSource()};r.push(a)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=$m(i.token);if(a){let s={severity:zk("error"),range:a,message:i.message,data:Fk($u.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:$u.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=Cr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await Promise.all(jo(e).map(async s=>{await Gi(n);let l=this.validationRegistry.getChecks(s.$type,r.categories);for(let u of l)await u(s,a,n)})),i}toDiagnostic(e,r,n){return{message:r,range:xce(n),severity:zk(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(xce,"getDiagnosticRange");o(zk,"toDiagnosticSeverity");(function(t){t.LexingError="lexing-error",t.ParsingError="parsing-error",t.LinkingError="linking-error"})($u||($u={}))});var Y2,q2,UM=M(()=>{"use strict";Ko();Yo();es();Ml();Qo();Mc();Y2=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n=Fi(e)){r??(r=this.nameProvider.getName(e));let i=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${i} has no name.`);let a,s=o(()=>{var l;return a??(a=Hd((l=this.nameProvider.getNameNode(e))!==null&&l!==void 0?l:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return s()},selectionSegment:Hd(e.$cstNode),type:e.$type,documentUri:n.uri,path:i}}},q2=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=Cr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of jo(i))await Gi(r),Um(a).filter(s=>!Vd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Fi(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Hd(n),local:ss.equals(r.documentUri,i)}}}});var X2,HM=M(()=>{"use strict";X2=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var j2,WM=M(()=>{"use strict";Qo();j2=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new as,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{this.updateSectionConfiguration(r,e.settings[r])})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}}});var g0,YM=M(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(g0||(g0={}))});var K2,qM=M(()=>{"use strict";Ko();YM();Sg();Qo();Rs();H2();Eg();K2=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Ic,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=bn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=Cr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===bn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=bn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:Lg.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=bn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=bn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=Cr.CancellationToken.None){this.currentState=bn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=bn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=tn(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,bn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await Gi(n);let a=this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),g0.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,bn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,bn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,bn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,bn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,bn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,bn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(s=>s.state{this.buildPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=Cr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Rc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Rc)})})}async notifyBuildPhase(e,r,n){if(e.length===0)return;let i=this.buildPhaseListeners.get(r);for(let a of i)await Gi(n),await a(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:Lg.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var Q2,XM=M(()=>{"use strict";es();Pk();Ko();Rs();Mc();Q2=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new m0,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Fi(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{ss.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),tn(i)}allElements(e,r){let n=tn(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=Cr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=Cr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Z2,jM=M(()=>{"use strict";Ko();Qo();Mc();Z2=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new as,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=Cr.CancellationToken.None){let n=await this.performStartup(e);await Gi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return Os.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=ss.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=ss.extname(r.uri);return n.includes(a)}return!1}}});function bce(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function QM(t){return t&&"modes"in t&&"defaultMode"in t}function KM(t){return!bce(t)&&!QM(t)}var J2,ZM=M(()=>{"use strict";s0();J2=class{static{o(this,"DefaultLexer")}constructor(e){let r=e.parser.TokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=KM(r)?Object.values(r):r;this.chevrotainLexer=new oi(n,{positionTracking:"full"})}get definition(){return this.tokenTypes}tokenize(e){var r;let n=this.chevrotainLexer.tokenize(e);return{tokens:n.tokens,errors:n.errors,hidden:(r=n.groups.hidden)!==null&&r!==void 0?r:[]}}toTokenTypeDictionary(e){if(KM(e))return e;let r=QM(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(bce,"isTokenTypeArray");o(QM,"isIMultiModeLexerDefinition");o(KM,"isTokenTypeDictionary")});function tI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=Xr.create(0,0));let a=kce(t),s=nI(n),l=Fze({lines:a,position:i,options:s});return Uze({index:0,tokens:l,position:i})}function rI(t,e){let r=nI(e),n=kce(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function kce(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(YN)}function Fze(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=Xr.create(a,s);i.push({type:"break",content:"",range:Dr.create(m,m)})}}else{wce.lastIndex=d;let m=wce.exec(f);if(m){let g=m[0],y=m[1],v=Xr.create(a,s+d),x=Xr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Dr.create(v,x)}),d+=g.length,d=eI(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function zze(t,e,r,n){let i=[];if(t.length===0){let a=Xr.create(r,n),s=Xr.create(r,n+e.length);i.push({type:"text",content:e,range:Dr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Dr.create(Xr.create(r,a+n),Xr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Dr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Dr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Dr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Dr.create(Xr.create(r,a+n),Xr.create(r,a+n+s.length))})}return i}function eI(t,e){let r=t.substring(e).match(Gze);return r?e+r.index:t.length}function Vze(t){let e=t.match($ze);if(e&&typeof e.index=="number")return e.index}function Uze(t){var e,r,n,i;let a=Xr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new Gk([],Dr.create(a,a));let s=[];for(;t.index0){let u=eI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:Xze(e,s)}}function Xze(t,e){try{return Os.parse(t,!0),`[${e}](${t})`}catch{return t}}function Tce(t){return t.endsWith(` +`)?` +`:` + +`}var wce,Bze,Gze,$ze,Gk,ex,tx,$k,iI=M(()=>{"use strict";uM();Wm();Mc();o(tI,"parseJSDoc");o(rI,"isJSDoc");o(kce,"getLines");wce=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,Bze=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(Fze,"tokenize");o(zze,"buildInlineTokens");Gze=/\S/,$ze=/\s*$/;o(eI,"skipWhitespace");o(Vze,"lastCharacter");o(Uze,"parseJSDocComment");o(Hze,"parseJSDocElement");o(Wze,"appendEmptyLine");o(Ece,"parseJSDocText");o(Yze,"parseJSDocInline");o(Sce,"parseJSDocTag");o(Cce,"parseJSDocLine");o(nI,"normalizeOptions");o(JM,"normalizeOption");Gk=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Tce(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Tce(r)+i}return r.trim()}},ex=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=qze(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(qze,"renderInlineTag");o(Xze,"renderLinkDefault");tx=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` +`)}return r}},$k=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Tce,"fillNewlines")});var rx,aI=M(()=>{"use strict";es();iI();rx=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&rI(r))return tI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Fi(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var nx,sI=M(()=>{"use strict";Bk();Ml();nx=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return GM(e)?e.$comment:(r=BD(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var li={};var oI=M(()=>{"use strict";Er(li,ka(AM(),1))});var ix,lI,cI,uI=M(()=>{"use strict";Qo();oI();ix=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e){return Promise.resolve(this.syncParser.parse(e))}},lI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new as,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new as;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Rc)}),this.queue.push(r),r.promise}},cI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new li.Emitter,this.deferred=new as,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Rc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new as,this.sendMessage(e),this.deferred.promise}}});var ax,hI=M(()=>{"use strict";Ko();Qo();ax=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new Cr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=new Cr.CancellationTokenSource;return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n){let i=new as,a={action:r,deferred:i,cancellationToken:n??Cr.CancellationToken.None};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){sf(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var sx,fI=M(()=>{"use strict";Ck();Ac();Yo();es();Sg();Ml();sx=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new p0,this.tokenTypeIdMap=new p0,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors.map(r=>Object.assign({},r)),parserErrors:e.parserErrors.map(r=>Object.assign({},r)),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of jo(e))r.set(i,{});if(e.$cstNode)for(let i of Ud(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ei(l)?s.push(this.dehydrateAstNode(l,r)):ma(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ei(a)?n[i]=this.dehydrateAstNode(a,r):ma(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return Gv(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),io(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):Jh(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of jo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Ud(e.$cstNode)){let s;"fullText"in a?(s=new vg(a.fullText),i=s):"content"in a?s=new u0:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ei(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):ma(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ei(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):ma(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),io(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new c0(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap();let r=this.grammarElementIdMap.getKey(e);if(r)return r;throw new Error("Invalid grammar element id: "+e)}createGrammarElementIdMap(){let e=0;for(let r of jo(this.grammar))Hv(r)&&this.grammarElementIdMap.set(r,e++)}}});function lo(t){return{documentation:{CommentProvider:o(e=>new nx(e),"CommentProvider"),DocumentationProvider:o(e=>new rx(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new ix(e),"AsyncParser"),GrammarConfig:o(e=>lR(e),"GrammarConfig"),LangiumParser:o(e=>vM(e),"LangiumParser"),CompletionParser:o(e=>gM(e),"CompletionParser"),ValueConverter:o(()=>new d0,"ValueConverter"),TokenBuilder:o(()=>new f0,"TokenBuilder"),Lexer:o(e=>new J2(e),"Lexer"),ParserErrorMessageProvider:o(()=>new xg,"ParserErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new X2,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Y2(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new q2(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new I2(e),"Linker"),NameProvider:o(()=>new O2,"NameProvider"),ScopeProvider:o(e=>new G2(e),"ScopeProvider"),ScopeComputation:o(e=>new B2(e),"ScopeComputation"),References:o(e=>new P2(e),"References")},serializer:{Hydrator:o(e=>new sx(e),"Hydrator"),JsonSerializer:o(e=>new $2(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new W2(e),"DocumentValidator"),ValidationRegistry:o(e=>new U2(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function co(t){return{ServiceRegistry:o(()=>new V2,"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new M2(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new R2(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new K2(e),"DocumentBuilder"),IndexManager:o(e=>new Q2(e),"IndexManager"),WorkspaceManager:o(e=>new Z2(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ax,"WorkspaceLock"),ConfigurationProvider:o(e=>new j2(e),"ConfigurationProvider")}}}var dI=M(()=>{"use strict";cR();yM();xM();bM();wM();IM();OM();PM();BM();zM();Bk();$M();VM();H2();UM();HM();WM();qM();Eg();XM();jM();ZM();aI();sI();N2();uI();hI();fI();o(lo,"createDefaultCoreModule");o(co,"createDefaultSharedCoreModule")});function $i(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(Vk,{});return Dce(h)}function Lce(t){if(t&&t[mI])for(let e of Object.values(t))Lce(e);return t}function Dce(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),get:o((n,i)=>_ce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(_ce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Reflect.ownKeys(t),mI],"ownKeys")});return r[mI]=!0,r}function _ce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===Ace)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. See https://langium.org/docs/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=Ace;try{t[e]=typeof i=="function"?i(n):Dce(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function Vk(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=Vk(i,n):t[r]=n}}return t}var pI,mI,Ace,gI=M(()=>{"use strict";(function(t){t.merge=(e,r)=>Vk(Vk({},e),r)})(pI||(pI={}));o($i,"inject");mI=Symbol("isProxy");o(Lce,"eagerLoad");o(Dce,"_inject");Ace=Symbol();o(_ce,"_resolve");o(Vk,"_merge")});var Nce=M(()=>{"use strict"});var Rce=M(()=>{"use strict";sI();aI();iI()});var Mce=M(()=>{"use strict"});var Ice=M(()=>{"use strict";cR();Mce()});var Oce=M(()=>{"use strict"});var Pce=M(()=>{"use strict";uI();yM();Ck();xM();N2();ZM();Oce();bM();wM()});var Bce=M(()=>{"use strict";IM();OM();PM();FM();BM();zM()});var Fce=M(()=>{"use strict";fI();Bk()});var Uk,uo,yI=M(()=>{"use strict";Uk=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},uo={fileSystemProvider:o(()=>new Uk,"fileSystemProvider")}});function Qze(){let t=$i(co(uo),Kze),e=$i(lo({shared:t}),jze);return t.ServiceRegistry.register(e),e}function of(t){var e;let r=Qze(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,Os.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var jze,Kze,zce=M(()=>{"use strict";dI();gI();Ac();yI();Mc();jze={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Kze={AstReflection:o(()=>new Vm,"AstReflection")};o(Qze,"createMinimalGrammarServices");o(of,"loadGrammarFromJson")});var Gr={};vr(Gr,{AstUtils:()=>AT,BiMap:()=>p0,Cancellation:()=>Cr,ContextCache:()=>m0,CstUtils:()=>mT,DONE_RESULT:()=>Ja,Deferred:()=>as,Disposable:()=>g0,DisposableCache:()=>Ag,DocumentCache:()=>Ok,EMPTY_STREAM:()=>$v,ErrorWithLocation:()=>Wd,GrammarUtils:()=>MT,MultiMap:()=>Ic,OperationCancelled:()=>Rc,Reduction:()=>Gm,RegExpUtils:()=>NT,SimpleCache:()=>z2,StreamImpl:()=>ao,TreeStreamImpl:()=>Cc,URI:()=>Os,UriUtils:()=>ss,WorkspaceCache:()=>_g,assertUnreachable:()=>ef,delayNextTick:()=>NM,interruptAndCheck:()=>Gi,isOperationCancelled:()=>sf,loadGrammarFromJson:()=>of,setInterruptionPeriod:()=>hce,startCancelableOperation:()=>uce,stream:()=>tn});var Gce=M(()=>{"use strict";Pk();oI();Er(Gr,li);Sg();YM();gT();zce();Qo();Rs();Mc();es();Ko();Ml();Pl();Wm()});var $ce=M(()=>{"use strict";VM();H2()});var Vce=M(()=>{"use strict";UM();HM();WM();qM();Eg();yI();XM();hI();jM()});var ga={};vr(ga,{AbstractAstReflection:()=>$d,AbstractCstNode:()=>A2,AbstractLangiumParser:()=>_2,AbstractParserErrorMessageProvider:()=>_k,AbstractThreadedAsyncParser:()=>lI,AstUtils:()=>AT,BiMap:()=>p0,Cancellation:()=>Cr,CompositeCstNodeImpl:()=>u0,ContextCache:()=>m0,CstNodeBuilder:()=>C2,CstUtils:()=>mT,DONE_RESULT:()=>Ja,DatatypeSymbol:()=>Ak,DefaultAstNodeDescriptionProvider:()=>Y2,DefaultAstNodeLocator:()=>X2,DefaultAsyncParser:()=>ix,DefaultCommentProvider:()=>nx,DefaultConfigurationProvider:()=>j2,DefaultDocumentBuilder:()=>K2,DefaultDocumentValidator:()=>W2,DefaultHydrator:()=>sx,DefaultIndexManager:()=>Q2,DefaultJsonSerializer:()=>$2,DefaultLangiumDocumentFactory:()=>R2,DefaultLangiumDocuments:()=>M2,DefaultLexer:()=>J2,DefaultLinker:()=>I2,DefaultNameProvider:()=>O2,DefaultReferenceDescriptionProvider:()=>q2,DefaultReferences:()=>P2,DefaultScopeComputation:()=>B2,DefaultScopeProvider:()=>G2,DefaultServiceRegistry:()=>V2,DefaultTokenBuilder:()=>f0,DefaultValueConverter:()=>d0,DefaultWorkspaceLock:()=>ax,DefaultWorkspaceManager:()=>Z2,Deferred:()=>as,Disposable:()=>g0,DisposableCache:()=>Ag,DocumentCache:()=>Ok,DocumentState:()=>bn,DocumentValidator:()=>$u,EMPTY_SCOPE:()=>Pze,EMPTY_STREAM:()=>$v,EmptyFileSystem:()=>uo,EmptyFileSystemProvider:()=>Uk,ErrorWithLocation:()=>Wd,GrammarAST:()=>Yv,GrammarUtils:()=>MT,JSDocDocumentationProvider:()=>rx,LangiumCompletionParser:()=>D2,LangiumParser:()=>L2,LangiumParserErrorMessageProvider:()=>xg,LeafCstNodeImpl:()=>c0,MapScope:()=>F2,Module:()=>pI,MultiMap:()=>Ic,OperationCancelled:()=>Rc,ParserWorker:()=>cI,Reduction:()=>Gm,RegExpUtils:()=>NT,RootCstNodeImpl:()=>vg,SimpleCache:()=>z2,StreamImpl:()=>ao,StreamScope:()=>Cg,TextDocument:()=>Tg,TreeStreamImpl:()=>Cc,URI:()=>Os,UriUtils:()=>ss,ValidationCategory:()=>Lg,ValidationRegistry:()=>U2,ValueConverter:()=>Nc,WorkspaceCache:()=>_g,assertUnreachable:()=>ef,createCompletionParser:()=>gM,createDefaultCoreModule:()=>lo,createDefaultSharedCoreModule:()=>co,createGrammarConfig:()=>lR,createLangiumParser:()=>vM,delayNextTick:()=>NM,diagnosticData:()=>Fk,eagerLoad:()=>Lce,getDiagnosticRange:()=>xce,inject:()=>$i,interruptAndCheck:()=>Gi,isAstNode:()=>ei,isAstNodeDescription:()=>MD,isAstNodeWithComment:()=>GM,isCompositeCstNode:()=>io,isIMultiModeLexerDefinition:()=>QM,isJSDoc:()=>rI,isLeafCstNode:()=>Jh,isLinkingError:()=>Vd,isNamed:()=>yce,isOperationCancelled:()=>sf,isReference:()=>ma,isRootCstNode:()=>Gv,isTokenTypeArray:()=>bce,isTokenTypeDictionary:()=>KM,loadGrammarFromJson:()=>of,parseJSDoc:()=>tI,prepareLangiumParser:()=>nce,setInterruptionPeriod:()=>hce,startCancelableOperation:()=>uce,stream:()=>tn,toDiagnosticSeverity:()=>zk});var Oc=M(()=>{"use strict";dI();gI();$M();Nce();Yo();Rce();Ice();Pce();Bce();Fce();Gce();Er(ga,Gr);$ce();Vce();Ac()});function Kce(t){return Fl.isInstance(t,jce)}function Qce(t){return Fl.isInstance(t,vI)}function Zce(t){return Fl.isInstance(t,xI)}function Jce(t){return Fl.isInstance(t,tGe)}function eue(t){return Fl.isInstance(t,bI)}function rue(t){return Fl.isInstance(t,tue)}function nue(t){return Fl.isInstance(t,wI)}function aue(t){return Fl.isInstance(t,iue)}function oue(t){return Fl.isInstance(t,sue)}function cue(t){return Fl.isInstance(t,lue)}function hue(t){return Fl.isInstance(t,uue)}var Zze,Ot,Xce,jce,vI,Jze,eGe,xI,tGe,bI,tue,wI,iue,sue,lue,uue,rGe,fue,Fl,Uce,nGe,Hce,iGe,Wce,aGe,Yce,sGe,qce,oGe,lGe,cGe,uGe,hGe,fGe,zl,TI,kI,EI,SI,CI,dGe,pGe,mGe,gGe,Dg,y0,Zo,yGe,Jo=M(()=>{"use strict";Oc();Oc();Oc();Oc();Zze=Object.defineProperty,Ot=o((t,e)=>Zze(t,"name",{value:e,configurable:!0}),"__name"),Xce="Statement",jce="Architecture";o(Kce,"isArchitecture");Ot(Kce,"isArchitecture");vI="Branch";o(Qce,"isBranch");Ot(Qce,"isBranch");Jze="Checkout",eGe="CherryPicking",xI="Commit";o(Zce,"isCommit");Ot(Zce,"isCommit");tGe="Common";o(Jce,"isCommon");Ot(Jce,"isCommon");bI="GitGraph";o(eue,"isGitGraph");Ot(eue,"isGitGraph");tue="Info";o(rue,"isInfo");Ot(rue,"isInfo");wI="Merge";o(nue,"isMerge");Ot(nue,"isMerge");iue="Packet";o(aue,"isPacket");Ot(aue,"isPacket");sue="PacketBlock";o(oue,"isPacketBlock");Ot(oue,"isPacketBlock");lue="Pie";o(cue,"isPie");Ot(cue,"isPie");uue="PieSection";o(hue,"isPieSection");Ot(hue,"isPieSection");rGe="Direction",fue=class extends $d{static{o(this,"MermaidAstReflection")}static{Ot(this,"MermaidAstReflection")}getAllTypes(){return["Architecture","Branch","Checkout","CherryPicking","Commit","Common","Direction","Edge","GitGraph","Group","Info","Junction","Merge","Packet","PacketBlock","Pie","PieSection","Service","Statement"]}computeIsSubtype(t,e){switch(t){case vI:case Jze:case eGe:case xI:case wI:return this.isSubtype(Xce,e);case rGe:return this.isSubtype(bI,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case"Architecture":return{name:"Architecture",properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case"Branch":return{name:"Branch",properties:[{name:"name"},{name:"order"}]};case"Checkout":return{name:"Checkout",properties:[{name:"branch"}]};case"CherryPicking":return{name:"CherryPicking",properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case"Commit":return{name:"Commit",properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Common":return{name:"Common",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Edge":return{name:"Edge",properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case"GitGraph":return{name:"GitGraph",properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case"Group":return{name:"Group",properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case"Info":return{name:"Info",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Junction":return{name:"Junction",properties:[{name:"id"},{name:"in"}]};case"Merge":return{name:"Merge",properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Packet":return{name:"Packet",properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case"PacketBlock":return{name:"PacketBlock",properties:[{name:"end"},{name:"label"},{name:"start"}]};case"Pie":return{name:"Pie",properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case"PieSection":return{name:"PieSection",properties:[{name:"label"},{name:"value"}]};case"Service":return{name:"Service",properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case"Direction":return{name:"Direction",properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Fl=new fue,nGe=Ot(()=>Uce??(Uce=of('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),iGe=Ot(()=>Hce??(Hce=of(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),aGe=Ot(()=>Wce??(Wce=of('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),sGe=Ot(()=>Yce??(Yce=of('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),oGe=Ot(()=>qce??(qce=of(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),lGe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},cGe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},uGe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},hGe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},fGe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},zl={AstReflection:Ot(()=>new fue,"AstReflection")},TI={Grammar:Ot(()=>nGe(),"Grammar"),LanguageMetaData:Ot(()=>lGe,"LanguageMetaData"),parser:{}},kI={Grammar:Ot(()=>iGe(),"Grammar"),LanguageMetaData:Ot(()=>cGe,"LanguageMetaData"),parser:{}},EI={Grammar:Ot(()=>aGe(),"Grammar"),LanguageMetaData:Ot(()=>uGe,"LanguageMetaData"),parser:{}},SI={Grammar:Ot(()=>sGe(),"Grammar"),LanguageMetaData:Ot(()=>hGe,"LanguageMetaData"),parser:{}},CI={Grammar:Ot(()=>oGe(),"Grammar"),LanguageMetaData:Ot(()=>fGe,"LanguageMetaData"),parser:{}},dGe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,pGe=/accTitle[\t ]*:([^\n\r]*)/,mGe=/title([\t ][^\n\r]*|)/,gGe={ACC_DESCR:dGe,ACC_TITLE:pGe,TITLE:mGe},Dg=class extends d0{static{o(this,"AbstractMermaidValueConverter")}static{Ot(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=gGe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},y0=class extends Dg{static{o(this,"CommonValueConverter")}static{Ot(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Zo=class extends f0{static{o(this,"AbstractMermaidTokenBuilder")}static{Ot(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},yGe=class extends Zo{static{o(this,"CommonTokenBuilder")}static{Ot(this,"CommonTokenBuilder")}}});function Wk(t=uo){let e=$i(co(t),zl),r=$i(lo({shared:e}),CI,Hk);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var vGe,Hk,AI=M(()=>{"use strict";Jo();Oc();vGe=class extends Zo{static{o(this,"GitGraphTokenBuilder")}static{Ot(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},Hk={parser:{TokenBuilder:Ot(()=>new vGe,"TokenBuilder"),ValueConverter:Ot(()=>new y0,"ValueConverter")}};o(Wk,"createGitGraphServices");Ot(Wk,"createGitGraphServices")});function qk(t=uo){let e=$i(co(t),zl),r=$i(lo({shared:e}),TI,Yk);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var xGe,Yk,_I=M(()=>{"use strict";Jo();Oc();xGe=class extends Zo{static{o(this,"InfoTokenBuilder")}static{Ot(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},Yk={parser:{TokenBuilder:Ot(()=>new xGe,"TokenBuilder"),ValueConverter:Ot(()=>new y0,"ValueConverter")}};o(qk,"createInfoServices");Ot(qk,"createInfoServices")});function jk(t=uo){let e=$i(co(t),zl),r=$i(lo({shared:e}),kI,Xk);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var bGe,Xk,LI=M(()=>{"use strict";Jo();Oc();bGe=class extends Zo{static{o(this,"PacketTokenBuilder")}static{Ot(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},Xk={parser:{TokenBuilder:Ot(()=>new bGe,"TokenBuilder"),ValueConverter:Ot(()=>new y0,"ValueConverter")}};o(jk,"createPacketServices");Ot(jk,"createPacketServices")});function Qk(t=uo){let e=$i(co(t),zl),r=$i(lo({shared:e}),EI,Kk);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var wGe,TGe,Kk,DI=M(()=>{"use strict";Jo();Oc();wGe=class extends Zo{static{o(this,"PieTokenBuilder")}static{Ot(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},TGe=class extends Dg{static{o(this,"PieValueConverter")}static{Ot(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},Kk={parser:{TokenBuilder:Ot(()=>new wGe,"TokenBuilder"),ValueConverter:Ot(()=>new TGe,"ValueConverter")}};o(Qk,"createPieServices");Ot(Qk,"createPieServices")});function Jk(t=uo){let e=$i(co(t),zl),r=$i(lo({shared:e}),SI,Zk);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var kGe,EGe,Zk,NI=M(()=>{"use strict";Jo();Oc();kGe=class extends Zo{static{o(this,"ArchitectureTokenBuilder")}static{Ot(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},EGe=class extends Dg{static{o(this,"ArchitectureValueConverter")}static{Ot(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},Zk={parser:{TokenBuilder:Ot(()=>new kGe,"TokenBuilder"),ValueConverter:Ot(()=>new EGe,"ValueConverter")}};o(Jk,"createArchitectureServices");Ot(Jk,"createArchitectureServices")});var due={};vr(due,{InfoModule:()=>Yk,createInfoServices:()=>qk});var pue=M(()=>{"use strict";_I();Jo()});var mue={};vr(mue,{PacketModule:()=>Xk,createPacketServices:()=>jk});var gue=M(()=>{"use strict";LI();Jo()});var yue={};vr(yue,{PieModule:()=>Kk,createPieServices:()=>Qk});var vue=M(()=>{"use strict";DI();Jo()});var xue={};vr(xue,{ArchitectureModule:()=>Zk,createArchitectureServices:()=>Jk});var bue=M(()=>{"use strict";NI();Jo()});var wue={};vr(wue,{GitGraphModule:()=>Hk,createGitGraphServices:()=>Wk});var Tue=M(()=>{"use strict";AI();Jo()});async function Gl(t,e){let r=SGe[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);v0[t]||await r();let i=v0[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new CGe(i);return i.value}var v0,SGe,CGe,Ng=M(()=>{"use strict";AI();_I();LI();DI();NI();Jo();v0={},SGe={info:Ot(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(pue(),due)),e=t().Info.parser.LangiumParser;v0.info=e},"info"),packet:Ot(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(gue(),mue)),e=t().Packet.parser.LangiumParser;v0.packet=e},"packet"),pie:Ot(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(vue(),yue)),e=t().Pie.parser.LangiumParser;v0.pie=e},"pie"),architecture:Ot(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(bue(),xue)),e=t().Architecture.parser.LangiumParser;v0.architecture=e},"architecture"),gitGraph:Ot(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(Tue(),wue)),e=t().GitGraph.parser.LangiumParser;v0.gitGraph=e},"gitGraph")};o(Gl,"parse");Ot(Gl,"parse");CGe=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`),r=t.parserErrors.map(n=>n.message).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Ot(this,"MermaidParseError")}}});function lf(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var ox=M(()=>{"use strict";o(lf,"populateCommonDb")});var jr,eE=M(()=>{"use strict";jr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var cf,tE=M(()=>{"use strict";cf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function RI(){return t9({length:7})}function _Ge(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function kue(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Sue(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in wt.records.branches)wt.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=wt.records.commits.get(e.parents[0]);kue(t,e,i),e.parents[1]&&t.push(wt.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=wt.records.commits.get(e.parents[0]);kue(t,e,i)}}t=_Ge(t,i=>i.id),Sue(t)}var AGe,x0,wt,LGe,DGe,NGe,RGe,MGe,IGe,OGe,Eue,PGe,BGe,FGe,zGe,GGe,Cue,$Ge,VGe,UGe,rE,MI=M(()=>{"use strict";ht();hr();Ua();fr();ki();eE();tE();hs();AGe=ur.gitGraph,x0=o(()=>ws({...AGe,...Sr().gitGraph}),"getConfig"),wt=new cf(()=>{let t=x0(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(RI,"getID");o(_Ge,"uniqBy");LGe=o(function(t){wt.records.direction=t},"setDirection"),DGe=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{wt.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),NGe=o(function(){return wt.records.options},"getOptions"),RGe=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=x0();r=je.sanitizeText(r,a),e=je.sanitizeText(e,a),i=i?.map(l=>je.sanitizeText(l,a));let s={id:r||wt.records.seq+"-"+RI(),message:e,seq:wt.records.seq++,type:n??jr.NORMAL,tags:i??[],parents:wt.records.head==null?[]:[wt.records.head.id],branch:wt.records.currBranch};wt.records.head=s,Y.info("main branch",a.mainBranchName),wt.records.commits.set(s.id,s),wt.records.branches.set(wt.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),MGe=o(function(t){let e=t.name,r=t.order;if(e=je.sanitizeText(e,x0()),wt.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);wt.records.branches.set(e,wt.records.head!=null?wt.records.head.id:null),wt.records.branchConfig.set(e,{name:e,order:r}),Eue(e),Y.debug("in createBranch")},"branch"),IGe=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=x0();e=je.sanitizeText(e,a),r&&(r=je.sanitizeText(r,a));let s=wt.records.branches.get(wt.records.currBranch),l=wt.records.branches.get(e),u=s?wt.records.commits.get(s):void 0,h=l?wt.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(wt.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${wt.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!wt.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&wt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${wt.records.seq}-${RI()}`,message:`merged branch ${e} into ${wt.records.currBranch}`,seq:wt.records.seq++,parents:wt.records.head==null?[]:[wt.records.head.id,f],branch:wt.records.currBranch,type:jr.MERGE,customType:n,customId:!!r,tags:i??[]};wt.records.head=d,wt.records.commits.set(d.id,d),wt.records.branches.set(wt.records.currBranch,d.id),Y.debug(wt.records.branches),Y.debug("in mergeBranch")},"merge"),OGe=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=x0();if(e=je.sanitizeText(e,a),r=je.sanitizeText(r,a),n=n?.map(u=>je.sanitizeText(u,a)),i=je.sanitizeText(i,a),!e||!wt.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=wt.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===jr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!wt.records.commits.has(r)){if(l===wt.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=wt.records.branches.get(wt.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${wt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=wt.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${wt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:wt.records.seq+"-"+RI(),message:`cherry-picked ${s?.message} into ${wt.records.currBranch}`,seq:wt.records.seq++,parents:wt.records.head==null?[]:[wt.records.head.id,s.id],branch:wt.records.currBranch,type:jr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===jr.MERGE?`|parent:${i}`:""}`]};wt.records.head=f,wt.records.commits.set(f.id,f),wt.records.branches.set(wt.records.currBranch,f.id),Y.debug(wt.records.branches),Y.debug("in cherryPick")}},"cherryPick"),Eue=o(function(t){if(t=je.sanitizeText(t,x0()),wt.records.branches.has(t)){wt.records.currBranch=t;let e=wt.records.branches.get(wt.records.currBranch);e===void 0||!e?wt.records.head=null:wt.records.head=wt.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(kue,"upsert");o(Sue,"prettyPrintCommitHistory");PGe=o(function(){Y.debug(wt.records.commits);let t=Cue()[0];Sue([t])},"prettyPrint"),BGe=o(function(){wt.reset(),_r()},"clear"),FGe=o(function(){return[...wt.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),zGe=o(function(){return wt.records.branches},"getBranches"),GGe=o(function(){return wt.records.commits},"getCommits"),Cue=o(function(){let t=[...wt.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),$Ge=o(function(){return wt.records.currBranch},"getCurrentBranch"),VGe=o(function(){return wt.records.direction},"getDirection"),UGe=o(function(){return wt.records.head},"getHead"),rE={commitType:jr,getConfig:x0,setDirection:LGe,setOptions:DGe,getOptions:NGe,commit:RGe,branch:MGe,merge:IGe,cherryPick:OGe,checkout:Eue,prettyPrint:PGe,clear:BGe,getBranchesAsObjArray:FGe,getBranches:zGe,getCommits:GGe,getCommitsArray:Cue,getCurrentBranch:$Ge,getDirection:VGe,getHead:UGe,setAccTitle:Rr,getAccTitle:Pr,getAccDescription:Fr,setAccDescription:Br,setDiagramTitle:ln,getDiagramTitle:Jr}});var HGe,WGe,YGe,qGe,XGe,jGe,KGe,Aue,_ue=M(()=>{"use strict";Ng();ht();ox();MI();eE();HGe=o((t,e)=>{lf(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)WGe(r,e)},"populate"),WGe=o((t,e)=>{let n={Commit:o(i=>e.commit(YGe(i)),"Commit"),Branch:o(i=>e.branch(qGe(i)),"Branch"),Merge:o(i=>e.merge(XGe(i)),"Merge"),Checkout:o(i=>e.checkout(jGe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(KGe(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),YGe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?jr[t.type]:jr.NORMAL,tags:t.tags??void 0}),"parseCommit"),qGe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),XGe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?jr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),jGe=o(t=>t.branch,"parseCheckout"),KGe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Aue={parse:o(async t=>{let e=await Gl("gitGraph",t);Y.debug(e),HGe(e,rE)},"parse")}});var QGe,el,hf,ff,Pc,Vu,b0,Ps,Bs,nE,lx,iE,uf,Nr,ZGe,Due,Nue,JGe,e$e,t$e,r$e,n$e,i$e,a$e,s$e,o$e,l$e,c$e,u$e,Lue,h$e,cx,f$e,d$e,p$e,m$e,g$e,Rue,Mue=M(()=>{"use strict";mr();Vt();ht();hr();eE();QGe=de(),el=QGe?.gitGraph,hf=10,ff=40,Pc=4,Vu=2,b0=8,Ps=new Map,Bs=new Map,nE=30,lx=new Map,iE=[],uf=0,Nr="LR",ZGe=o(()=>{Ps.clear(),Bs.clear(),lx.clear(),uf=0,iE=[],Nr="LR"},"clear"),Due=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),Nue=o(t=>{let e,r,n;return Nr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Nr==="TB"||Nr=="BT"?Bs.get(i)?.y:Bs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),JGe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Bs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),e$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=r$e(l),i=Math.max(n,i)):a.push(l),n$e(l,n)}),n=i,a.forEach(s=>{i$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=JGe(l.parents);n=Bs.get(u).y-ff,n<=i&&(i=n);let h=Ps.get(l.branch).pos,f=n-hf;Bs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),t$e=o(t=>{let e=Nue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Bs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),r$e=o(t=>t$e(t)+ff,"calculateCommitPosition"),n$e=o((t,e)=>{let r=Ps.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+hf;return Bs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),i$e=o((t,e,r)=>{let n=Ps.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Bs.set(t.id,{x:a,y:i})},"setRootPosition"),a$e=o((t,e,r,n,i,a)=>{if(a===jr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%b0} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%b0} ${n}-inner`);else if(a===jr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===jr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%b0}`),a===jr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%b0}`)}a===jr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%b0}`)}},"drawCommitBullet"),s$e=o((t,e,r,n)=>{if(e.type!==jr.CHERRY_PICK&&(e.customId&&e.type===jr.MERGE||e.type!==jr.MERGE)&&el?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Vu).attr("y",r.y+13.5).attr("width",l.width+2*Vu).attr("height",l.height+2*Vu),Nr==="TB"||Nr==="BT"?(a.attr("x",r.x-(l.width+4*Pc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Pc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),el.rotateCommitLabel))if(Nr==="TB"||Nr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),o$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Pc/2},${m+Vu} + ${n-a/2-Pc/2},${m-Vu} + ${r.posWithOffset-a/2-Pc},${m-p-Vu} + ${r.posWithOffset+a/2+Pc},${m-p-Vu} + ${r.posWithOffset+a/2+Pc},${m+p+Vu} + ${r.posWithOffset-a/2-Pc},${m+p+Vu}`),h.attr("cy",m).attr("cx",n-a/2+Pc/2).attr("r",1.5).attr("class","tag-hole"),Nr==="TB"||Nr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+hf},${g-p-2} + ${r.x+hf+a+4},${g-p-2} + ${r.x+hf+a+4},${g+p+2} + ${r.x+hf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Pc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),l$e=o(t=>{switch(t.customType??t.type){case jr.NORMAL:return"commit-normal";case jr.REVERSE:return"commit-reverse";case jr.HIGHLIGHT:return"commit-highlight";case jr.MERGE:return"commit-merge";case jr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),c$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=Nue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+ff:e==="BT"?(n.get(t.id)??i).y-ff:s.x+ff}}else return e==="TB"?nE:e==="BT"?(n.get(t.id)??i).y-ff:0;return 0},"calculatePosition"),u$e=o((t,e,r)=>{let n=Nr==="BT"&&r?e:e+hf,i=Nr==="TB"||Nr==="BT"?n:Ps.get(t.branch)?.pos,a=Nr==="TB"||Nr==="BT"?Ps.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),Lue=o((t,e,r)=>{if(!el)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Nr==="TB"||Nr==="BT"?nE:0,s=[...e.keys()],l=el?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Nr==="BT"&&(l&&e$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=c$e(d,Nr,a,Bs));let p=u$e(d,a,l);if(r){let m=l$e(d),g=d.customType??d.type,y=Ps.get(d.branch)?.index??0;a$e(n,d,p,m,y,g),s$e(i,d,p,a),o$e(i,d,p,a)}Nr==="TB"||Nr==="BT"?Bs.set(d.id,{x:p.x,y:p.posWithOffset}):Bs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Nr==="BT"&&l?a+ff:a+ff+hf,a>uf&&(uf=a)})},"drawCommits"),h$e=o((t,e,r,n,i)=>{let s=(Nr==="TB"||Nr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),cx=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(iE.every(s=>Math.abs(s-n)>=10))return iE.push(n),n;let a=Math.abs(t-e);return cx(t,e-a/5,r+1)},"findLane"),f$e=o((t,e,r,n)=>{let i=Bs.get(e.id),a=Bs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=h$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Ps.get(r.branch)?.index;r.type===jr.MERGE&&e.id!==r.parents[0]&&(d=Ps.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Nr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%b0)},"drawArrow"),d$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{f$e(r,e.get(a),i,e)})})},"drawArrows"),p$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%b0,s=Ps.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",uf),l.attr("y2",s),l.attr("class","branch branch"+a),Nr==="TB"?(l.attr("y1",nE),l.attr("x1",s),l.attr("y2",uf),l.attr("x2",s)):Nr==="BT"&&(l.attr("y1",uf),l.attr("x1",s),l.attr("y2",nE),l.attr("x2",s)),iE.push(s);let u=n.name,h=Due(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(el?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(el?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Nr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Nr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",uf),p.attr("transform","translate("+(s-m.width/2-5)+", "+uf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),m$e=o(function(t,e,r,n,i){return Ps.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Nr==="TB"||Nr==="BT"?n.width/2:0),e},"setBranchPosition"),g$e=o(function(t,e,r,n){if(ZGe(),Y.debug("in gitgraph renderer",t+` +`,"id:",e,r),!el)throw new Error("GitGraph config not found");let i=el.rotateCommitLabel??!1,a=n.db;lx=a.getCommits();let s=a.getBranchesAsObjArray();Nr=a.getDirection();let l=ze(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=Due(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=m$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),Lue(l,lx,!1),el.showBranches&&p$e(l,s),d$e(l,lx),Lue(l,lx,!0),Ut.insertTitle(l,"gitTitleText",el.titleTopMargin??0,a.getDiagramTitle()),a7(void 0,l,el.diagramPadding,el.useMaxWidth)},"draw"),Rue={draw:g$e}});var y$e,Iue,Oue=M(()=>{"use strict";y$e=o(t=>` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0,1,2,3,4,5,6,7].map(e=>` + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } + .label${e} { fill: ${t["git"+e]}; } + .arrow${e} { stroke: ${t["git"+e]}; } + `).join(` +`)} + + .branch { + stroke-width: 1; + stroke: ${t.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + .commit-reverse { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),Iue=y$e});var Pue={};vr(Pue,{diagram:()=>v$e});var v$e,Bue=M(()=>{"use strict";_ue();MI();Mue();Oue();v$e={parser:Aue,db:rE,renderer:Rue,styles:Iue}});var II,Gue,$ue=M(()=>{"use strict";II=function(){var t=o(function(R,S,O,N){for(O=O||{},N=R.length;N--;O[R[N]]=S);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,23],C=[1,25],A=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(S,O,N,P,F,B,$){var z=B.length-1;switch(F){case 1:return B[z-1];case 2:this.$=[];break;case 3:B[z-1].push(B[z]),this.$=B[z-1];break;case 4:case 5:this.$=B[z];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=B[z].substr(18);break;case 19:P.TopAxis(),this.$=B[z].substr(8);break;case 20:P.setAxisFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 21:P.setTickInterval(B[z].substr(13)),this.$=B[z].substr(13);break;case 22:P.setExcludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 23:P.setIncludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 24:P.setTodayMarker(B[z].substr(12)),this.$=B[z].substr(12);break;case 27:P.setDiagramTitle(B[z].substr(6)),this.$=B[z].substr(6);break;case 28:this.$=B[z].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=B[z].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(B[z].substr(8)),this.$=B[z].substr(8);break;case 33:P.addTask(B[z-1],B[z]),this.$="task";break;case 34:this.$=B[z-1],P.setClickEvent(B[z-1],B[z],null);break;case 35:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],B[z]);break;case 36:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],null),P.setLink(B[z-2],B[z]);break;case 37:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-2],B[z-1]),P.setLink(B[z-3],B[z]);break;case 38:this.$=B[z-2],P.setClickEvent(B[z-2],B[z],null),P.setLink(B[z-2],B[z-1]);break;case 39:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-1],B[z]),P.setLink(B[z-3],B[z-2]);break;case 40:this.$=B[z-1],P.setLink(B[z-1],B[z]);break;case 41:case 47:this.$=B[z-1]+" "+B[z];break;case 42:case 43:case 45:this.$=B[z-2]+" "+B[z-1]+" "+B[z];break;case 44:case 46:this.$=B[z-3]+" "+B[z-2]+" "+B[z-1]+" "+B[z];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:C,40:A},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:C,40:A},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(S,O){if(O.recoverable)this.trace(S);else{var N=new Error(S);throw N.hash=O,N}},"parseError"),parse:o(function(S){var O=this,N=[0],P=[],F=[null],B=[],$=this.table,z="",W=0,j=0,K=0,ie=2,Q=1,ee=B.slice.call(arguments,1),J=Object.create(this.lexer),H={yy:{}};for(var q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,q)&&(H.yy[q]=this.yy[q]);J.setInput(S,H.yy),H.yy.lexer=J,H.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var Z=J.yylloc;B.push(Z);var ae=J.options&&J.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ue(he){N.length=N.length-2*he,F.length=F.length-he,B.length=B.length-he}o(ue,"popStack");function ce(){var he;return he=P.pop()||J.lex()||Q,typeof he!="number"&&(he instanceof Array&&(P=he,he=P.pop()),he=O.symbols_[he]||he),he}o(ce,"lex");for(var te,De,oe,ke,Fe,Be,Ve={},Ge,He,xe,X;;){if(oe=N[N.length-1],this.defaultActions[oe]?ke=this.defaultActions[oe]:((te===null||typeof te>"u")&&(te=ce()),ke=$[oe]&&$[oe][te]),typeof ke>"u"||!ke.length||!ke[0]){var fe="";X=[];for(Ge in $[oe])this.terminals_[Ge]&&Ge>ie&&X.push("'"+this.terminals_[Ge]+"'");J.showPosition?fe="Parse error on line "+(W+1)+`: +`+J.showPosition()+` +Expecting `+X.join(", ")+", got '"+(this.terminals_[te]||te)+"'":fe="Parse error on line "+(W+1)+": Unexpected "+(te==Q?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(fe,{text:J.match,token:this.terminals_[te]||te,line:J.yylineno,loc:Z,expected:X})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+oe+", token: "+te);switch(ke[0]){case 1:N.push(te),F.push(J.yytext),B.push(J.yylloc),N.push(ke[1]),te=null,De?(te=De,De=null):(j=J.yyleng,z=J.yytext,W=J.yylineno,Z=J.yylloc,K>0&&K--);break;case 2:if(He=this.productions_[ke[1]][1],Ve.$=F[F.length-He],Ve._$={first_line:B[B.length-(He||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(He||1)].first_column,last_column:B[B.length-1].last_column},ae&&(Ve._$.range=[B[B.length-(He||1)].range[0],B[B.length-1].range[1]]),Be=this.performAction.apply(Ve,[z,j,W,H.yy,ke[1],F,B].concat(ee)),typeof Be<"u")return Be;He&&(N=N.slice(0,-1*He*2),F=F.slice(0,-1*He),B=B.slice(0,-1*He)),N.push(this.productions_[ke[1]][0]),F.push(Ve.$),B.push(Ve._$),xe=$[N[N.length-2]][N[N.length-1]],N.push(xe);break;case 3:return!0}}return!0},"parse")},D=function(){var R={EOF:1,parseError:o(function(O,N){if(this.yy.parser)this.yy.parser.parseError(O,N);else throw new Error(O)},"parseError"),setInput:o(function(S,O){return this.yy=O||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var O=S.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var O=S.length,N=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),N.length-1&&(this.yylineno-=N.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===P.length?this.yylloc.first_column:0)+P[P.length-N.length].length-N[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),O=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+O+"^"},"showPosition"),test_match:o(function(S,O){var N,P,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),P=S[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],N=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var B in F)this[B]=F[B];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,O,N,P;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),B=0;BO[0].length)){if(O=N,P=B,this.options.backtrack_lexer){if(S=this.test_match(N,F[B]),S!==!1)return S;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(S=this.test_match(O,F[P]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,N,P,F){var B=F;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return R}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();II.parser=II;Gue=II});var Vue=Ni((OI,PI)=>{"use strict";(function(t,e){typeof OI=="object"&&typeof PI<"u"?PI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(OI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var Uue=Ni((BI,FI)=>{"use strict";(function(t,e){typeof BI=="object"&&typeof FI<"u"?FI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(BI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(C,A,I){var D=I&&I.toUpperCase();return A||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,R,S){return R||S.slice(1)})})).match(e),b=x.length,w=0;w-1)return new Date((N==="X"?1e3:1)*O);var B=m(N)(O),$=B.year,z=B.month,W=B.day,j=B.hours,K=B.minutes,ie=B.seconds,Q=B.milliseconds,ee=B.zone,J=B.week,H=new Date,q=W||($||z?1:H.getDate()),Z=$||H.getFullYear(),ae=0;$&&!z||(ae=z>0?z-1:H.getMonth());var ue,ce=j||0,te=K||0,De=ie||0,oe=Q||0;return ee?new Date(Date.UTC(Z,ae,q,ce,te,De,oe+60*ee.offset*1e3)):P?new Date(Date.UTC(Z,ae,q,ce,te,De,oe)):(ue=new Date(Z,ae,q,ce,te,De,oe),J&&(ue=F(ue).week(J).toDate()),ue)}catch{return new Date("")}}(_,L,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&_!=this.format(L)&&(this.$d=new Date("")),s={}}else if(L instanceof Array)for(var k=L.length,R=1;R<=k;R+=1){E[1]=L[R-1];var S=v.apply(this,E);if(S.isValid()){this.$d=S.$d,this.$L=S.$L,this.init();break}R===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var Hue=Ni((zI,GI)=>{"use strict";(function(t,e){typeof zI=="object"&&typeof GI<"u"?GI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(zI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function she(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var que,ho,Xue,jue,Kue,Wue,Bc,HI,WI,YI,ux,hx,qI,XI,oE,Mg,jI,Que,KI,fx,QI,ZI,lE,$I,T$e,k$e,E$e,S$e,C$e,A$e,_$e,L$e,D$e,N$e,R$e,M$e,I$e,O$e,P$e,B$e,F$e,z$e,G$e,$$e,V$e,U$e,H$e,Zue,W$e,Y$e,q$e,Jue,X$e,VI,ehe,the,aE,Rg,j$e,K$e,UI,sE,Vi,rhe,Q$e,w0,Z$e,Yue,J$e,nhe,eVe,ihe,tVe,rVe,ahe,ohe=M(()=>{"use strict";que=ka(Fp(),1),ho=ka(Ab(),1),Xue=ka(Vue(),1),jue=ka(Uue(),1),Kue=ka(Hue(),1);ht();Vt();hr();ki();ho.default.extend(Xue.default);ho.default.extend(jue.default);ho.default.extend(Kue.default);Wue={friday:5,saturday:6},Bc="",HI="",YI="",ux=[],hx=[],qI=new Map,XI=[],oE=[],Mg="",jI="",Que=["active","done","crit","milestone"],KI=[],fx=!1,QI=!1,ZI="sunday",lE="saturday",$I=0,T$e=o(function(){XI=[],oE=[],Mg="",KI=[],aE=0,UI=void 0,sE=void 0,Vi=[],Bc="",HI="",jI="",WI=void 0,YI="",ux=[],hx=[],fx=!1,QI=!1,$I=0,qI=new Map,_r(),ZI="sunday",lE="saturday"},"clear"),k$e=o(function(t){HI=t},"setAxisFormat"),E$e=o(function(){return HI},"getAxisFormat"),S$e=o(function(t){WI=t},"setTickInterval"),C$e=o(function(){return WI},"getTickInterval"),A$e=o(function(t){YI=t},"setTodayMarker"),_$e=o(function(){return YI},"getTodayMarker"),L$e=o(function(t){Bc=t},"setDateFormat"),D$e=o(function(){fx=!0},"enableInclusiveEndDates"),N$e=o(function(){return fx},"endDatesAreInclusive"),R$e=o(function(){QI=!0},"enableTopAxis"),M$e=o(function(){return QI},"topAxisEnabled"),I$e=o(function(t){jI=t},"setDisplayMode"),O$e=o(function(){return jI},"getDisplayMode"),P$e=o(function(){return Bc},"getDateFormat"),B$e=o(function(t){ux=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),F$e=o(function(){return ux},"getIncludes"),z$e=o(function(t){hx=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),G$e=o(function(){return hx},"getExcludes"),$$e=o(function(){return qI},"getLinks"),V$e=o(function(t){Mg=t,XI.push(t)},"addSection"),U$e=o(function(){return XI},"getSections"),H$e=o(function(){let t=Yue(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=w0(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,ho.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),ehe=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),the=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=w0(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),qI.set(n,r))}),nhe(t,"clickable")},"setLink"),nhe=o(function(t,e){t.split(",").forEach(function(r){let n=w0(r);n!==void 0&&n.classes.push(e)})},"setClass"),eVe=o(function(t,e,r){if(de().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Ut.runFunc(e,...n)})},"setClickFun"),ihe=o(function(t,e){KI.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),tVe=o(function(t,e,r){t.split(",").forEach(function(n){eVe(n,e,r)}),nhe(t,"clickable")},"setClickEvent"),rVe=o(function(t){KI.forEach(function(e){e(t)})},"bindFunctions"),ahe={getConfig:o(()=>de().gantt,"getConfig"),clear:T$e,setDateFormat:L$e,getDateFormat:P$e,enableInclusiveEndDates:D$e,endDatesAreInclusive:N$e,enableTopAxis:R$e,topAxisEnabled:M$e,setAxisFormat:k$e,getAxisFormat:E$e,setTickInterval:S$e,getTickInterval:C$e,setTodayMarker:A$e,getTodayMarker:_$e,setAccTitle:Rr,getAccTitle:Pr,setDiagramTitle:ln,getDiagramTitle:Jr,setDisplayMode:I$e,getDisplayMode:O$e,setAccDescription:Br,getAccDescription:Fr,addSection:V$e,getSections:U$e,getTasks:H$e,addTask:Q$e,findTaskById:w0,addTaskOrg:Z$e,setIncludes:B$e,getIncludes:F$e,setExcludes:z$e,getExcludes:G$e,setClickEvent:tVe,setLink:J$e,getLinks:$$e,bindFunctions:rVe,parseDuration:ehe,isInvalidDate:Zue,setWeekday:W$e,getWeekday:Y$e,setWeekend:q$e};o(she,"getTaskTags")});var cE,nVe,lhe,iVe,Uu,aVe,che,uhe=M(()=>{"use strict";cE=ka(Ab(),1);ht();mr();fr();Vt();ni();nVe=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),lhe={monday:Th,tuesday:b3,wednesday:w3,thursday:cc,friday:T3,saturday:k3,sunday:wl},iVe=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),aVe=o(function(t,e,r,n){let i=de().gantt,a=de().securityLevel,s;a==="sandbox"&&(s=ze("#i"+e));let l=a==="sandbox"?ze(s.nodes()[0].contentDocument.body):ze("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Uu=h.parentElement.offsetWidth,Uu===void 0&&(Uu=1200),i.useWidth!==void 0&&(Uu=i.useWidth);let f=n.db.getTasks(),d=[];for(let C of f)d.push(C.type);d=L(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let C={};for(let I of f)C[I.section]===void 0?C[I.section]=[I]:C[I.section].push(I);let A=0;for(let I of Object.keys(C)){let D=iVe(C[I],A)+1;A+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let C of d)p[C]=f.filter(A=>A.type===C).length}h.setAttribute("viewBox","0 0 "+Uu+" "+m);let g=l.select(`[id="${e}"]`),y=C3().domain([N4(f,function(C){return C.startTime}),D4(f,function(C){return C.endTime})]).rangeRound([0,Uu-i.leftPadding-i.rightPadding]);function v(C,A){let I=C.startTime,D=A.startTime,k=0;return I>D?k=1:I$.order))].map($=>C.find(z=>z.order===$));g.append("g").selectAll("rect").data(N).enter().append("rect").attr("x",0).attr("y",function($,z){return z=$.order,z*A+I-2}).attr("width",function(){return S-i.rightPadding/2}).attr("height",A).attr("class",function($){for(let[z,W]of d.entries())if($.type===W)return"section section"+z%i.numberSectionStyles;return"section section0"});let P=g.append("g").selectAll("rect").data(C).enter(),F=n.db.getLinks();if(P.append("rect").attr("id",function($){return $.id}).attr("rx",3).attr("ry",3).attr("x",function($){return $.milestone?y($.startTime)+D+.5*(y($.endTime)-y($.startTime))-.5*k:y($.startTime)+D}).attr("y",function($,z){return z=$.order,z*A+I}).attr("width",function($){return $.milestone?k:y($.renderEndTime||$.endTime)-y($.startTime)}).attr("height",k).attr("transform-origin",function($,z){return z=$.order,(y($.startTime)+D+.5*(y($.endTime)-y($.startTime))).toString()+"px "+(z*A+I+.5*k).toString()+"px"}).attr("class",function($){let z="task",W="";$.classes.length>0&&(W=$.classes.join(" "));let j=0;for(let[ie,Q]of d.entries())$.type===Q&&(j=ie%i.numberSectionStyles);let K="";return $.active?$.crit?K+=" activeCrit":K=" active":$.done?$.crit?K=" doneCrit":K=" done":$.crit&&(K+=" crit"),K.length===0&&(K=" task"),$.milestone&&(K=" milestone "+K),K+=j,K+=" "+W,z+K}),P.append("text").attr("id",function($){return $.id+"-text"}).text(function($){return $.task}).attr("font-size",i.fontSize).attr("x",function($){let z=y($.startTime),W=y($.renderEndTime||$.endTime);$.milestone&&(z+=.5*(y($.endTime)-y($.startTime))-.5*k),$.milestone&&(W=z+k);let j=this.getBBox().width;return j>W-z?W+j+1.5*i.leftPadding>S?z+D-5:W+D+5:(W-z)/2+z+D}).attr("y",function($,z){return z=$.order,z*A+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function($){let z=y($.startTime),W=y($.endTime);$.milestone&&(W=z+k);let j=this.getBBox().width,K="";$.classes.length>0&&(K=$.classes.join(" "));let ie=0;for(let[ee,J]of d.entries())$.type===J&&(ie=ee%i.numberSectionStyles);let Q="";return $.active&&($.crit?Q="activeCritText"+ie:Q="activeText"+ie),$.done?$.crit?Q=Q+" doneCritText"+ie:Q=Q+" doneText"+ie:$.crit&&(Q=Q+" critText"+ie),$.milestone&&(Q+=" milestoneText"),j>W-z?W+j+1.5*i.leftPadding>S?K+" taskTextOutsideLeft taskTextOutside"+ie+" "+Q:K+" taskTextOutsideRight taskTextOutside"+ie+" "+Q+" width-"+j:K+" taskText taskText"+ie+" "+Q+" width-"+j}),de().securityLevel==="sandbox"){let $;$=ze("#i"+e);let z=$.nodes()[0].contentDocument;P.filter(function(W){return F.has(W.id)}).each(function(W){var j=z.querySelector("#"+W.id),K=z.querySelector("#"+W.id+"-text");let ie=j.parentNode;var Q=z.createElement("a");Q.setAttribute("xlink:href",F.get(W.id)),Q.setAttribute("target","_top"),ie.appendChild(Q),Q.appendChild(j),Q.appendChild(K)})}}o(b,"drawRects");function w(C,A,I,D,k,R,S,O){if(S.length===0&&O.length===0)return;let N,P;for(let{startTime:j,endTime:K}of R)(N===void 0||jP)&&(P=K);if(!N||!P)return;if((0,cE.default)(P).diff((0,cE.default)(N),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),B=[],$=null,z=(0,cE.default)(N);for(;z.valueOf()<=P;)n.db.isInvalidDate(z,F,S,O)?$?$.end=z:$={start:z,end:z}:$&&(B.push($),$=null),z=z.add(1,"d");g.append("g").selectAll("rect").data(B).enter().append("rect").attr("id",function(j){return"exclude-"+j.start.format("YYYY-MM-DD")}).attr("x",function(j){return y(j.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(j){let K=j.end.add(1,"day");return y(K)-y(j.start)}).attr("height",k-A-i.gridLineStartPadding).attr("transform-origin",function(j,K){return(y(j.start)+I+.5*(y(j.end)-y(j.start))).toString()+"px "+(K*C+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function _(C,A,I,D){let k=v7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(dd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),S=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(S!==null){let O=S[1],N=S[2],P=n.db.getWeekday()||i.weekday;switch(N){case"millisecond":k.ticks(oc.every(O));break;case"second":k.ticks(Xs.every(O));break;case"minute":k.ticks(mu.every(O));break;case"hour":k.ticks(gu.every(O));break;case"day":k.ticks(Lo.every(O));break;case"week":k.ticks(lhe[P].every(O));break;case"month":k.ticks(yu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+C+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=y7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(dd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(S!==null){let N=S[1],P=S[2],F=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":O.ticks(oc.every(N));break;case"second":O.ticks(Xs.every(N));break;case"minute":O.ticks(mu.every(N));break;case"hour":O.ticks(gu.every(N));break;case"day":O.ticks(Lo.every(N));break;case"week":O.ticks(lhe[F].every(N));break;case"month":O.ticks(yu.every(N));break}}g.append("g").attr("class","grid").attr("transform","translate("+C+", "+A+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(_,"makeGrid");function T(C,A){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let R=k[0].split(je.lineBreakRegex),S=-(R.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",S+"em");for(let[N,P]of R.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),N>0&&F.setAttribute("dy","1em"),F.textContent=P,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,R){if(R>0)for(let S=0;S{"use strict";sVe=o(t=>` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${t.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${t.sectionBkgColor}; + } + + .section2 { + fill: ${t.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${t.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${t.titleColor}; + } + + .sectionTitle1 { + fill: ${t.titleColor}; + } + + .sectionTitle2 { + fill: ${t.titleColor}; + } + + .sectionTitle3 { + fill: ${t.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${t.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${t.fontFamily}; + fill: ${t.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${t.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${t.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${t.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${t.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${t.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${t.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.titleColor||t.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`,"getStyles"),hhe=sVe});var dhe={};vr(dhe,{diagram:()=>oVe});var oVe,phe=M(()=>{"use strict";$ue();ohe();uhe();fhe();oVe={parser:Gue,db:ahe,renderer:che,styles:hhe}});var yhe,vhe=M(()=>{"use strict";Ng();ht();yhe={parse:o(async t=>{let e=await Gl("info",t);Y.debug(e)},"parse")}});var dx,JI=M(()=>{dx="11.4.1"});var fVe,dVe,xhe,bhe=M(()=>{"use strict";JI();fVe={version:dx},dVe=o(()=>fVe.version,"getVersion"),xhe={getVersion:dVe}});var Oa,Hu=M(()=>{"use strict";mr();Vt();Oa=o(t=>{let{securityLevel:e}=de(),r=ze("body");if(e==="sandbox"){let a=ze(`#i${t}`).node()?.contentDocument??document;r=ze(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var pVe,whe,The=M(()=>{"use strict";ht();Hu();ni();pVe=o((t,e,r)=>{Y.debug(`rendering info diagram +`+t);let n=Oa(e);Zr(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),whe={draw:pVe}});var khe={};vr(khe,{diagram:()=>mVe});var mVe,Ehe=M(()=>{"use strict";vhe();bhe();The();mVe={parser:yhe,db:xhe,renderer:whe}});var Ahe,eO,uE,tO,vVe,xVe,bVe,wVe,TVe,kVe,EVe,hE,rO=M(()=>{"use strict";ht();ki();hs();Ahe=ur.pie,eO={sections:new Map,showData:!1,config:Ahe},uE=eO.sections,tO=eO.showData,vVe=structuredClone(Ahe),xVe=o(()=>structuredClone(vVe),"getConfig"),bVe=o(()=>{uE=new Map,tO=eO.showData,_r()},"clear"),wVe=o(({label:t,value:e})=>{uE.has(t)||(uE.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),TVe=o(()=>uE,"getSections"),kVe=o(t=>{tO=t},"setShowData"),EVe=o(()=>tO,"getShowData"),hE={getConfig:xVe,clear:bVe,setDiagramTitle:ln,getDiagramTitle:Jr,setAccTitle:Rr,getAccTitle:Pr,setAccDescription:Br,getAccDescription:Fr,addSection:wVe,getSections:TVe,setShowData:kVe,getShowData:EVe}});var SVe,_he,Lhe=M(()=>{"use strict";Ng();ht();ox();rO();SVe=o((t,e)=>{lf(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),_he={parse:o(async t=>{let e=await Gl("pie",t);Y.debug(e),SVe(e,hE)},"parse")}});var CVe,Dhe,Nhe=M(()=>{"use strict";CVe=o(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),Dhe=CVe});var AVe,_Ve,Rhe,Mhe=M(()=>{"use strict";mr();Vt();ht();Hu();ni();hr();AVe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return R3().value(n=>n.value)(e)},"createPieArcs"),_Ve=o((t,e,r,n)=>{Y.debug(`rendering pie chart +`+t);let i=n.db,a=de(),s=ws(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Oa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Fo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=El().innerRadius(0).outerRadius(x),w=El().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let _=i.getSections(),T=AVe(_),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],L=du(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>L(k.data.label)).attr("class","pieCircle");let C=0;_.forEach(k=>{C+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/C*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let A=m.selectAll(".legend").data(L.domain()).enter().append("g").attr("class","legend").attr("transform",(k,R)=>{let S=u+h,O=S*L.domain().length/2,N=12*u,P=R*S-O;return"translate("+N+","+P+")"});A.append("rect").attr("width",u).attr("height",u).style("fill",L).style("stroke",L),A.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:R,value:S}=k.data;return i.getShowData()?`${R} [${S}]`:R});let I=Math.max(...A.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),Zr(p,f,D,s.useMaxWidth)},"draw"),Rhe={draw:_Ve}});var Ihe={};vr(Ihe,{diagram:()=>LVe});var LVe,Ohe=M(()=>{"use strict";Lhe();rO();Nhe();Mhe();LVe={parser:_he,db:hE,renderer:Rhe,styles:Dhe}});var nO,Fhe,zhe=M(()=>{"use strict";nO=function(){var t=o(function(Te,se,Ee,Ae){for(Ee=Ee||{},Ae=Te.length;Ae--;Ee[Te[Ae]]=se);return Ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,24],C=[1,25],A=[1,26],I=[1,27],D=[1,28],k=[1,29],R=[1,32],S=[1,33],O=[1,34],N=[1,39],P=[1,40],F=[1,42],B=[1,44],$=[1,62],z=[1,61],W=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],j=[1,65],K=[1,66],ie=[1,67],Q=[1,68],ee=[1,69],J=[1,70],H=[1,71],q=[1,72],Z=[1,73],ae=[1,74],ue=[1,75],ce=[1,76],te=[4,5,6,7,8,9,10,11,12,13,14,15,18],De=[1,90],oe=[1,91],ke=[1,92],Fe=[1,99],Be=[1,93],Ve=[1,96],Ge=[1,94],He=[1,95],xe=[1,97],X=[1,98],fe=[1,102],he=[10,55,56,57],ge=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(se,Ee,Ae,Pe,Me,me,We){var Re=me.length-1;switch(Me){case 23:this.$=me[Re];break;case 24:this.$=me[Re-1]+""+me[Re];break;case 26:this.$=me[Re-1]+me[Re];break;case 27:this.$=[me[Re].trim()];break;case 28:me[Re-2].push(me[Re].trim()),this.$=me[Re-2];break;case 29:this.$=me[Re-4],Pe.addClass(me[Re-2],me[Re]);break;case 37:this.$=[];break;case 42:this.$=me[Re].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=me[Re].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=me[Re].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(me[Re].substr(8)),this.$=me[Re].substr(8);break;case 47:Pe.addPoint(me[Re-3],"",me[Re-1],me[Re],[]);break;case 48:Pe.addPoint(me[Re-4],me[Re-3],me[Re-1],me[Re],[]);break;case 49:Pe.addPoint(me[Re-4],"",me[Re-2],me[Re-1],me[Re]);break;case 50:Pe.addPoint(me[Re-5],me[Re-4],me[Re-2],me[Re-1],me[Re]);break;case 51:Pe.setXAxisLeftText(me[Re-2]),Pe.setXAxisRightText(me[Re]);break;case 52:me[Re-1].text+=" \u27F6 ",Pe.setXAxisLeftText(me[Re-1]);break;case 53:Pe.setXAxisLeftText(me[Re]);break;case 54:Pe.setYAxisBottomText(me[Re-2]),Pe.setYAxisTopText(me[Re]);break;case 55:me[Re-1].text+=" \u27F6 ",Pe.setYAxisBottomText(me[Re-1]);break;case 56:Pe.setYAxisBottomText(me[Re]);break;case 57:Pe.setQuadrant1Text(me[Re]);break;case 58:Pe.setQuadrant2Text(me[Re]);break;case 59:Pe.setQuadrant3Text(me[Re]);break;case 60:Pe.setQuadrant4Text(me[Re]);break;case 64:this.$={text:me[Re],type:"text"};break;case 65:this.$={text:me[Re-1].text+""+me[Re],type:me[Re-1].type};break;case 66:this.$={text:me[Re],type:"text"};break;case 67:this.$={text:me[Re],type:"markdown"};break;case 68:this.$=me[Re];break;case 69:this.$=me[Re-1]+""+me[Re];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:C,51:A,52:I,53:D,54:k,60:R,61:S,63:O,64:N,65:P,66:F,67:B}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:C,51:A,52:I,53:D,54:k,60:R,61:S,63:O,64:N,65:P,66:F,67:B}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:R,61:S,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,44:[1,57],47:[1,58],58:60,59:59,63:O,64:N,65:P,66:F,67:B},t(W,[2,64]),t(W,[2,66]),t(W,[2,67]),t(W,[2,70]),t(W,[2,71]),t(W,[2,72]),t(W,[2,73]),t(W,[2,74]),t(W,[2,75]),t(W,[2,76]),t(W,[2,77]),t(W,[2,78]),t(W,[2,79]),t(W,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:j,5:K,6:ie,7:Q,8:ee,9:J,10:H,11:q,12:Z,13:ae,14:ue,15:ce,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,49:[1,77],63:O,64:N,65:P,66:F,67:B}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,49:[1,78],63:O,64:N,65:P,66:F,67:B}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),{45:[1,79]},{44:[1,80]},t(W,[2,65]),t(W,[2,81]),t(W,[2,82]),t(W,[2,83]),{3:82,4:j,5:K,6:ie,7:Q,8:ee,9:J,10:H,11:q,12:Z,13:ae,14:ue,15:ce,18:[1,81]},t(te,[2,23]),t(te,[2,1]),t(te,[2,2]),t(te,[2,3]),t(te,[2,4]),t(te,[2,5]),t(te,[2,6]),t(te,[2,7]),t(te,[2,8]),t(te,[2,9]),t(te,[2,10]),t(te,[2,11]),t(te,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:S,63:O,64:N,65:P,66:F,67:B}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:S,63:O,64:N,65:P,66:F,67:B}),{46:[1,85]},{45:[1,86]},{4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,16:89,17:Ge,18:He,19:xe,20:X,22:88,23:87},t(te,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:$,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,47],{22:88,16:89,23:100,4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,17:Ge,18:He,19:xe,20:X}),{46:[1,101]},t(u,[2,29],{10:fe}),t(he,[2,27],{16:103,4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,17:Ge,18:He,19:xe,20:X}),t(ge,[2,25]),t(ge,[2,13]),t(ge,[2,14]),t(ge,[2,15]),t(ge,[2,16]),t(ge,[2,17]),t(ge,[2,18]),t(ge,[2,19]),t(ge,[2,20]),t(ge,[2,21]),t(ge,[2,22]),t(u,[2,49],{10:fe}),t(u,[2,48],{22:88,16:89,23:104,4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,17:Ge,18:He,19:xe,20:X}),{4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,16:89,17:Ge,18:He,19:xe,20:X,22:105},t(ge,[2,26]),t(u,[2,50],{10:fe}),t(he,[2,28],{16:103,4:De,5:oe,6:ke,8:Fe,11:Be,13:Ve,17:Ge,18:He,19:xe,20:X})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(se,Ee){if(Ee.recoverable)this.trace(se);else{var Ae=new Error(se);throw Ae.hash=Ee,Ae}},"parseError"),parse:o(function(se){var Ee=this,Ae=[0],Pe=[],Me=[null],me=[],We=this.table,Re="",tt=0,gt=0,Et=0,vt=2,Ye=1,Tt=me.slice.call(arguments,1),$e=Object.create(this.lexer),rt={yy:{}};for(var ft in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ft)&&(rt.yy[ft]=this.yy[ft]);$e.setInput(se,rt.yy),rt.yy.lexer=$e,rt.yy.parser=this,typeof $e.yylloc>"u"&&($e.yylloc={});var kt=$e.yylloc;me.push(kt);var er=$e.options&&$e.options.ranges;typeof rt.yy.parseError=="function"?this.parseError=rt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(Se){Ae.length=Ae.length-2*Se,Me.length=Me.length-Se,me.length=me.length-Se}o(dt,"popStack");function Xe(){var Se;return Se=Pe.pop()||$e.lex()||Ye,typeof Se!="number"&&(Se instanceof Array&&(Pe=Se,Se=Pe.pop()),Se=Ee.symbols_[Se]||Se),Se}o(Xe,"lex");for(var ct,Lt,Rt,zt,Xn,or,hn={},Tn,Ur,ri,Mn;;){if(Rt=Ae[Ae.length-1],this.defaultActions[Rt]?zt=this.defaultActions[Rt]:((ct===null||typeof ct>"u")&&(ct=Xe()),zt=We[Rt]&&We[Rt][ct]),typeof zt>"u"||!zt.length||!zt[0]){var yt="";Mn=[];for(Tn in We[Rt])this.terminals_[Tn]&&Tn>vt&&Mn.push("'"+this.terminals_[Tn]+"'");$e.showPosition?yt="Parse error on line "+(tt+1)+`: +`+$e.showPosition()+` +Expecting `+Mn.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":yt="Parse error on line "+(tt+1)+": Unexpected "+(ct==Ye?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(yt,{text:$e.match,token:this.terminals_[ct]||ct,line:$e.yylineno,loc:kt,expected:Mn})}if(zt[0]instanceof Array&&zt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Rt+", token: "+ct);switch(zt[0]){case 1:Ae.push(ct),Me.push($e.yytext),me.push($e.yylloc),Ae.push(zt[1]),ct=null,Lt?(ct=Lt,Lt=null):(gt=$e.yyleng,Re=$e.yytext,tt=$e.yylineno,kt=$e.yylloc,Et>0&&Et--);break;case 2:if(Ur=this.productions_[zt[1]][1],hn.$=Me[Me.length-Ur],hn._$={first_line:me[me.length-(Ur||1)].first_line,last_line:me[me.length-1].last_line,first_column:me[me.length-(Ur||1)].first_column,last_column:me[me.length-1].last_column},er&&(hn._$.range=[me[me.length-(Ur||1)].range[0],me[me.length-1].range[1]]),or=this.performAction.apply(hn,[Re,gt,tt,rt.yy,zt[1],Me,me].concat(Tt)),typeof or<"u")return or;Ur&&(Ae=Ae.slice(0,-1*Ur*2),Me=Me.slice(0,-1*Ur),me=me.slice(0,-1*Ur)),Ae.push(this.productions_[zt[1]][0]),Me.push(hn.$),me.push(hn._$),ri=We[Ae[Ae.length-2]][Ae[Ae.length-1]],Ae.push(ri);break;case 3:return!0}}return!0},"parse")},ye=function(){var Te={EOF:1,parseError:o(function(Ee,Ae){if(this.yy.parser)this.yy.parser.parseError(Ee,Ae);else throw new Error(Ee)},"parseError"),setInput:o(function(se,Ee){return this.yy=Ee||this.yy||{},this._input=se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var se=this._input[0];this.yytext+=se,this.yyleng++,this.offset++,this.match+=se,this.matched+=se;var Ee=se.match(/(?:\r\n?|\n).*/g);return Ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),se},"input"),unput:o(function(se){var Ee=se.length,Ae=se.split(/(?:\r\n?|\n)/g);this._input=se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ee),this.offset-=Ee;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ae.length-1&&(this.yylineno-=Ae.length-1);var Me=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ae?(Ae.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-Ae.length].length-Ae[0].length:this.yylloc.first_column-Ee},this.options.ranges&&(this.yylloc.range=[Me[0],Me[0]+this.yyleng-Ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(se){this.unput(this.match.slice(se))},"less"),pastInput:o(function(){var se=this.matched.substr(0,this.matched.length-this.match.length);return(se.length>20?"...":"")+se.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var se=this.match;return se.length<20&&(se+=this._input.substr(0,20-se.length)),(se.substr(0,20)+(se.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var se=this.pastInput(),Ee=new Array(se.length+1).join("-");return se+this.upcomingInput()+` +`+Ee+"^"},"showPosition"),test_match:o(function(se,Ee){var Ae,Pe,Me;if(this.options.backtrack_lexer&&(Me={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Me.yylloc.range=this.yylloc.range.slice(0))),Pe=se[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+se[0].length},this.yytext+=se[0],this.match+=se[0],this.matches=se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(se[0].length),this.matched+=se[0],Ae=this.performAction.call(this,this.yy,this,Ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ae)return Ae;if(this._backtrack){for(var me in Me)this[me]=Me[me];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var se,Ee,Ae,Pe;this._more||(this.yytext="",this.match="");for(var Me=this._currentRules(),me=0;meEe[0].length)){if(Ee=Ae,Pe=me,this.options.backtrack_lexer){if(se=this.test_match(Ae,Me[me]),se!==!1)return se;if(this._backtrack){Ee=!1;continue}else return!1}else if(!this.options.flex)break}return Ee?(se=this.test_match(Ee,Me[Pe]),se!==!1?se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ee=this.next();return Ee||this.lex()},"lex"),begin:o(function(Ee){this.conditionStack.push(Ee)},"begin"),popState:o(function(){var Ee=this.conditionStack.length-1;return Ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ee){return Ee=this.conditionStack.length-1-Math.abs(Ee||0),Ee>=0?this.conditionStack[Ee]:"INITIAL"},"topState"),pushState:o(function(Ee){this.begin(Ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ee,Ae,Pe,Me){var me=Me;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return Te}();ne.lexer=ye;function U(){this.yy={}}return o(U,"Parser"),U.prototype=ne,ne.Parser=U,new U}();nO.parser=nO;Fhe=nO});var os,fE,Ghe=M(()=>{"use strict";mr();hs();ht();Ub();os=sp(),fE=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:ur.quadrantChart?.chartWidth||500,chartWidth:ur.quadrantChart?.chartHeight||500,titlePadding:ur.quadrantChart?.titlePadding||10,titleFontSize:ur.quadrantChart?.titleFontSize||20,quadrantPadding:ur.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:ur.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:ur.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:ur.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:ur.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:ur.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:ur.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:ur.quadrantChart?.pointTextPadding||5,pointLabelFontSize:ur.quadrantChart?.pointLabelFontSize||12,pointRadius:ur.quadrantChart?.pointRadius||5,xAxisPosition:ur.quadrantChart?.xAxisPosition||"top",yAxisPosition:ur.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:ur.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:ur.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:os.quadrant1Fill,quadrant2Fill:os.quadrant2Fill,quadrant3Fill:os.quadrant3Fill,quadrant4Fill:os.quadrant4Fill,quadrant1TextFill:os.quadrant1TextFill,quadrant2TextFill:os.quadrant2TextFill,quadrant3TextFill:os.quadrant3TextFill,quadrant4TextFill:os.quadrant4TextFill,quadrantPointFill:os.quadrantPointFill,quadrantPointTextFill:os.quadrantPointTextFill,quadrantXAxisTextFill:os.quadrantXAxisTextFill,quadrantYAxisTextFill:os.quadrantYAxisTextFill,quadrantTitleFill:os.quadrantTitleFill,quadrantInternalBorderStrokeFill:os.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:os.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=bl().domain([0,1]).range([i,s+i]),u=bl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function iO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function $he(t){return!/^\d+$/.test(t)}function Vhe(t){return!/^\d+px$/.test(t)}var T0,Uhe=M(()=>{"use strict";T0=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(iO,"validateHexCode");o($he,"validateNumber");o(Vhe,"validateSizeInPixels")});function Wu(t){return Tr(t.trim(),RVe)}function MVe(t){ya.setData({quadrant1Text:Wu(t.text)})}function IVe(t){ya.setData({quadrant2Text:Wu(t.text)})}function OVe(t){ya.setData({quadrant3Text:Wu(t.text)})}function PVe(t){ya.setData({quadrant4Text:Wu(t.text)})}function BVe(t){ya.setData({xAxisLeftText:Wu(t.text)})}function FVe(t){ya.setData({xAxisRightText:Wu(t.text)})}function zVe(t){ya.setData({yAxisTopText:Wu(t.text)})}function GVe(t){ya.setData({yAxisBottomText:Wu(t.text)})}function aO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if($he(i))throw new T0(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(iO(i))throw new T0(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(iO(i))throw new T0(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(Vhe(i))throw new T0(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function $Ve(t,e,r,n,i){let a=aO(i);ya.addPoints([{x:r,y:n,text:Wu(t.text),className:e,...a}])}function VVe(t,e){ya.addClass(t,aO(e))}function UVe(t){ya.setConfig({chartWidth:t})}function HVe(t){ya.setConfig({chartHeight:t})}function WVe(){let t=de(),{themeVariables:e,quadrantChart:r}=t;return r&&ya.setConfig(r),ya.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ya.setData({titleText:Jr()}),ya.build()}var RVe,ya,YVe,Hhe,Whe=M(()=>{"use strict";Vt();fr();ki();Ghe();Uhe();RVe=de();o(Wu,"textSanitizer");ya=new fE;o(MVe,"setQuadrant1Text");o(IVe,"setQuadrant2Text");o(OVe,"setQuadrant3Text");o(PVe,"setQuadrant4Text");o(BVe,"setXAxisLeftText");o(FVe,"setXAxisRightText");o(zVe,"setYAxisTopText");o(GVe,"setYAxisBottomText");o(aO,"parseStyles");o($Ve,"addPoint");o(VVe,"addClass");o(UVe,"setWidth");o(HVe,"setHeight");o(WVe,"getQuadrantData");YVe=o(function(){ya.clear(),_r()},"clear"),Hhe={setWidth:UVe,setHeight:HVe,setQuadrant1Text:MVe,setQuadrant2Text:IVe,setQuadrant3Text:OVe,setQuadrant4Text:PVe,setXAxisLeftText:BVe,setXAxisRightText:FVe,setYAxisTopText:zVe,setYAxisBottomText:GVe,parseStyles:aO,addPoint:$Ve,addClass:VVe,getQuadrantData:WVe,clear:YVe,setAccTitle:Rr,getAccTitle:Pr,setDiagramTitle:ln,getDiagramTitle:Jr,getAccDescription:Fr,setAccDescription:Br}});var qVe,Yhe,qhe=M(()=>{"use strict";mr();Vt();ht();ni();qVe=o((t,e,r,n)=>{function i(C){return C==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(C){return C==="left"?"start":"middle"}o(a,"getTextAnchor");function s(C){return`translate(${C.x}, ${C.y}) rotate(${C.rotation||0})`}o(s,"getTransformation");let l=de();Y.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=ze("#i"+e));let d=(u==="sandbox"?ze(h.nodes()[0].contentDocument.body):ze("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Zr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),_=p.append("g").attr("class","title");y.title&&_.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",C=>C.x1).attr("y1",C=>C.y1).attr("x2",C=>C.x2).attr("y2",C=>C.y2).style("stroke",C=>C.strokeFill).style("stroke-width",C=>C.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",C=>C.x).attr("y",C=>C.y).attr("width",C=>C.width).attr("height",C=>C.height).attr("fill",C=>C.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",C=>C.text.fill).attr("font-size",C=>C.text.fontSize).attr("dominant-baseline",C=>i(C.text.horizontalPos)).attr("text-anchor",C=>a(C.text.verticalPos)).attr("transform",C=>s(C.text)).text(C=>C.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(C=>C.text).attr("fill",C=>C.fill).attr("font-size",C=>C.fontSize).attr("dominant-baseline",C=>i(C.horizontalPos)).attr("text-anchor",C=>a(C.verticalPos)).attr("transform",C=>s(C));let L=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");L.append("circle").attr("cx",C=>C.x).attr("cy",C=>C.y).attr("r",C=>C.radius).attr("fill",C=>C.fill).attr("stroke",C=>C.strokeColor).attr("stroke-width",C=>C.strokeWidth),L.append("text").attr("x",0).attr("y",0).text(C=>C.text.text).attr("fill",C=>C.text.fill).attr("font-size",C=>C.text.fontSize).attr("dominant-baseline",C=>i(C.text.horizontalPos)).attr("text-anchor",C=>a(C.text.verticalPos)).attr("transform",C=>s(C.text))},"draw"),Yhe={draw:qVe}});var Xhe={};vr(Xhe,{diagram:()=>XVe});var XVe,jhe=M(()=>{"use strict";zhe();Whe();qhe();XVe={parser:Fhe,db:Hhe,renderer:Yhe,styles:o(()=>"","styles")}});var sO,Zhe,Jhe=M(()=>{"use strict";sO=function(){var t=o(function(O,N,P,F){for(P=P||{},F=O.length;F--;P[O[F]]=N);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],_=[1,43],T=[1,42],E=[1,47],L=[1,50],C=[1,10,12,14,16,18,19,21,23,34,35,36],A=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(N,P,F,B,$,z,W){var j=z.length-1;switch($){case 5:B.setOrientation(z[j]);break;case 9:B.setDiagramTitle(z[j].text.trim());break;case 12:B.setLineData({text:"",type:"text"},z[j]);break;case 13:B.setLineData(z[j-1],z[j]);break;case 14:B.setBarData({text:"",type:"text"},z[j]);break;case 15:B.setBarData(z[j-1],z[j]);break;case 16:this.$=z[j].trim(),B.setAccTitle(this.$);break;case 17:case 18:this.$=z[j].trim(),B.setAccDescription(this.$);break;case 19:this.$=z[j-1];break;case 20:this.$=[Number(z[j-2]),...z[j]];break;case 21:this.$=[Number(z[j])];break;case 22:B.setXAxisTitle(z[j]);break;case 23:B.setXAxisTitle(z[j-1]);break;case 24:B.setXAxisTitle({type:"text",text:""});break;case 25:B.setXAxisBand(z[j]);break;case 26:B.setXAxisRangeData(Number(z[j-2]),Number(z[j]));break;case 27:this.$=z[j-1];break;case 28:this.$=[z[j-2],...z[j]];break;case 29:this.$=[z[j]];break;case 30:B.setYAxisTitle(z[j]);break;case 31:B.setYAxisTitle(z[j-1]);break;case 32:B.setYAxisTitle({type:"text",text:""});break;case 33:B.setYAxisRangeData(Number(z[j-2]),Number(z[j]));break;case 37:this.$={text:z[j],type:"text"};break;case 38:this.$={text:z[j],type:"text"};break;case 39:this.$={text:z[j],type:"markdown"};break;case 40:this.$=z[j];break;case 41:this.$=z[j-1]+""+z[j];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:_,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(C,[2,18]),{1:[2,2]},t(C,[2,8]),t(C,[2,9]),t(A,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(A,[2,38]),t(A,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(C,[2,10]),t(C,[2,22],{30:41,29:56,24:_,27:T}),t(C,[2,24]),t(C,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(C,[2,11]),t(C,[2,30],{33:60,27:E}),t(C,[2,32]),{31:[1,61]},t(C,[2,12]),{17:62,24:L},{25:63,27:D},t(C,[2,14]),{17:65,24:L},t(C,[2,16]),t(C,[2,17]),t(I,[2,41]),t(C,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(C,[2,31]),{27:[1,69]},t(C,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(C,[2,15]),t(C,[2,26]),t(C,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(C,[2,33]),t(C,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(N,P){if(P.recoverable)this.trace(N);else{var F=new Error(N);throw F.hash=P,F}},"parseError"),parse:o(function(N){var P=this,F=[0],B=[],$=[null],z=[],W=this.table,j="",K=0,ie=0,Q=0,ee=2,J=1,H=z.slice.call(arguments,1),q=Object.create(this.lexer),Z={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(Z.yy[ae]=this.yy[ae]);q.setInput(N,Z.yy),Z.yy.lexer=q,Z.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var ue=q.yylloc;z.push(ue);var ce=q.options&&q.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function te(ne){F.length=F.length-2*ne,$.length=$.length-ne,z.length=z.length-ne}o(te,"popStack");function De(){var ne;return ne=B.pop()||q.lex()||J,typeof ne!="number"&&(ne instanceof Array&&(B=ne,ne=B.pop()),ne=P.symbols_[ne]||ne),ne}o(De,"lex");for(var oe,ke,Fe,Be,Ve,Ge,He={},xe,X,fe,he;;){if(Fe=F[F.length-1],this.defaultActions[Fe]?Be=this.defaultActions[Fe]:((oe===null||typeof oe>"u")&&(oe=De()),Be=W[Fe]&&W[Fe][oe]),typeof Be>"u"||!Be.length||!Be[0]){var ge="";he=[];for(xe in W[Fe])this.terminals_[xe]&&xe>ee&&he.push("'"+this.terminals_[xe]+"'");q.showPosition?ge="Parse error on line "+(K+1)+`: +`+q.showPosition()+` +Expecting `+he.join(", ")+", got '"+(this.terminals_[oe]||oe)+"'":ge="Parse error on line "+(K+1)+": Unexpected "+(oe==J?"end of input":"'"+(this.terminals_[oe]||oe)+"'"),this.parseError(ge,{text:q.match,token:this.terminals_[oe]||oe,line:q.yylineno,loc:ue,expected:he})}if(Be[0]instanceof Array&&Be.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Fe+", token: "+oe);switch(Be[0]){case 1:F.push(oe),$.push(q.yytext),z.push(q.yylloc),F.push(Be[1]),oe=null,ke?(oe=ke,ke=null):(ie=q.yyleng,j=q.yytext,K=q.yylineno,ue=q.yylloc,Q>0&&Q--);break;case 2:if(X=this.productions_[Be[1]][1],He.$=$[$.length-X],He._$={first_line:z[z.length-(X||1)].first_line,last_line:z[z.length-1].last_line,first_column:z[z.length-(X||1)].first_column,last_column:z[z.length-1].last_column},ce&&(He._$.range=[z[z.length-(X||1)].range[0],z[z.length-1].range[1]]),Ge=this.performAction.apply(He,[j,ie,K,Z.yy,Be[1],$,z].concat(H)),typeof Ge<"u")return Ge;X&&(F=F.slice(0,-1*X*2),$=$.slice(0,-1*X),z=z.slice(0,-1*X)),F.push(this.productions_[Be[1]][0]),$.push(He.$),z.push(He._$),fe=W[F[F.length-2]][F[F.length-1]],F.push(fe);break;case 3:return!0}}return!0},"parse")},R=function(){var O={EOF:1,parseError:o(function(P,F){if(this.yy.parser)this.yy.parser.parseError(P,F);else throw new Error(P)},"parseError"),setInput:o(function(N,P){return this.yy=P||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var P=N.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},"input"),unput:o(function(N){var P=N.length,F=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var $=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===B.length?this.yylloc.first_column:0)+B[B.length-F.length].length-F[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[$[0],$[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(N){this.unput(this.match.slice(N))},"less"),pastInput:o(function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var N=this.pastInput(),P=new Array(N.length+1).join("-");return N+this.upcomingInput()+` +`+P+"^"},"showPosition"),test_match:o(function(N,P){var F,B,$;if(this.options.backtrack_lexer&&($={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&($.yylloc.range=this.yylloc.range.slice(0))),B=N[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(N[0].length),this.matched+=N[0],F=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var z in $)this[z]=$[z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,P,F,B;this._more||(this.yytext="",this.match="");for(var $=this._currentRules(),z=0;z<$.length;z++)if(F=this._input.match(this.rules[$[z]]),F&&(!P||F[0].length>P[0].length)){if(P=F,B=z,this.options.backtrack_lexer){if(N=this.test_match(F,$[z]),N!==!1)return N;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(N=this.test_match(P,$[B]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,F,B,$){var z=$;switch(B){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=R;function S(){this.yy={}}return o(S,"Parser"),S.prototype=k,k.Parser=S,new S}();sO.parser=sO;Zhe=sO});function oO(t){return t.type==="bar"}function dE(t){return t.type==="band"}function Ig(t){return t.type==="linear"}var pE=M(()=>{"use strict";o(oO,"isBarPlot");o(dE,"isBandAxisData");o(Ig,"isLinearAxisData")});var Og,lO=M(()=>{"use strict";Dl();Og=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=gj(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var Pg,cO=M(()=>{"use strict";Pg=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var mE,efe=M(()=>{"use strict";mr();ht();cO();mE=class extends Pg{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=Lp().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Lp().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var gE,tfe=M(()=>{"use strict";mr();cO();gE=class extends Pg{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=bl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=bl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function uO(t,e,r,n){let i=new Og(n);return dE(t)?new mE(e,r,t.categories,t.title,i):new gE(e,r,[t.min,t.max],t.title,i)}var rfe=M(()=>{"use strict";pE();lO();efe();tfe();o(uO,"getAxis")});function nfe(t,e,r,n){let i=new Og(n);return new hO(i,t,e,r)}var hO,ife=M(()=>{"use strict";lO();hO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(nfe,"getChartTitleComponent")});var yE,afe=M(()=>{"use strict";mr();yE=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=Ka().y(n=>n[0]).x(n=>n[1])(e):r=Ka().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var vE,sfe=M(()=>{"use strict";vE=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function ofe(t,e,r){return new fO(t,e,r)}var fO,lfe=M(()=>{"use strict";afe();sfe();fO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new yE(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new vE(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(ofe,"getPlotComponent")});var xE,cfe=M(()=>{"use strict";rfe();ife();lfe();pE();xE=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:nfe(e,r,n,i),plot:ofe(e,r,n),xAxis:uO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:uO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>oO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>oO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var bE,ufe=M(()=>{"use strict";cfe();bE=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new xE(e,r,n,i).getDrawableElement()}}});function ffe(){let t=sp(),e=Sr();return ws(t.xyChart,e.themeVariables.xyChart)}function dfe(){let t=Sr();return ws(ur.xyChart,t.xyChart)}function pfe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function mO(t){let e=Sr();return Tr(t.trim(),e)}function ZVe(t){hfe=t}function JVe(t){t==="horizontal"?mx.chartOrientation="horizontal":mx.chartOrientation="vertical"}function eUe(t){un.xAxis.title=mO(t.text)}function mfe(t,e){un.xAxis={type:"linear",title:un.xAxis.title,min:t,max:e},wE=!0}function tUe(t){un.xAxis={type:"band",title:un.xAxis.title,categories:t.map(e=>mO(e.text))},wE=!0}function rUe(t){un.yAxis.title=mO(t.text)}function nUe(t,e){un.yAxis={type:"linear",title:un.yAxis.title,min:t,max:e},pO=!0}function iUe(t){let e=Math.min(...t),r=Math.max(...t),n=Ig(un.yAxis)?un.yAxis.min:1/0,i=Ig(un.yAxis)?un.yAxis.max:-1/0;un.yAxis={type:"linear",title:un.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function gfe(t){let e=[];if(t.length===0)return e;if(!wE){let r=Ig(un.xAxis)?un.xAxis.min:1/0,n=Ig(un.xAxis)?un.xAxis.max:-1/0;mfe(Math.min(r,1),Math.max(n,t.length))}if(pO||iUe(t),dE(un.xAxis)&&(e=un.xAxis.categories.map((r,n)=>[r,t[n]])),Ig(un.xAxis)){let r=un.xAxis.min,n=un.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function yfe(t){return dO[t===0?0:t%dO.length]}function aUe(t,e){let r=gfe(e);un.plots.push({type:"line",strokeFill:yfe(px),strokeWidth:2,data:r}),px++}function sUe(t,e){let r=gfe(e);un.plots.push({type:"bar",fill:yfe(px),data:r}),px++}function oUe(){if(un.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return un.title=Jr(),bE.build(mx,un,gx,hfe)}function lUe(){return gx}function cUe(){return mx}var px,hfe,mx,gx,un,dO,wE,pO,uUe,vfe,xfe=M(()=>{"use strict";Ua();hs();Ub();hr();fr();ki();ufe();pE();px=0,mx=dfe(),gx=ffe(),un=pfe(),dO=gx.plotColorPalette.split(",").map(t=>t.trim()),wE=!1,pO=!1;o(ffe,"getChartDefaultThemeConfig");o(dfe,"getChartDefaultConfig");o(pfe,"getChartDefaultData");o(mO,"textSanitizer");o(ZVe,"setTmpSVGG");o(JVe,"setOrientation");o(eUe,"setXAxisTitle");o(mfe,"setXAxisRangeData");o(tUe,"setXAxisBand");o(rUe,"setYAxisTitle");o(nUe,"setYAxisRangeData");o(iUe,"setYAxisRangeFromPlotData");o(gfe,"transformDataWithoutCategory");o(yfe,"getPlotColorFromPalette");o(aUe,"setLineData");o(sUe,"setBarData");o(oUe,"getDrawableElem");o(lUe,"getChartThemeConfig");o(cUe,"getChartConfig");uUe=o(function(){_r(),px=0,mx=dfe(),un=pfe(),gx=ffe(),dO=gx.plotColorPalette.split(",").map(t=>t.trim()),wE=!1,pO=!1},"clear"),vfe={getDrawableElem:oUe,clear:uUe,setAccTitle:Rr,getAccTitle:Pr,setDiagramTitle:ln,getDiagramTitle:Jr,getAccDescription:Fr,setAccDescription:Br,setOrientation:JVe,setXAxisTitle:eUe,setXAxisRangeData:mfe,setXAxisBand:tUe,setYAxisTitle:rUe,setYAxisRangeData:nUe,setLineData:aUe,setBarData:sUe,setTmpSVGG:ZVe,getChartThemeConfig:lUe,getChartConfig:cUe}});var hUe,bfe,wfe=M(()=>{"use strict";ht();Hu();ni();hUe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart +`+t);let f=Oa(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Zr(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let _=d;w>0&&g[b]&&(_=g[b]),b+=v[w],x=g[b],x||(x=g[b]=_.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),bfe={draw:hUe}});var Tfe={};vr(Tfe,{diagram:()=>fUe});var fUe,kfe=M(()=>{"use strict";Jhe();xfe();wfe();fUe={parser:Zhe,db:vfe,renderer:bfe}});var gO,Cfe,Afe=M(()=>{"use strict";gO=function(){var t=o(function(ie,Q,ee,J){for(ee=ee||{},J=ie.length;J--;ee[ie[J]]=Q);return ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],s=[1,18],l=[2,7],u=[1,22],h=[1,23],f=[1,24],d=[1,25],p=[1,26],m=[1,27],g=[1,20],y=[1,28],v=[1,29],x=[62,63],b=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],w=[1,47],_=[1,48],T=[1,49],E=[1,50],L=[1,51],C=[1,52],A=[1,53],I=[53,54],D=[1,64],k=[1,60],R=[1,61],S=[1,62],O=[1,63],N=[1,65],P=[1,69],F=[1,70],B=[1,67],$=[1,68],z=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],W={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:o(function(Q,ee,J,H,q,Z,ae){var ue=Z.length-1;switch(q){case 4:this.$=Z[ue].trim(),H.setAccTitle(this.$);break;case 5:case 6:this.$=Z[ue].trim(),H.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:H.addRequirement(Z[ue-3],Z[ue-4]);break;case 14:H.setNewReqId(Z[ue-2]);break;case 15:H.setNewReqText(Z[ue-2]);break;case 16:H.setNewReqRisk(Z[ue-2]);break;case 17:H.setNewReqVerifyMethod(Z[ue-2]);break;case 20:this.$=H.RequirementType.REQUIREMENT;break;case 21:this.$=H.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=H.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=H.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=H.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=H.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=H.RiskLevel.LOW_RISK;break;case 27:this.$=H.RiskLevel.MED_RISK;break;case 28:this.$=H.RiskLevel.HIGH_RISK;break;case 29:this.$=H.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=H.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=H.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=H.VerifyType.VERIFY_TEST;break;case 33:H.addElement(Z[ue-3]);break;case 34:H.setNewElementType(Z[ue-2]);break;case 35:H.setNewElementDocRef(Z[ue-2]);break;case 38:H.addRelationship(Z[ue-2],Z[ue],Z[ue-4]);break;case 39:H.addRelationship(Z[ue-2],Z[ue-4],Z[ue]);break;case 40:this.$=H.Relationships.CONTAINS;break;case 41:this.$=H.Relationships.COPIES;break;case 42:this.$=H.Relationships.DERIVES;break;case 43:this.$=H.Relationships.SATISFIES;break;case 44:this.$=H.Relationships.VERIFIES;break;case 45:this.$=H.Relationships.REFINES;break;case 46:this.$=H.Relationships.TRACES;break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:s,7:31,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:32,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:33,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:34,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:35,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(x,[2,20]),t(x,[2,21]),t(x,[2,22]),t(x,[2,23]),t(x,[2,24]),t(x,[2,25]),t(b,[2,49]),t(b,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:w,56:_,57:T,58:E,59:L,60:C,61:A},{52:54,55:w,56:_,57:T,58:E,59:L,60:C,61:A},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(I,[2,40]),t(I,[2,41]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),{54:[1,58]},{5:D,20:59,21:k,24:R,26:S,28:O,30:N},{5:P,30:F,46:66,47:B,49:$},{23:71,62:y,63:v},{23:72,62:y,63:v},t(z,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:D,20:77,21:k,24:R,26:S,28:O,30:N},t(z,[2,19]),t(z,[2,33]),{22:[1,78]},{22:[1,79]},{5:P,30:F,46:80,47:B,49:$},t(z,[2,37]),t(z,[2,38]),t(z,[2,39]),{23:81,62:y,63:v},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(z,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(z,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:D,20:106,21:k,24:R,26:S,28:O,30:N},{5:D,20:107,21:k,24:R,26:S,28:O,30:N},{5:D,20:108,21:k,24:R,26:S,28:O,30:N},{5:D,20:109,21:k,24:R,26:S,28:O,30:N},{5:P,30:F,46:110,47:B,49:$},{5:P,30:F,46:111,47:B,49:$},t(z,[2,14]),t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),t(z,[2,34]),t(z,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:o(function(Q,ee){if(ee.recoverable)this.trace(Q);else{var J=new Error(Q);throw J.hash=ee,J}},"parseError"),parse:o(function(Q){var ee=this,J=[0],H=[],q=[null],Z=[],ae=this.table,ue="",ce=0,te=0,De=0,oe=2,ke=1,Fe=Z.slice.call(arguments,1),Be=Object.create(this.lexer),Ve={yy:{}};for(var Ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ge)&&(Ve.yy[Ge]=this.yy[Ge]);Be.setInput(Q,Ve.yy),Ve.yy.lexer=Be,Ve.yy.parser=this,typeof Be.yylloc>"u"&&(Be.yylloc={});var He=Be.yylloc;Z.push(He);var xe=Be.options&&Be.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(We){J.length=J.length-2*We,q.length=q.length-We,Z.length=Z.length-We}o(X,"popStack");function fe(){var We;return We=H.pop()||Be.lex()||ke,typeof We!="number"&&(We instanceof Array&&(H=We,We=H.pop()),We=ee.symbols_[We]||We),We}o(fe,"lex");for(var he,ge,ne,ye,U,Te,se={},Ee,Ae,Pe,Me;;){if(ne=J[J.length-1],this.defaultActions[ne]?ye=this.defaultActions[ne]:((he===null||typeof he>"u")&&(he=fe()),ye=ae[ne]&&ae[ne][he]),typeof ye>"u"||!ye.length||!ye[0]){var me="";Me=[];for(Ee in ae[ne])this.terminals_[Ee]&&Ee>oe&&Me.push("'"+this.terminals_[Ee]+"'");Be.showPosition?me="Parse error on line "+(ce+1)+`: +`+Be.showPosition()+` +Expecting `+Me.join(", ")+", got '"+(this.terminals_[he]||he)+"'":me="Parse error on line "+(ce+1)+": Unexpected "+(he==ke?"end of input":"'"+(this.terminals_[he]||he)+"'"),this.parseError(me,{text:Be.match,token:this.terminals_[he]||he,line:Be.yylineno,loc:He,expected:Me})}if(ye[0]instanceof Array&&ye.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+he);switch(ye[0]){case 1:J.push(he),q.push(Be.yytext),Z.push(Be.yylloc),J.push(ye[1]),he=null,ge?(he=ge,ge=null):(te=Be.yyleng,ue=Be.yytext,ce=Be.yylineno,He=Be.yylloc,De>0&&De--);break;case 2:if(Ae=this.productions_[ye[1]][1],se.$=q[q.length-Ae],se._$={first_line:Z[Z.length-(Ae||1)].first_line,last_line:Z[Z.length-1].last_line,first_column:Z[Z.length-(Ae||1)].first_column,last_column:Z[Z.length-1].last_column},xe&&(se._$.range=[Z[Z.length-(Ae||1)].range[0],Z[Z.length-1].range[1]]),Te=this.performAction.apply(se,[ue,te,ce,Ve.yy,ye[1],q,Z].concat(Fe)),typeof Te<"u")return Te;Ae&&(J=J.slice(0,-1*Ae*2),q=q.slice(0,-1*Ae),Z=Z.slice(0,-1*Ae)),J.push(this.productions_[ye[1]][0]),q.push(se.$),Z.push(se._$),Pe=ae[J[J.length-2]][J[J.length-1]],J.push(Pe);break;case 3:return!0}}return!0},"parse")},j=function(){var ie={EOF:1,parseError:o(function(ee,J){if(this.yy.parser)this.yy.parser.parseError(ee,J);else throw new Error(ee)},"parseError"),setInput:o(function(Q,ee){return this.yy=ee||this.yy||{},this._input=Q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Q=this._input[0];this.yytext+=Q,this.yyleng++,this.offset++,this.match+=Q,this.matched+=Q;var ee=Q.match(/(?:\r\n?|\n).*/g);return ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Q},"input"),unput:o(function(Q){var ee=Q.length,J=Q.split(/(?:\r\n?|\n)/g);this._input=Q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ee),this.offset-=ee;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===H.length?this.yylloc.first_column:0)+H[H.length-J.length].length-J[0].length:this.yylloc.first_column-ee},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Q){this.unput(this.match.slice(Q))},"less"),pastInput:o(function(){var Q=this.matched.substr(0,this.matched.length-this.match.length);return(Q.length>20?"...":"")+Q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Q=this.match;return Q.length<20&&(Q+=this._input.substr(0,20-Q.length)),(Q.substr(0,20)+(Q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Q=this.pastInput(),ee=new Array(Q.length+1).join("-");return Q+this.upcomingInput()+` +`+ee+"^"},"showPosition"),test_match:o(function(Q,ee){var J,H,q;if(this.options.backtrack_lexer&&(q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(q.yylloc.range=this.yylloc.range.slice(0))),H=Q[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Q[0].length},this.yytext+=Q[0],this.match+=Q[0],this.matches=Q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Q[0].length),this.matched+=Q[0],J=this.performAction.call(this,this.yy,this,ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Z in q)this[Z]=q[Z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Q,ee,J,H;this._more||(this.yytext="",this.match="");for(var q=this._currentRules(),Z=0;Zee[0].length)){if(ee=J,H=Z,this.options.backtrack_lexer){if(Q=this.test_match(J,q[Z]),Q!==!1)return Q;if(this._backtrack){ee=!1;continue}else return!1}else if(!this.options.flex)break}return ee?(Q=this.test_match(ee,q[H]),Q!==!1?Q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ee=this.next();return ee||this.lex()},"lex"),begin:o(function(ee){this.conditionStack.push(ee)},"begin"),popState:o(function(){var ee=this.conditionStack.length-1;return ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ee){return ee=this.conditionStack.length-1-Math.abs(ee||0),ee>=0?this.conditionStack[ee]:"INITIAL"},"topState"),pushState:o(function(ee){this.begin(ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ee,J,H,q){var Z=q;switch(H){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return J.yytext=J.yytext.trim(),62;break}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return ie}();W.lexer=j;function K(){this.yy={}}return o(K,"Parser"),K.prototype=W,W.Parser=K,new K}();gO.parser=gO;Cfe=gO});var yO,Fs,yx,df,vx,gUe,yUe,vUe,xUe,bUe,wUe,TUe,kUe,EUe,SUe,CUe,AUe,_Ue,LUe,DUe,NUe,RUe,_fe,Lfe=M(()=>{"use strict";Vt();ht();ki();yO=[],Fs={},yx=new Map,df={},vx=new Map,gUe={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},yUe={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},vUe={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},xUe={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},bUe=o((t,e)=>(yx.has(t)||yx.set(t,{name:t,type:e,id:Fs.id,text:Fs.text,risk:Fs.risk,verifyMethod:Fs.verifyMethod}),Fs={},yx.get(t)),"addRequirement"),wUe=o(()=>yx,"getRequirements"),TUe=o(t=>{Fs!==void 0&&(Fs.id=t)},"setNewReqId"),kUe=o(t=>{Fs!==void 0&&(Fs.text=t)},"setNewReqText"),EUe=o(t=>{Fs!==void 0&&(Fs.risk=t)},"setNewReqRisk"),SUe=o(t=>{Fs!==void 0&&(Fs.verifyMethod=t)},"setNewReqVerifyMethod"),CUe=o(t=>(vx.has(t)||(vx.set(t,{name:t,type:df.type,docRef:df.docRef}),Y.info("Added new requirement: ",t)),df={},vx.get(t)),"addElement"),AUe=o(()=>vx,"getElements"),_Ue=o(t=>{df!==void 0&&(df.type=t)},"setNewElementType"),LUe=o(t=>{df!==void 0&&(df.docRef=t)},"setNewElementDocRef"),DUe=o((t,e,r)=>{yO.push({type:t,src:e,dst:r})},"addRelationship"),NUe=o(()=>yO,"getRelationships"),RUe=o(()=>{yO=[],Fs={},yx=new Map,df={},vx=new Map,_r()},"clear"),_fe={RequirementType:gUe,RiskLevel:yUe,VerifyType:vUe,Relationships:xUe,getConfig:o(()=>de().req,"getConfig"),addRequirement:bUe,getRequirements:wUe,setNewReqId:TUe,setNewReqText:kUe,setNewReqRisk:EUe,setNewReqVerifyMethod:SUe,setAccTitle:Rr,getAccTitle:Pr,setAccDescription:Br,getAccDescription:Fr,addElement:CUe,getElements:AUe,setNewElementType:_Ue,setNewElementDocRef:LUe,addRelationship:DUe,getRelationships:NUe,clear:RUe}});var MUe,Dfe,Nfe=M(()=>{"use strict";MUe=o(t=>` + + marker { + fill: ${t.relationColor}; + stroke: ${t.relationColor}; + } + + marker.cross { + stroke: ${t.lineColor}; + } + + svg { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + } + + .reqBox { + fill: ${t.requirementBackground}; + fill-opacity: 1.0; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${t.requirementTextColor}; + } + .reqLabelBox { + fill: ${t.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + .relationshipLine { + stroke: ${t.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${t.relationLabelColor}; + } + +`,"getStyles"),Dfe=MUe});var vO,IUe,xO,Rfe=M(()=>{"use strict";vO={CONTAINS:"contains",ARROW:"arrow"},IUe=o((t,e)=>{let r=t.append("defs").append("marker").attr("id",vO.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");r.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),r.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),r.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",vO.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${e.line_height},${e.line_height/2} + M${e.line_height},${e.line_height/2} + L0,${e.line_height}`).attr("stroke-width",1)},"insertLineEndings"),xO={ReqMarkers:vO,insertLineEndings:IUe}});var ci,Mfe,Ife,Ofe,Pfe,OUe,PUe,BUe,FUe,zUe,GUe,Bg,$Ue,Bfe,Ffe=M(()=>{"use strict";mr();Pv();Ns();Vt();ht();ni();fr();Rfe();ci={},Mfe=0,Ife=o((t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",ci.rect_min_width+"px").attr("height",ci.rect_min_height+"px"),"newRectNode"),Ofe=o((t,e,r)=>{let n=ci.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",ci.rect_padding).attr("dominant-baseline","hanging"),a=0;r.forEach(h=>{a==0?i.append("tspan").attr("text-anchor","middle").attr("x",ci.rect_min_width/2).attr("dy",0).text(h):i.append("tspan").attr("text-anchor","middle").attr("x",ci.rect_min_width/2).attr("dy",ci.line_height*.75).text(h),a++});let s=1.5*ci.rect_padding,l=a*ci.line_height*.75,u=s+l;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",ci.rect_min_width).attr("y1",u).attr("y2",u),{titleNode:i,y:u}},"newTitleNode"),Pfe=o((t,e,r,n)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",ci.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),a=0,s=30,l=[];return r.forEach(u=>{let h=u.length;for(;h>s&&a<3;){let f=u.substring(0,s);u=u.substring(s,u.length),h=u.length,l[l.length]=f,a++}if(a==3){let f=l[l.length-1];l[l.length-1]=f.substring(0,f.length-4)+"..."}else l[l.length]=u;a=0}),l.forEach(u=>{i.append("tspan").attr("x",ci.rect_padding).attr("dy",ci.line_height).text(u)}),i},"newBodyNode"),OUe=o((t,e,r,n)=>{let i=e.node().getTotalLength(),a=e.node().getPointAtLength(i*.5),s="rel"+Mfe;Mfe++;let u=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-u.width/2).attr("y",a.y-u.height/2).attr("width",u.width).attr("height",u.height).attr("fill","white").attr("fill-opacity","85%")},"addEdgeLabel"),PUe=o(function(t,e,r,n,i){let a=r.edge(Bg(e.src),Bg(e.dst)),s=Ka().x(function(u){return u.x}).y(function(u){return u.y}),l=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?l.attr("marker-start","url("+je.getUrl(ci.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(l.attr("stroke-dasharray","10,7"),l.attr("marker-end","url("+je.getUrl(ci.arrowMarkerAbsolute)+"#"+xO.ReqMarkers.ARROW+"_line_ending)")),OUe(t,l,ci,`<<${e.type}>>`)},"drawRelationshipFromLayout"),BUe=o((t,e,r)=>{t.forEach((n,i)=>{i=Bg(i),Y.info("Added new requirement: ",i);let a=r.append("g").attr("id",i),s="req-"+i,l=Ife(a,s),u=[],h=Ofe(a,i+"_title",[`<<${n.type}>>`,`${n.name}`]);u.push(h.titleNode);let f=Pfe(a,i+"_body",[`Id: ${n.id}`,`Text: ${n.text}`,`Risk: ${n.risk}`,`Verification: ${n.verifyMethod}`],h.y);u.push(f);let d=l.node().getBBox();e.setNode(i,{width:d.width,height:d.height,shape:"rect",id:i})})},"drawReqs"),FUe=o((t,e,r)=>{t.forEach((n,i)=>{let a=Bg(i),s=r.append("g").attr("id",a),l="element-"+a,u=Ife(s,l),h=[],f=Ofe(s,l+"_title",["<>",`${i}`]);h.push(f.titleNode);let d=Pfe(s,l+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],f.y);h.push(d);let p=u.node().getBBox();e.setNode(a,{width:p.width,height:p.height,shape:"rect",id:a})})},"drawElements"),zUe=o((t,e)=>(t.forEach(function(r){let n=Bg(r.src),i=Bg(r.dst);e.setEdge(n,i,{relationship:r})}),t),"addRelationships"),GUe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&(t.select("#"+r),t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )"))})},"adjustEntities"),Bg=o(t=>t.replace(/\s/g,"").replace(/\./g,"_"),"elementString"),$Ue=o((t,e,r,n)=>{ci=de().requirement;let i=ci.securityLevel,a;i==="sandbox"&&(a=ze("#i"+e));let l=(i==="sandbox"?ze(a.nodes()[0].contentDocument.body):ze("body")).select(`[id='${e}']`);xO.insertLineEndings(l,ci);let u=new Mr({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:ci.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}}),h=n.db.getRequirements(),f=n.db.getElements(),d=n.db.getRelationships();BUe(h,u,l),FUe(f,u,l),zUe(d,u),Du(u),GUe(l,u),d.forEach(function(v){PUe(l,v,u,e,n)});let p=ci.rect_padding,m=l.node().getBBox(),g=m.width+p*2,y=m.height+p*2;Zr(l,y,g,ci.useMaxWidth),l.attr("viewBox",`${m.x-p} ${m.y-p} ${g} ${y}`)},"draw"),Bfe={draw:$Ue}});var zfe={};vr(zfe,{diagram:()=>VUe});var VUe,Gfe=M(()=>{"use strict";Afe();Lfe();Nfe();Ffe();VUe={parser:Cfe,db:_fe,renderer:Bfe,styles:Dfe}});var bO,Ufe,Hfe=M(()=>{"use strict";bO=function(){var t=o(function(H,q,Z,ae){for(Z=Z||{},ae=H.length;ae--;Z[H[ae]]=q);return Z},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],_=[1,32],T=[1,33],E=[1,34],L=[1,35],C=[1,36],A=[1,37],I=[1,38],D=[1,39],k=[1,41],R=[1,42],S=[1,43],O=[1,44],N=[1,45],P=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],B=[4,5,16,50,52,53],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],W=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],j=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],K=[68,69,70],ie=[1,122],Q={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(q,Z,ae,ue,ce,te,De){var oe=te.length-1;switch(ce){case 3:return ue.apply(te[oe]),te[oe];break;case 4:case 9:this.$=[];break;case 5:case 10:te[oe-1].push(te[oe]),this.$=te[oe-1];break;case 6:case 7:case 11:case 12:this.$=te[oe];break;case 8:case 13:this.$=[];break;case 15:te[oe].type="createParticipant",this.$=te[oe];break;case 16:te[oe-1].unshift({type:"boxStart",boxData:ue.parseBoxData(te[oe-2])}),te[oe-1].push({type:"boxEnd",boxText:te[oe-2]}),this.$=te[oe-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(te[oe-2]),sequenceIndexStep:Number(te[oe-1]),sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(te[oe-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ue.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[oe-1].actor};break;case 23:this.$={type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[oe-1].actor};break;case 29:ue.setDiagramTitle(te[oe].substring(6)),this.$=te[oe].substring(6);break;case 30:ue.setDiagramTitle(te[oe].substring(7)),this.$=te[oe].substring(7);break;case 31:this.$=te[oe].trim(),ue.setAccTitle(this.$);break;case 32:case 33:this.$=te[oe].trim(),ue.setAccDescription(this.$);break;case 34:te[oe-1].unshift({type:"loopStart",loopText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.LOOP_START}),te[oe-1].push({type:"loopEnd",loopText:te[oe-2],signalType:ue.LINETYPE.LOOP_END}),this.$=te[oe-1];break;case 35:te[oe-1].unshift({type:"rectStart",color:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.RECT_START}),te[oe-1].push({type:"rectEnd",color:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.RECT_END}),this.$=te[oe-1];break;case 36:te[oe-1].unshift({type:"optStart",optText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.OPT_START}),te[oe-1].push({type:"optEnd",optText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.OPT_END}),this.$=te[oe-1];break;case 37:te[oe-1].unshift({type:"altStart",altText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.ALT_START}),te[oe-1].push({type:"altEnd",signalType:ue.LINETYPE.ALT_END}),this.$=te[oe-1];break;case 38:te[oe-1].unshift({type:"parStart",parText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.PAR_START}),te[oe-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[oe-1];break;case 39:te[oe-1].unshift({type:"parStart",parText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.PAR_OVER_START}),te[oe-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[oe-1];break;case 40:te[oe-1].unshift({type:"criticalStart",criticalText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.CRITICAL_START}),te[oe-1].push({type:"criticalEnd",signalType:ue.LINETYPE.CRITICAL_END}),this.$=te[oe-1];break;case 41:te[oe-1].unshift({type:"breakStart",breakText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.BREAK_START}),te[oe-1].push({type:"breakEnd",optText:ue.parseMessage(te[oe-2]),signalType:ue.LINETYPE.BREAK_END}),this.$=te[oe-1];break;case 43:this.$=te[oe-3].concat([{type:"option",optionText:ue.parseMessage(te[oe-1]),signalType:ue.LINETYPE.CRITICAL_OPTION},te[oe]]);break;case 45:this.$=te[oe-3].concat([{type:"and",parText:ue.parseMessage(te[oe-1]),signalType:ue.LINETYPE.PAR_AND},te[oe]]);break;case 47:this.$=te[oe-3].concat([{type:"else",altText:ue.parseMessage(te[oe-1]),signalType:ue.LINETYPE.ALT_ELSE},te[oe]]);break;case 48:te[oe-3].draw="participant",te[oe-3].type="addParticipant",te[oe-3].description=ue.parseMessage(te[oe-1]),this.$=te[oe-3];break;case 49:te[oe-1].draw="participant",te[oe-1].type="addParticipant",this.$=te[oe-1];break;case 50:te[oe-3].draw="actor",te[oe-3].type="addParticipant",te[oe-3].description=ue.parseMessage(te[oe-1]),this.$=te[oe-3];break;case 51:te[oe-1].draw="actor",te[oe-1].type="addParticipant",this.$=te[oe-1];break;case 52:te[oe-1].type="destroyParticipant",this.$=te[oe-1];break;case 53:this.$=[te[oe-1],{type:"addNote",placement:te[oe-2],actor:te[oe-1].actor,text:te[oe]}];break;case 54:te[oe-2]=[].concat(te[oe-1],te[oe-1]).slice(0,2),te[oe-2][0]=te[oe-2][0].actor,te[oe-2][1]=te[oe-2][1].actor,this.$=[te[oe-1],{type:"addNote",placement:ue.PLACEMENT.OVER,actor:te[oe-2].slice(0,2),text:te[oe]}];break;case 55:this.$=[te[oe-1],{type:"addLinks",actor:te[oe-1].actor,text:te[oe]}];break;case 56:this.$=[te[oe-1],{type:"addALink",actor:te[oe-1].actor,text:te[oe]}];break;case 57:this.$=[te[oe-1],{type:"addProperties",actor:te[oe-1].actor,text:te[oe]}];break;case 58:this.$=[te[oe-1],{type:"addDetails",actor:te[oe-1].actor,text:te[oe]}];break;case 61:this.$=[te[oe-2],te[oe]];break;case 62:this.$=te[oe];break;case 63:this.$=ue.PLACEMENT.LEFTOF;break;case 64:this.$=ue.PLACEMENT.RIGHTOF;break;case 65:this.$=[te[oe-4],te[oe-1],{type:"addMessage",from:te[oe-4].actor,to:te[oe-1].actor,signalType:te[oe-3],msg:te[oe],activate:!0},{type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[oe-1].actor}];break;case 66:this.$=[te[oe-4],te[oe-1],{type:"addMessage",from:te[oe-4].actor,to:te[oe-1].actor,signalType:te[oe-3],msg:te[oe]},{type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[oe-4].actor}];break;case 67:this.$=[te[oe-3],te[oe-1],{type:"addMessage",from:te[oe-3].actor,to:te[oe-1].actor,signalType:te[oe-2],msg:te[oe]}];break;case 68:this.$={type:"addParticipant",actor:te[oe]};break;case 69:this.$=ue.LINETYPE.SOLID_OPEN;break;case 70:this.$=ue.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ue.LINETYPE.SOLID;break;case 72:this.$=ue.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=ue.LINETYPE.DOTTED;break;case 74:this.$=ue.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=ue.LINETYPE.SOLID_CROSS;break;case 76:this.$=ue.LINETYPE.DOTTED_CROSS;break;case 77:this.$=ue.LINETYPE.SOLID_POINT;break;case 78:this.$=ue.LINETYPE.DOTTED_POINT;break;case 79:this.$=ue.parseMessage(te[oe].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:A,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:P},{22:72,70:P},{22:73,70:P},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(B,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t($,i,{7:99}),t($,i,{7:100}),t($,i,{7:101}),t(z,i,{40:102,7:103}),t(W,i,{42:104,7:105}),t(W,i,{7:105,42:106}),t(j,i,{45:107,7:108}),t($,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(K,[2,69]),t(K,[2,70]),t(K,[2,71]),t(K,[2,72]),t(K,[2,73]),t(K,[2,74]),t(K,[2,75]),t(K,[2,76]),t(K,[2,77]),t(K,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:A,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,49:[1,136],50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,48:[1,138],50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,47:[1,141],50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:C,50:A,52:I,53:D,54:k,59:R,60:S,61:O,62:N,70:P},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(B,[2,10]),{12:151,50:A,52:I,53:D},t(B,[2,12]),t(B,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(B,[2,11]),t(z,i,{7:103,40:160}),t(W,i,{7:105,42:161}),t(j,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(q,Z){if(Z.recoverable)this.trace(q);else{var ae=new Error(q);throw ae.hash=Z,ae}},"parseError"),parse:o(function(q){var Z=this,ae=[0],ue=[],ce=[null],te=[],De=this.table,oe="",ke=0,Fe=0,Be=0,Ve=2,Ge=1,He=te.slice.call(arguments,1),xe=Object.create(this.lexer),X={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(X.yy[fe]=this.yy[fe]);xe.setInput(q,X.yy),X.yy.lexer=xe,X.yy.parser=this,typeof xe.yylloc>"u"&&(xe.yylloc={});var he=xe.yylloc;te.push(he);var ge=xe.options&&xe.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ne(Et){ae.length=ae.length-2*Et,ce.length=ce.length-Et,te.length=te.length-Et}o(ne,"popStack");function ye(){var Et;return Et=ue.pop()||xe.lex()||Ge,typeof Et!="number"&&(Et instanceof Array&&(ue=Et,Et=ue.pop()),Et=Z.symbols_[Et]||Et),Et}o(ye,"lex");for(var U,Te,se,Ee,Ae,Pe,Me={},me,We,Re,tt;;){if(se=ae[ae.length-1],this.defaultActions[se]?Ee=this.defaultActions[se]:((U===null||typeof U>"u")&&(U=ye()),Ee=De[se]&&De[se][U]),typeof Ee>"u"||!Ee.length||!Ee[0]){var gt="";tt=[];for(me in De[se])this.terminals_[me]&&me>Ve&&tt.push("'"+this.terminals_[me]+"'");xe.showPosition?gt="Parse error on line "+(ke+1)+`: +`+xe.showPosition()+` +Expecting `+tt.join(", ")+", got '"+(this.terminals_[U]||U)+"'":gt="Parse error on line "+(ke+1)+": Unexpected "+(U==Ge?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(gt,{text:xe.match,token:this.terminals_[U]||U,line:xe.yylineno,loc:he,expected:tt})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+U);switch(Ee[0]){case 1:ae.push(U),ce.push(xe.yytext),te.push(xe.yylloc),ae.push(Ee[1]),U=null,Te?(U=Te,Te=null):(Fe=xe.yyleng,oe=xe.yytext,ke=xe.yylineno,he=xe.yylloc,Be>0&&Be--);break;case 2:if(We=this.productions_[Ee[1]][1],Me.$=ce[ce.length-We],Me._$={first_line:te[te.length-(We||1)].first_line,last_line:te[te.length-1].last_line,first_column:te[te.length-(We||1)].first_column,last_column:te[te.length-1].last_column},ge&&(Me._$.range=[te[te.length-(We||1)].range[0],te[te.length-1].range[1]]),Pe=this.performAction.apply(Me,[oe,Fe,ke,X.yy,Ee[1],ce,te].concat(He)),typeof Pe<"u")return Pe;We&&(ae=ae.slice(0,-1*We*2),ce=ce.slice(0,-1*We),te=te.slice(0,-1*We)),ae.push(this.productions_[Ee[1]][0]),ce.push(Me.$),te.push(Me._$),Re=De[ae[ae.length-2]][ae[ae.length-1]],ae.push(Re);break;case 3:return!0}}return!0},"parse")},ee=function(){var H={EOF:1,parseError:o(function(Z,ae){if(this.yy.parser)this.yy.parser.parseError(Z,ae);else throw new Error(Z)},"parseError"),setInput:o(function(q,Z){return this.yy=Z||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var Z=q.match(/(?:\r\n?|\n).*/g);return Z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var Z=q.length,ae=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Z),this.offset-=Z;var ue=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ae.length-1&&(this.yylineno-=ae.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ae?(ae.length===ue.length?this.yylloc.first_column:0)+ue[ue.length-ae.length].length-ae[0].length:this.yylloc.first_column-Z},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-Z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),Z=new Array(q.length+1).join("-");return q+this.upcomingInput()+` +`+Z+"^"},"showPosition"),test_match:o(function(q,Z){var ae,ue,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),ue=q[0].match(/(?:\r\n?|\n).*/g),ue&&(this.yylineno+=ue.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ue?ue[ue.length-1].length-ue[ue.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ae=this.performAction.call(this,this.yy,this,Z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ae)return ae;if(this._backtrack){for(var te in ce)this[te]=ce[te];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,Z,ae,ue;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),te=0;teZ[0].length)){if(Z=ae,ue=te,this.options.backtrack_lexer){if(q=this.test_match(ae,ce[te]),q!==!1)return q;if(this._backtrack){Z=!1;continue}else return!1}else if(!this.options.flex)break}return Z?(q=this.test_match(Z,ce[ue]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Z=this.next();return Z||this.lex()},"lex"),begin:o(function(Z){this.conditionStack.push(Z)},"begin"),popState:o(function(){var Z=this.conditionStack.length-1;return Z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Z){return Z=this.conditionStack.length-1-Math.abs(Z||0),Z>=0?this.conditionStack[Z]:"INITIAL"},"topState"),pushState:o(function(Z){this.begin(Z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Z,ae,ue,ce){var te=ce;switch(ue){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return ae.yytext=ae.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return ae.yytext=ae.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return H}();Q.lexer=ee;function J(){this.yy={}}return o(J,"Parser"),J.prototype=Q,Q.Parser=J,new J}();bO.parser=bO;Ufe=bO});function TO(t,e){if(t.links==null)t.links=e;else for(let r in e)t.links[r]=e[r]}function jfe(t,e){if(t.properties==null)t.properties=e;else for(let r in e)t.properties[r]=e[r]}function dHe(){$t.records.currentBox=void 0}var $t,YUe,wO,qUe,XUe,yi,jUe,KUe,QUe,ZUe,JUe,eHe,tHe,bx,rHe,nHe,iHe,aHe,sHe,Wfe,k0,oHe,lHe,cHe,xx,uHe,hHe,Yfe,qfe,fHe,Xfe,Kfe,pHe,Qfe,kO,Zfe=M(()=>{"use strict";Vt();ht();tE();fr();ki();$t=new cf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),YUe=o(function(t){$t.records.boxes.push({name:t.text,wrap:t.wrap??k0(),fill:t.color,actorKeys:[]}),$t.records.currentBox=$t.records.boxes.slice(-1)[0]},"addBox"),wO=o(function(t,e,r,n){let i=$t.records.currentBox,a=$t.records.actors.get(t);if(a){if($t.records.currentBox&&a.box&&$t.records.currentBox!==a.box)throw new Error(`A same participant should only be defined in one Box: ${a.name} can't be in '${a.box.name}' and in '${$t.records.currentBox.name}' at the same time.`);if(i=a.box?a.box:$t.records.currentBox,a.box=i,a&&e===a.name&&r==null)return}if(r?.text==null&&(r={text:e,type:n}),(n==null||r.text==null)&&(r={text:e,type:n}),$t.records.actors.set(t,{box:i,name:e,description:r.text,wrap:r.wrap??k0(),prevActor:$t.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),$t.records.prevActor){let s=$t.records.actors.get($t.records.prevActor);s&&(s.nextActor=t)}$t.records.currentBox&&$t.records.currentBox.actorKeys.push(t),$t.records.prevActor=t},"addActor"),qUe=o(t=>{let e,r=0;if(!t)return 0;for(e=0;e<$t.records.messages.length;e++)$t.records.messages[e].type===xx.ACTIVE_START&&$t.records.messages[e].from===t&&r++,$t.records.messages[e].type===xx.ACTIVE_END&&$t.records.messages[e].from===t&&r--;return r},"activationCount"),XUe=o(function(t,e,r,n){$t.records.messages.push({from:t,to:e,message:r.text,wrap:r.wrap??k0(),answer:n})},"addMessage"),yi=o(function(t,e,r,n,i=!1){if(n===xx.ACTIVE_END&&qUe(t??"")<1){let s=new Error("Trying to inactivate an inactive participant ("+t+")");throw s.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},s}return $t.records.messages.push({from:t,to:e,message:r?.text??"",wrap:r?.wrap??k0(),type:n,activate:i}),!0},"addSignal"),jUe=o(function(){return $t.records.boxes.length>0},"hasAtLeastOneBox"),KUe=o(function(){return $t.records.boxes.some(t=>t.name)},"hasAtLeastOneBoxWithTitle"),QUe=o(function(){return $t.records.messages},"getMessages"),ZUe=o(function(){return $t.records.boxes},"getBoxes"),JUe=o(function(){return $t.records.actors},"getActors"),eHe=o(function(){return $t.records.createdActors},"getCreatedActors"),tHe=o(function(){return $t.records.destroyedActors},"getDestroyedActors"),bx=o(function(t){return $t.records.actors.get(t)},"getActor"),rHe=o(function(){return[...$t.records.actors.keys()]},"getActorKeys"),nHe=o(function(){$t.records.sequenceNumbersEnabled=!0},"enableSequenceNumbers"),iHe=o(function(){$t.records.sequenceNumbersEnabled=!1},"disableSequenceNumbers"),aHe=o(()=>$t.records.sequenceNumbersEnabled,"showSequenceNumbers"),sHe=o(function(t){$t.records.wrapEnabled=t},"setWrap"),Wfe=o(t=>{if(t===void 0)return{};t=t.trim();let e=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(e===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:e}},"extractWrap"),k0=o(()=>$t.records.wrapEnabled!==void 0?$t.records.wrapEnabled:de().sequence?.wrap??!1,"autoWrap"),oHe=o(function(){$t.reset(),_r()},"clear"),lHe=o(function(t){let e=t.trim(),{wrap:r,cleanedText:n}=Wfe(e),i={text:n,wrap:r};return Y.debug(`parseMessage: ${JSON.stringify(i)}`),i},"parseMessage"),cHe=o(function(t){let e=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t),r=e?.[1]?e[1].trim():"transparent",n=e?.[2]?e[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",r)||(r="transparent",n=t.trim());else{let s=new Option().style;s.color=r,s.color!==r&&(r="transparent",n=t.trim())}let{wrap:i,cleanedText:a}=Wfe(n);return{text:a?Tr(a,de()):void 0,color:r,wrap:i}},"parseBoxData"),xx={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},uHe={FILLED:0,OPEN:1},hHe={LEFTOF:0,RIGHTOF:1,OVER:2},Yfe=o(function(t,e,r){let n={actor:t,placement:e,message:r.text,wrap:r.wrap??k0()},i=[].concat(t,t);$t.records.notes.push(n),$t.records.messages.push({from:i[0],to:i[1],message:r.text,wrap:r.wrap??k0(),type:xx.NOTE,placement:e})},"addNote"),qfe=o(function(t,e){let r=bx(t);try{let n=Tr(e.text,de());n=n.replace(/&/g,"&"),n=n.replace(/=/g,"=");let i=JSON.parse(n);TO(r,i)}catch(n){Y.error("error while parsing actor link text",n)}},"addLinks"),fHe=o(function(t,e){let r=bx(t);try{let n={},i=Tr(e.text,de()),a=i.indexOf("@");i=i.replace(/&/g,"&"),i=i.replace(/=/g,"=");let s=i.slice(0,a-1).trim(),l=i.slice(a+1).trim();n[s]=l,TO(r,n)}catch(n){Y.error("error while parsing actor link text",n)}},"addALink");o(TO,"insertLinks");Xfe=o(function(t,e){let r=bx(t);try{let n=Tr(e.text,de()),i=JSON.parse(n);jfe(r,i)}catch(n){Y.error("error while parsing actor properties text",n)}},"addProperties");o(jfe,"insertProperties");o(dHe,"boxEnd");Kfe=o(function(t,e){let r=bx(t),n=document.getElementById(e.text);try{let i=n.innerHTML,a=JSON.parse(i);a.properties&&jfe(r,a.properties),a.links&&TO(r,a.links)}catch(i){Y.error("error while parsing actor details text",i)}},"addDetails"),pHe=o(function(t,e){if(t?.properties!==void 0)return t.properties[e]},"getActorProperty"),Qfe=o(function(t){if(Array.isArray(t))t.forEach(function(e){Qfe(e)});else switch(t.type){case"sequenceIndex":$t.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":wO(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if($t.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");$t.records.lastCreated=t.actor,wO(t.actor,t.actor,t.description,t.draw),$t.records.createdActors.set(t.actor,$t.records.messages.length);break;case"destroyParticipant":$t.records.lastDestroyed=t.actor,$t.records.destroyedActors.set(t.actor,$t.records.messages.length);break;case"activeStart":yi(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":yi(t.actor,void 0,void 0,t.signalType);break;case"addNote":Yfe(t.actor,t.placement,t.text);break;case"addLinks":qfe(t.actor,t.text);break;case"addALink":fHe(t.actor,t.text);break;case"addProperties":Xfe(t.actor,t.text);break;case"addDetails":Kfe(t.actor,t.text);break;case"addMessage":if($t.records.lastCreated){if(t.to!==$t.records.lastCreated)throw new Error("The created participant "+$t.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");$t.records.lastCreated=void 0}else if($t.records.lastDestroyed){if(t.to!==$t.records.lastDestroyed&&t.from!==$t.records.lastDestroyed)throw new Error("The destroyed participant "+$t.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");$t.records.lastDestroyed=void 0}yi(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":YUe(t.boxData);break;case"boxEnd":dHe();break;case"loopStart":yi(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":yi(void 0,void 0,void 0,t.signalType);break;case"rectStart":yi(void 0,void 0,t.color,t.signalType);break;case"rectEnd":yi(void 0,void 0,void 0,t.signalType);break;case"optStart":yi(void 0,void 0,t.optText,t.signalType);break;case"optEnd":yi(void 0,void 0,void 0,t.signalType);break;case"altStart":yi(void 0,void 0,t.altText,t.signalType);break;case"else":yi(void 0,void 0,t.altText,t.signalType);break;case"altEnd":yi(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":Rr(t.text);break;case"parStart":yi(void 0,void 0,t.parText,t.signalType);break;case"and":yi(void 0,void 0,t.parText,t.signalType);break;case"parEnd":yi(void 0,void 0,void 0,t.signalType);break;case"criticalStart":yi(void 0,void 0,t.criticalText,t.signalType);break;case"option":yi(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":yi(void 0,void 0,void 0,t.signalType);break;case"breakStart":yi(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":yi(void 0,void 0,void 0,t.signalType);break}},"apply"),kO={addActor:wO,addMessage:XUe,addSignal:yi,addLinks:qfe,addDetails:Kfe,addProperties:Xfe,autoWrap:k0,setWrap:sHe,enableSequenceNumbers:nHe,disableSequenceNumbers:iHe,showSequenceNumbers:aHe,getMessages:QUe,getActors:JUe,getCreatedActors:eHe,getDestroyedActors:tHe,getActor:bx,getActorKeys:rHe,getActorProperty:pHe,getAccTitle:Pr,getBoxes:ZUe,getDiagramTitle:Jr,setDiagramTitle:ln,getConfig:o(()=>de().sequence,"getConfig"),clear:oHe,parseMessage:lHe,parseBoxData:cHe,LINETYPE:xx,ARROWTYPE:uHe,PLACEMENT:hHe,addNote:Yfe,setAccTitle:Rr,apply:Qfe,setAccDescription:Br,getAccDescription:Fr,hasAtLeastOneBox:jUe,hasAtLeastOneBoxWithTitle:KUe}});var mHe,Jfe,ede=M(()=>{"use strict";mHe=o(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + #arrowhead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${t.signalColor}; + } + + #crosshead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + .actor-man circle, line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: 2px; + } +`,"getStyles"),Jfe=mHe});var EO,pf,rde,nde,gHe,tde,SO,yHe,vHe,wx,E0,ide,Fc,CO,xHe,bHe,wHe,THe,kHe,EHe,SHe,ade,CHe,AHe,_He,LHe,DHe,NHe,RHe,sde,MHe,AO,IHe,ui,ode=M(()=>{"use strict";fr();qy();hr();EO=ka(Fp(),1);Ua();pf=18*2,rde="actor-top",nde="actor-bottom",gHe="actor-box",tde="actor-man",SO=o(function(t,e){return md(t,e)},"drawRect"),yHe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,EO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),IHe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),vHe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),wx=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await hh(e.text,Sr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),E0=o(function(t,e){let r=0,n=0,i=e.text.split(je.lineBreakRegex),[a,s]=Fo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||K_;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),ide=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,E0(t,e),n},"drawLabel"),Fc=-1,CO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),xHe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Fc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",vHe(`actor${Fc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Fc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Fc,e.links!=null&&u.attr("id","root-"+Fc));let h=Sl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${nde}`:f+=` ${rde}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=SO(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?RY(u,h.x+h.width-20,h.y+10,m.substr(1)):NY(u,h.x+h.width-20,h.y+10,m)}AO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${gHe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),bHe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Fc++,l.append("line").attr("id","actor"+Fc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Fc);let u=t.append("g"),h=tde;n?h+=` ${nde}`:h+=` ${rde}`,u.attr("class",h),u.attr("name",e.name);let f=Sl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Fc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Fc).attr("x1",a-pf/2).attr("y1",i+33).attr("x2",a+pf/2).attr("y2",i+33),u.append("line").attr("x1",a-pf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+pf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,AO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${tde}`},r),e.height},"drawActorTypeActor"),wHe=o(async function(t,e,r,n){switch(e.type){case"actor":return await bHe(t,e,r,n);case"participant":return await xHe(t,e,r,n)}},"drawActor"),THe=o(function(t,e,r){let i=t.append("g");ade(i,e),e.name&&AO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),kHe=o(function(t){return t.append("g")},"anchorElement"),EHe=o(function(t,e,r,n,i){let a=Sl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,SO(s,a)},"drawActivation"),SHe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Yy();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",ide(d,m),m=sde(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await wx(d,m,e):E0(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await wx(d,m,e)):E0(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),ade=o(function(t,e){Y3(t,e)},"drawBackgroundRect"),CHe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),AHe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),_He=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),LHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),DHe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),NHe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),RHe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),sde=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),MHe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),AO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Fo(m),b=a.split(je.lineBreakRegex);for(let w=0;w{let s=S0(Le),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Le.boxTextMargin,a.wrap&&(a.name=Ut.wrapLabel(a.name,l-2*Le.wrapPadding,s));let u=Ut.calculateTextDimensions(a.name,s);i=je.getMax(u.height,i);let h=je.getMax(l,u.width+2*Le.wrapPadding);if(a.margin=Le.boxTextMargin,la.textMaxHeight=i),je.getMax(n,Le.height)}var Le,nt,OHe,S0,Fg,_O,BHe,FHe,LO,cde,ude,TE,lde,GHe,VHe,HHe,WHe,YHe,hde,fde=M(()=>{"use strict";mr();ode();ht();fr();qy();Vt();ip();hr();ni();Le={},nt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,ude(de())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Le.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Le.boxMargin,Math.max),i.updateVal(nt.data,"startx",t-f*Le.boxMargin,Math.min),i.updateVal(nt.data,"stopx",r+f*Le.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Le.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Le.boxMargin,Math.max),i.updateVal(nt.data,"starty",e-f*Le.boxMargin,Math.min),i.updateVal(nt.data,"stopy",n+f*Le.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=je.getMin(t,r),a=je.getMax(t,r),s=je.getMin(e,n),l=je.getMax(e,n);this.updateVal(nt.data,"startx",i,Math.min),this.updateVal(nt.data,"starty",s,Math.min),this.updateVal(nt.data,"stopx",a,Math.max),this.updateVal(nt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=TE(t.from).length||0,a=n.x+n.width/2+(i-1)*Le.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Le.activationWidth,stopy:void 0,actor:t.from,anchored:ui.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:nt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=je.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},OHe=o(async function(t,e){nt.bumpVerticalPos(Le.boxMargin),e.height=Le.boxMargin,e.starty=nt.getVerticalPos();let r=Sl();r.x=e.startx,r.y=e.starty,r.width=e.width||Le.width,r.class="note";let n=t.append("g"),i=ui.drawRect(n,r),a=Yy();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Le.noteFontFamily,a.fontSize=Le.noteFontSize,a.fontWeight=Le.noteFontWeight,a.anchor=Le.noteAlign,a.textMargin=Le.noteMargin,a.valign="center";let s=pi(a.text)?await wx(n,a):E0(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Le.noteMargin),e.height+=l+2*Le.noteMargin,nt.bumpVerticalPos(l+2*Le.noteMargin),e.stopy=e.starty+l+2*Le.noteMargin,e.stopx=e.startx+r.width,nt.insert(e.startx,e.starty,e.stopx,e.stopy),nt.models.addNote(e)},"drawNote"),S0=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),Fg=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),_O=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(PHe,"boundMessage");BHe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Ut.calculateTextDimensions(l,S0(Le)),p=Yy();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Le.messageFontFamily,p.fontSize=Le.messageFontSize,p.fontWeight=Le.messageFontWeight,p.anchor=Le.messageAlign,p.valign="center",p.textMargin=Le.wrapPadding,p.tspan=!1,pi(p.text)?await wx(t,p,{startx:i,stopx:a,starty:r}):E0(t,p);let m=d.width,g;i===a?Le.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+je.getMax(Le.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Le.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Le.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),FHe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||nt.models.addBox(h),u+=Le.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Le.width,p.height=je.getMax(p.height||Le.height,Le.height),p.margin=p.margin||Le.actorMargin,f=je.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=nt.getVerticalPos(),nt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,nt.models.addActor(p)}h&&!s&&nt.models.addBox(h),nt.bumpVerticalPos(f)},"addActorRenderingData"),LO=o(async function(t,e,r,n){if(n){let i=0;nt.bumpVerticalPos(Le.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=nt.getVerticalPos());let l=await ui.drawActor(t,s,Le,!0);i=je.getMax(i,l)}nt.bumpVerticalPos(i+Le.boxMargin)}else for(let i of r){let a=e.get(i);await ui.drawActor(t,a,Le,!1)}},"drawActors"),cde=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=VHe(l),h=ui.drawPopup(t,l,u,Le,Le.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),ude=o(function(t){Gn(Le,t),t.fontFamily&&(Le.actorFontFamily=Le.noteFontFamily=Le.messageFontFamily=t.fontFamily),t.fontSize&&(Le.actorFontSize=Le.noteFontSize=Le.messageFontSize=t.fontSize),t.fontWeight&&(Le.actorFontWeight=Le.noteFontWeight=Le.messageFontWeight=t.fontWeight)},"setConf"),TE=o(function(t){return nt.activations.filter(function(e){return e.actor===t})},"actorActivations"),lde=o(function(t,e){let r=e.get(t),n=TE(t),i=n.reduce(function(s,l){return je.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return je.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(zc,"adjustLoopHeightForWrap");o(zHe,"adjustCreatedDestroyedData");GHe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=de();Le=a;let s;i==="sandbox"&&(s=ze("#i"+e));let l=i==="sandbox"?ze(s.nodes()[0].contentDocument.body):ze("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;nt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):ze(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await $He(f,y,n);if(Le.height=await UHe(f,w,m),ui.insertComputerIcon(h),ui.insertDatabaseIcon(h),ui.insertClockIcon(h),x&&(nt.bumpVerticalPos(Le.boxMargin),b&&nt.bumpVerticalPos(m[0].textMaxHeight)),Le.hideUnusedParticipants===!0){let F=new Set;y.forEach(B=>{F.add(B.from),F.add(B.to)}),g=g.filter(B=>F.has(B))}FHe(h,f,d,g,0,y,!1);let _=await YHe(y,f,w,n);ui.insertArrowHead(h),ui.insertArrowCrossHead(h),ui.insertArrowFilledHead(h),ui.insertSequenceNumber(h);function T(F,B){let $=nt.endActivation(F);$.starty+18>B&&($.starty=B-6,B+=12),ui.drawActivation(h,$,B,Le,TE(F.from).length),nt.insert($.startx,B-10,$.stopx,B)}o(T,"activeEnd");let E=1,L=1,C=[],A=[],I=0;for(let F of y){let B,$,z;switch(F.type){case n.db.LINETYPE.NOTE:nt.resetVerticalPos(),$=F.noteModel,await OHe(h,$);break;case n.db.LINETYPE.ACTIVE_START:nt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,nt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.LOOP_END:B=nt.endLoop(),await ui.drawLoop(h,B,"loop",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.RECT_START:zc(_,F,Le.boxMargin,Le.boxMargin,W=>nt.newLoop(void 0,W.message));break;case n.db.LINETYPE.RECT_END:B=nt.endLoop(),A.push(B),nt.models.addLoop(B),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.OPT_END:B=nt.endLoop(),await ui.drawLoop(h,B,"opt",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.ALT_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.ALT_ELSE:zc(_,F,Le.boxMargin+Le.boxTextMargin,Le.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.ALT_END:B=nt.endLoop(),await ui.drawLoop(h,B,"alt",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W)),nt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:zc(_,F,Le.boxMargin+Le.boxTextMargin,Le.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.PAR_END:B=nt.endLoop(),await ui.drawLoop(h,B,"par",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,L=F.message.step||L,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.CRITICAL_OPTION:zc(_,F,Le.boxMargin+Le.boxTextMargin,Le.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.CRITICAL_END:B=nt.endLoop(),await ui.drawLoop(h,B,"critical",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.BREAK_START:zc(_,F,Le.boxMargin,Le.boxMargin+Le.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.BREAK_END:B=nt.endLoop(),await ui.drawLoop(h,B,"break",Le),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;default:try{z=F.msgModel,z.starty=nt.getVerticalPos(),z.sequenceIndex=E,z.sequenceVisible=n.db.showSequenceNumbers();let W=await PHe(h,z);zHe(F,z,W,I,f,d,p),C.push({messageModel:z,lineStartY:W}),nt.models.addMessage(z)}catch(W){Y.error("error while drawing message",W)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+L),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await LO(h,f,g,!1);for(let F of C)await BHe(h,F.messageModel,F.lineStartY,n);Le.mirrorActors&&await LO(h,f,g,!0),A.forEach(F=>ui.drawBackgroundRect(h,F)),CO(h,f,g,Le);for(let F of nt.models.boxes)F.height=nt.getVerticalPos()-F.y,nt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",ui.drawBox(h,F,Le);x&&nt.bumpVerticalPos(Le.boxMargin);let D=cde(h,f,g,u),{bounds:k}=nt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let R=k.stopy-k.starty;R2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Le.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Ut.wrapLabel(t.message,je.getMax(m+2*Le.wrapPadding,Le.width),S0(Le)));let g=Ut.calculateTextDimensions(t.message,S0(Le));return{width:je.getMax(t.wrap?0:g.width+2*Le.wrapPadding,m+2*Le.wrapPadding,Le.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),YHe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.id=Ut.random({length:10}),h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=TE(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Le.activationWidth/2,g={startx:m,stopx:m+Le.activationWidth,actor:h.from,enabled:!0};nt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=nt.activations.map(p=>p.actor).lastIndexOf(h.from);nt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await HHe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=je.getMin(s.from,l.startx),s.to=je.getMax(s.to,l.startx+l.width),s.width=je.getMax(s.width,Math.abs(s.from-s.to))-Le.labelBoxWidth})):(u=WHe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=je.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=je.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=je.getMax(s.width,Math.abs(s.to-s.from))-Le.labelBoxWidth}else s.from=je.getMin(u.startx,s.from),s.to=je.getMax(u.stopx,s.to),s.width=je.getMax(s.width,u.width)-Le.labelBoxWidth}))}return nt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),hde={bounds:nt,drawActors:LO,drawActorsPopup:cde,setConf:ude,draw:GHe}});var dde={};vr(dde,{diagram:()=>qHe});var qHe,pde=M(()=>{"use strict";Hfe();Zfe();ede();fde();qHe={parser:Ufe,db:kO,renderer:hde,styles:Jfe,init:o(({wrap:t})=>{kO.setWrap(t)},"init")}});var DO,kE,NO=M(()=>{"use strict";DO=function(){var t=o(function(X,fe,he,ge){for(he=he||{},ge=X.length;ge--;he[X[ge]]=fe);return he},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],_=[1,30],T=[1,31],E=[1,44],L=[1,46],C=[1,43],A=[1,47],I=[1,9],D=[1,8,9],k=[1,58],R=[1,59],S=[1,60],O=[1,61],N=[1,62],P=[1,63],F=[1,64],B=[1,8,9,41],$=[1,76],z=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],W=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],j=[13,58,84,99,101,102],K=[13,58,71,72,84,99,101,102],ie=[13,58,66,67,68,69,70,84,99,101,102],Q=[1,98],ee=[1,115],J=[1,107],H=[1,113],q=[1,108],Z=[1,109],ae=[1,110],ue=[1,111],ce=[1,112],te=[1,114],De=[22,58,59,80,84,85,86,87,88,89],oe=[1,8,9,39,41,44],ke=[1,8,9,22],Fe=[1,143],Be=[1,8,9,59],Ve=[1,8,9,22,58,59,80,84,85,86,87,88,89],Ge={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(fe,he,ge,ne,ye,U,Te){var se=U.length-1;switch(ye){case 8:this.$=U[se-1];break;case 9:case 12:case 14:this.$=U[se];break;case 10:case 13:this.$=U[se-2]+"."+U[se];break;case 11:case 15:this.$=U[se-1]+U[se];break;case 16:case 17:this.$=U[se-1]+"~"+U[se]+"~";break;case 18:ne.addRelation(U[se]);break;case 19:U[se-1].title=ne.cleanupLabel(U[se]),ne.addRelation(U[se-1]);break;case 30:this.$=U[se].trim(),ne.setAccTitle(this.$);break;case 31:case 32:this.$=U[se].trim(),ne.setAccDescription(this.$);break;case 33:ne.addClassesToNamespace(U[se-3],U[se-1]);break;case 34:ne.addClassesToNamespace(U[se-4],U[se-1]);break;case 35:this.$=U[se],ne.addNamespace(U[se]);break;case 36:this.$=[U[se]];break;case 37:this.$=[U[se-1]];break;case 38:U[se].unshift(U[se-2]),this.$=U[se];break;case 40:ne.setCssClass(U[se-2],U[se]);break;case 41:ne.addMembers(U[se-3],U[se-1]);break;case 42:ne.setCssClass(U[se-5],U[se-3]),ne.addMembers(U[se-5],U[se-1]);break;case 43:this.$=U[se],ne.addClass(U[se]);break;case 44:this.$=U[se-1],ne.addClass(U[se-1]),ne.setClassLabel(U[se-1],U[se]);break;case 45:ne.addAnnotation(U[se],U[se-2]);break;case 46:case 59:this.$=[U[se]];break;case 47:U[se].push(U[se-1]),this.$=U[se];break;case 48:break;case 49:ne.addMember(U[se-1],ne.cleanupLabel(U[se]));break;case 50:break;case 51:break;case 52:this.$={id1:U[se-2],id2:U[se],relation:U[se-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:U[se-3],id2:U[se],relation:U[se-1],relationTitle1:U[se-2],relationTitle2:"none"};break;case 54:this.$={id1:U[se-3],id2:U[se],relation:U[se-2],relationTitle1:"none",relationTitle2:U[se-1]};break;case 55:this.$={id1:U[se-4],id2:U[se],relation:U[se-2],relationTitle1:U[se-3],relationTitle2:U[se-1]};break;case 56:ne.addNote(U[se],U[se-1]);break;case 57:ne.addNote(U[se]);break;case 58:this.$=U[se-2],ne.defineClass(U[se-1],U[se]);break;case 60:this.$=U[se-2].concat([U[se]]);break;case 61:ne.setDirection("TB");break;case 62:ne.setDirection("BT");break;case 63:ne.setDirection("RL");break;case 64:ne.setDirection("LR");break;case 65:this.$={type1:U[se-2],type2:U[se],lineType:U[se-1]};break;case 66:this.$={type1:"none",type2:U[se],lineType:U[se-1]};break;case 67:this.$={type1:U[se-1],type2:"none",lineType:U[se]};break;case 68:this.$={type1:"none",type2:"none",lineType:U[se]};break;case 69:this.$=ne.relationType.AGGREGATION;break;case 70:this.$=ne.relationType.EXTENSION;break;case 71:this.$=ne.relationType.COMPOSITION;break;case 72:this.$=ne.relationType.DEPENDENCY;break;case 73:this.$=ne.relationType.LOLLIPOP;break;case 74:this.$=ne.lineType.LINE;break;case 75:this.$=ne.lineType.DOTTED_LINE;break;case 76:case 82:this.$=U[se-2],ne.setClickEvent(U[se-1],U[se]);break;case 77:case 83:this.$=U[se-3],ne.setClickEvent(U[se-2],U[se-1]),ne.setTooltip(U[se-2],U[se]);break;case 78:this.$=U[se-2],ne.setLink(U[se-1],U[se]);break;case 79:this.$=U[se-3],ne.setLink(U[se-2],U[se-1],U[se]);break;case 80:this.$=U[se-3],ne.setLink(U[se-2],U[se-1]),ne.setTooltip(U[se-2],U[se]);break;case 81:this.$=U[se-4],ne.setLink(U[se-3],U[se-2],U[se]),ne.setTooltip(U[se-3],U[se-1]);break;case 84:this.$=U[se-3],ne.setClickEvent(U[se-2],U[se-1],U[se]);break;case 85:this.$=U[se-4],ne.setClickEvent(U[se-3],U[se-2],U[se-1]),ne.setTooltip(U[se-3],U[se]);break;case 86:this.$=U[se-3],ne.setLink(U[se-2],U[se]);break;case 87:this.$=U[se-4],ne.setLink(U[se-3],U[se-1],U[se]);break;case 88:this.$=U[se-4],ne.setLink(U[se-3],U[se-1]),ne.setTooltip(U[se-3],U[se]);break;case 89:this.$=U[se-5],ne.setLink(U[se-4],U[se-2],U[se]),ne.setTooltip(U[se-4],U[se-1]);break;case 90:this.$=U[se-2],ne.setCssStyle(U[se-1],U[se]);break;case 91:ne.setCssClass(U[se-1],U[se]);break;case 92:this.$=[U[se]];break;case 93:U[se-2].push(U[se]),this.$=U[se-2];break;case 95:this.$=U[se-1]+U[se];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:C,102:A},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:R,68:S,69:O,70:N,71:P,72:F}),{39:[1,65]},t(B,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:L,101:C},{16:39,18:69,19:40,58:p,84:E,99:L,101:C,102:A},{16:39,18:70,19:40,58:p,84:E,99:L,101:C,102:A},{16:39,18:71,19:40,58:p,84:E,99:L,101:C,102:A},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:L,101:C,102:A},{13:$,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t(z,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:L,101:C,102:A}),t(z,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:L,101:C},{16:39,18:85,19:40,58:p,84:E,99:L,101:C,102:A},t(W,[2,118]),t(W,[2,119]),t(W,[2,120]),t(W,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:C,102:A}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:C,102:A},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:L,101:C,102:A},{51:90,64:56,65:57,66:k,67:R,68:S,69:O,70:N,71:P,72:F},t(D,[2,49]),{65:91,71:P,72:F},t(j,[2,68],{64:92,66:k,67:R,68:S,69:O,70:N}),t(K,[2,69]),t(K,[2,70]),t(K,[2,71]),t(K,[2,72]),t(K,[2,73]),t(ie,[2,74]),t(ie,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:L,101:C},{45:97,49:Q},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:ee,57:104,58:J,80:H,82:105,83:106,84:q,85:Z,86:ae,87:ue,88:ce,89:te},{58:[1,116]},{13:$,53:117},t(D,[2,57]),t(D,[2,123]),{22:ee,57:118,58:J,59:[1,119],80:H,82:105,83:106,84:q,85:Z,86:ae,87:ue,88:ce,89:te},t(De,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:L,101:C,102:A},t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:L,101:C},t(oe,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ke,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:L,101:C,102:A},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:L,101:C,102:A},t(j,[2,67],{64:129,66:k,67:R,68:S,69:O,70:N}),t(j,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(B,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:Q},{16:39,18:136,19:40,58:p,84:E,99:L,101:C,102:A},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Fe}),t(Be,[2,92],{83:144,22:ee,58:J,80:H,84:q,85:Z,86:ae,87:ue,88:ce,89:te}),t(Ve,[2,94]),t(Ve,[2,96]),t(Ve,[2,97]),t(Ve,[2,98]),t(Ve,[2,99]),t(Ve,[2,100]),t(Ve,[2,101]),t(Ve,[2,102]),t(Ve,[2,103]),t(Ve,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Fe}),{58:[1,145]},t(z,[2,13]),{15:146,16:84,58:p,84:E,99:L,101:C},{39:[2,11]},t(oe,[2,44]),{13:[1,147]},{1:[2,4]},t(ke,[2,54]),t(ke,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:L,101:C,102:A},t(j,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:Q},t(B,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:ee,58:J,80:H,82:156,83:106,84:q,85:Z,86:ae,87:ue,88:ce,89:te},t(Ve,[2,95]),t(De,[2,60]),{39:[2,10]},{14:[1,157]},t(ke,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(Be,[2,93],{83:144,22:ee,58:J,80:H,84:q,85:Z,86:ae,87:ue,88:ce,89:te}),t(oe,[2,8]),t(B,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(fe,he){if(he.recoverable)this.trace(fe);else{var ge=new Error(fe);throw ge.hash=he,ge}},"parseError"),parse:o(function(fe){var he=this,ge=[0],ne=[],ye=[null],U=[],Te=this.table,se="",Ee=0,Ae=0,Pe=0,Me=2,me=1,We=U.slice.call(arguments,1),Re=Object.create(this.lexer),tt={yy:{}};for(var gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gt)&&(tt.yy[gt]=this.yy[gt]);Re.setInput(fe,tt.yy),tt.yy.lexer=Re,tt.yy.parser=this,typeof Re.yylloc>"u"&&(Re.yylloc={});var Et=Re.yylloc;U.push(Et);var vt=Re.options&&Re.options.ranges;typeof tt.yy.parseError=="function"?this.parseError=tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ye(or){ge.length=ge.length-2*or,ye.length=ye.length-or,U.length=U.length-or}o(Ye,"popStack");function Tt(){var or;return or=ne.pop()||Re.lex()||me,typeof or!="number"&&(or instanceof Array&&(ne=or,or=ne.pop()),or=he.symbols_[or]||or),or}o(Tt,"lex");for(var $e,rt,ft,kt,er,dt,Xe={},ct,Lt,Rt,zt;;){if(ft=ge[ge.length-1],this.defaultActions[ft]?kt=this.defaultActions[ft]:(($e===null||typeof $e>"u")&&($e=Tt()),kt=Te[ft]&&Te[ft][$e]),typeof kt>"u"||!kt.length||!kt[0]){var Xn="";zt=[];for(ct in Te[ft])this.terminals_[ct]&&ct>Me&&zt.push("'"+this.terminals_[ct]+"'");Re.showPosition?Xn="Parse error on line "+(Ee+1)+`: +`+Re.showPosition()+` +Expecting `+zt.join(", ")+", got '"+(this.terminals_[$e]||$e)+"'":Xn="Parse error on line "+(Ee+1)+": Unexpected "+($e==me?"end of input":"'"+(this.terminals_[$e]||$e)+"'"),this.parseError(Xn,{text:Re.match,token:this.terminals_[$e]||$e,line:Re.yylineno,loc:Et,expected:zt})}if(kt[0]instanceof Array&&kt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ft+", token: "+$e);switch(kt[0]){case 1:ge.push($e),ye.push(Re.yytext),U.push(Re.yylloc),ge.push(kt[1]),$e=null,rt?($e=rt,rt=null):(Ae=Re.yyleng,se=Re.yytext,Ee=Re.yylineno,Et=Re.yylloc,Pe>0&&Pe--);break;case 2:if(Lt=this.productions_[kt[1]][1],Xe.$=ye[ye.length-Lt],Xe._$={first_line:U[U.length-(Lt||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(Lt||1)].first_column,last_column:U[U.length-1].last_column},vt&&(Xe._$.range=[U[U.length-(Lt||1)].range[0],U[U.length-1].range[1]]),dt=this.performAction.apply(Xe,[se,Ae,Ee,tt.yy,kt[1],ye,U].concat(We)),typeof dt<"u")return dt;Lt&&(ge=ge.slice(0,-1*Lt*2),ye=ye.slice(0,-1*Lt),U=U.slice(0,-1*Lt)),ge.push(this.productions_[kt[1]][0]),ye.push(Xe.$),U.push(Xe._$),Rt=Te[ge[ge.length-2]][ge[ge.length-1]],ge.push(Rt);break;case 3:return!0}}return!0},"parse")},He=function(){var X={EOF:1,parseError:o(function(he,ge){if(this.yy.parser)this.yy.parser.parseError(he,ge);else throw new Error(he)},"parseError"),setInput:o(function(fe,he){return this.yy=he||this.yy||{},this._input=fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var fe=this._input[0];this.yytext+=fe,this.yyleng++,this.offset++,this.match+=fe,this.matched+=fe;var he=fe.match(/(?:\r\n?|\n).*/g);return he?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),fe},"input"),unput:o(function(fe){var he=fe.length,ge=fe.split(/(?:\r\n?|\n)/g);this._input=fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-he),this.offset-=he;var ne=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ge.length-1&&(this.yylineno-=ge.length-1);var ye=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ge?(ge.length===ne.length?this.yylloc.first_column:0)+ne[ne.length-ge.length].length-ge[0].length:this.yylloc.first_column-he},this.options.ranges&&(this.yylloc.range=[ye[0],ye[0]+this.yyleng-he]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(fe){this.unput(this.match.slice(fe))},"less"),pastInput:o(function(){var fe=this.matched.substr(0,this.matched.length-this.match.length);return(fe.length>20?"...":"")+fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var fe=this.match;return fe.length<20&&(fe+=this._input.substr(0,20-fe.length)),(fe.substr(0,20)+(fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var fe=this.pastInput(),he=new Array(fe.length+1).join("-");return fe+this.upcomingInput()+` +`+he+"^"},"showPosition"),test_match:o(function(fe,he){var ge,ne,ye;if(this.options.backtrack_lexer&&(ye={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ye.yylloc.range=this.yylloc.range.slice(0))),ne=fe[0].match(/(?:\r\n?|\n).*/g),ne&&(this.yylineno+=ne.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ne?ne[ne.length-1].length-ne[ne.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+fe[0].length},this.yytext+=fe[0],this.match+=fe[0],this.matches=fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(fe[0].length),this.matched+=fe[0],ge=this.performAction.call(this,this.yy,this,he,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ge)return ge;if(this._backtrack){for(var U in ye)this[U]=ye[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var fe,he,ge,ne;this._more||(this.yytext="",this.match="");for(var ye=this._currentRules(),U=0;Uhe[0].length)){if(he=ge,ne=U,this.options.backtrack_lexer){if(fe=this.test_match(ge,ye[U]),fe!==!1)return fe;if(this._backtrack){he=!1;continue}else return!1}else if(!this.options.flex)break}return he?(fe=this.test_match(he,ye[ne]),fe!==!1?fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var he=this.next();return he||this.lex()},"lex"),begin:o(function(he){this.conditionStack.push(he)},"begin"),popState:o(function(){var he=this.conditionStack.length-1;return he>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(he){return he=this.conditionStack.length-1-Math.abs(he||0),he>=0?this.conditionStack[he]:"INITIAL"},"topState"),pushState:o(function(he){this.begin(he)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(he,ge,ne,ye){var U=ye;switch(ne){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return X}();Ge.lexer=He;function xe(){this.yy={}}return o(xe,"Parser"),xe.prototype=Ge,Ge.Parser=xe,new xe}();DO.parser=DO;kE=DO});var yde,Tx,vde=M(()=>{"use strict";Vt();fr();yde=["#","+","~","-",""],Tx=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,de());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ou(this.id);this.memberType==="method"&&(e+=`(${ou(this.parameters.trim())})`,this.returnType&&(e+=" : "+ou(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(yde.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);yde.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ou(this.id)}${this.memberType==="method"?`(${ou(this.parameters)})${this.returnType?" : "+ou(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});function Tde(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}var EE,SE,Ln,xde,kx,Gg,bde,$l,RO,Ex,C0,A0,QHe,zg,wde,kde,ZHe,JHe,eWe,tWe,rWe,nWe,iWe,Ede,aWe,sWe,oWe,MO,lWe,cWe,uWe,hWe,fWe,dWe,pWe,mWe,mf,Sde,IO,Cde,gWe,yWe,vWe,xWe,bWe,wWe,TWe,$g,OO=M(()=>{"use strict";mr();ht();Vt();fr();hr();ki();vde();EE="classId-",SE=[],Ln=new Map,xde=new Map,kx=[],Gg=[],bde=0,$l=new Map,RO=0,Ex=[],C0=o(t=>je.sanitizeText(t,de()),"sanitizeText"),A0=o(function(t){let e=je.sanitizeText(t,de()),r="",n=e;if(e.indexOf("~")>0){let i=e.split("~");n=C0(i[0]),r=C0(i[1])}return{className:n,type:r}},"splitClassNameAndType"),QHe=o(function(t,e){let r=je.sanitizeText(t,de());e&&(e=C0(e));let{className:n}=A0(r);Ln.get(n).label=e,Ln.get(n).text=`${e}${Ln.get(n).type?`<${Ln.get(n).type}>`:""}`},"setClassLabel"),zg=o(function(t){let e=je.sanitizeText(t,de()),{className:r,type:n}=A0(e);if(Ln.has(r))return;let i=je.sanitizeText(r,de());Ln.set(i,{id:i,type:n,label:i,text:`${i}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:EE+i+"-"+bde}),bde++},"addClass"),wde=o(function(t,e){let r={id:`interface${Gg.length}`,label:t,classId:e};Gg.push(r)},"addInterface"),kde=o(function(t){let e=je.sanitizeText(t,de());if(Ln.has(e))return Ln.get(e).domId;throw new Error("Class not found: "+e)},"lookUpDomId"),ZHe=o(function(){SE=[],Ln=new Map,kx=[],Gg=[],Ex=[],Ex.push(Sde),$l=new Map,RO=0,IO="TB",_r()},"clear"),JHe=o(function(t){return Ln.get(t)},"getClass"),eWe=o(function(){return Ln},"getClasses"),tWe=o(function(){return SE},"getRelations"),rWe=o(function(){return kx},"getNotes"),nWe=o(function(t){Y.debug("Adding relation: "+JSON.stringify(t));let e=[mf.LOLLIPOP,mf.AGGREGATION,mf.COMPOSITION,mf.DEPENDENCY,mf.EXTENSION];t.relation.type1===mf.LOLLIPOP&&!e.includes(t.relation.type2)?(zg(t.id2),wde(t.id1,t.id2),t.id1=`interface${Gg.length-1}`):t.relation.type2===mf.LOLLIPOP&&!e.includes(t.relation.type1)?(zg(t.id1),wde(t.id2,t.id1),t.id2=`interface${Gg.length-1}`):(zg(t.id1),zg(t.id2)),t.id1=A0(t.id1).className,t.id2=A0(t.id2).className,t.relationTitle1=je.sanitizeText(t.relationTitle1.trim(),de()),t.relationTitle2=je.sanitizeText(t.relationTitle2.trim(),de()),SE.push(t)},"addRelation"),iWe=o(function(t,e){let r=A0(t).className;Ln.get(r).annotations.push(e)},"addAnnotation"),Ede=o(function(t,e){zg(t);let r=A0(t).className,n=Ln.get(r);if(typeof e=="string"){let i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?n.annotations.push(C0(i.substring(2,i.length-2))):i.indexOf(")")>0?n.methods.push(new Tx(i,"method")):i&&n.members.push(new Tx(i,"attribute"))}},"addMember"),aWe=o(function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(r=>Ede(t,r)))},"addMembers"),sWe=o(function(t,e){let r={id:`note${kx.length}`,class:e,text:t};kx.push(r)},"addNote"),oWe=o(function(t){return t.startsWith(":")&&(t=t.substring(1)),C0(t.trim())},"cleanupLabel"),MO=o(function(t,e){t.split(",").forEach(function(r){let n=r;/\d/.exec(r[0])&&(n=EE+n);let i=Ln.get(n);i&&(i.cssClasses+=" "+e)})},"setCssClass"),lWe=o(function(t,e){for(let r of t){let n=xde.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},xde.set(r,n)),e&&e.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)}),Ln.forEach(i=>{i.cssClasses.includes(r)&&i.styles.push(...e.flatMap(a=>a.split(",")))})}},"defineClass"),cWe=o(function(t,e){t.split(",").forEach(function(r){e!==void 0&&(Ln.get(r).tooltip=C0(e))})},"setTooltip"),uWe=o(function(t,e){return e&&$l.has(e)?$l.get(e).classes.get(t).tooltip:Ln.get(t).tooltip},"getTooltip"),hWe=o(function(t,e,r){let n=de();t.split(",").forEach(function(i){let a=i;/\d/.exec(i[0])&&(a=EE+a);let s=Ln.get(a);s&&(s.link=Ut.formatUrl(e,n),n.securityLevel==="sandbox"?s.linkTarget="_top":typeof r=="string"?s.linkTarget=C0(r):s.linkTarget="_blank")}),MO(t,"clickable")},"setLink"),fWe=o(function(t,e,r){t.split(",").forEach(function(n){dWe(n,e,r),Ln.get(n).haveCallback=!0}),MO(t,"clickable")},"setClickEvent"),dWe=o(function(t,e,r){let n=je.sanitizeText(t,de());if(de().securityLevel!=="loose"||e===void 0)return;let a=n;if(Ln.has(a)){let s=kde(a),l=[];if(typeof r=="string"){l=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),ze(this).classed("hover",!1)})},"setupToolTips");Ex.push(Sde);IO="TB",Cde=o(()=>IO,"getDirection"),gWe=o(t=>{IO=t},"setDirection"),yWe=o(function(t){$l.has(t)||($l.set(t,{id:t,classes:new Map,children:{},domId:EE+t+"-"+RO}),RO++)},"addNamespace"),vWe=o(function(t){return $l.get(t)},"getNamespace"),xWe=o(function(){return $l},"getNamespaces"),bWe=o(function(t,e){if($l.has(t))for(let r of e){let{className:n}=A0(r);Ln.get(n).parent=t,$l.get(t).classes.set(n,Ln.get(n))}},"addClassesToNamespace"),wWe=o(function(t,e){let r=Ln.get(t);if(!(!e||!r))for(let n of e)n.includes(",")?r.styles.push(...n.split(",")):r.styles.push(n)},"setCssStyle");o(Tde,"getArrowMarker");TWe=o(()=>{let t=[],e=[],r=de();for(let i of $l.keys()){let a=$l.get(i);if(a){let s={id:a.id,label:a.id,isGroup:!0,padding:r.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:r.look};t.push(s)}}for(let i of Ln.keys()){let a=Ln.get(i);if(a){let s=a;s.parentId=a.parent,s.look=r.look,t.push(s)}}let n=0;for(let i of kx){n++;let a={id:i.id,label:i.text,isGroup:!1,shape:"note",padding:r.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${r.themeVariables.noteBkgColor}`,`stroke: ${r.themeVariables.noteBorderColor}`],look:r.look};t.push(a);let s=Ln.get(i.class)?.id??"";if(s){let l={id:`edgeNote${n}`,start:i.id,end:s,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:r.look};e.push(l)}}for(let i of Gg){let a={id:i.id,label:i.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:r.look};t.push(a)}n=0;for(let i of SE){n++;let a={id:p5(i.id1,i.id2,{prefix:"id",counter:n}),start:i.id1,end:i.id2,type:"normal",label:i.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:Tde(i.relation.type1),arrowTypeEnd:Tde(i.relation.type2),startLabelRight:i.relationTitle1==="none"?"":i.relationTitle1,endLabelLeft:i.relationTitle2==="none"?"":i.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:i.style||"",pattern:i.relation.lineType==1?"dashed":"solid",look:r.look};e.push(a)}return{nodes:t,edges:e,other:{},config:r,direction:Cde()}},"getData"),$g={setAccTitle:Rr,getAccTitle:Pr,getAccDescription:Fr,setAccDescription:Br,getConfig:o(()=>de().class,"getConfig"),addClass:zg,bindFunctions:pWe,clear:ZHe,getClass:JHe,getClasses:eWe,getNotes:rWe,addAnnotation:iWe,addNote:sWe,getRelations:tWe,addRelation:nWe,getDirection:Cde,setDirection:gWe,addMember:Ede,addMembers:aWe,cleanupLabel:oWe,lineType:mWe,relationType:mf,setClickEvent:fWe,setCssClass:MO,defineClass:lWe,setLink:hWe,getTooltip:uWe,setTooltip:cWe,lookUpDomId:kde,setDiagramTitle:ln,getDiagramTitle:Jr,setClassLabel:QHe,addNamespace:yWe,addClassesToNamespace:bWe,getNamespace:vWe,getNamespaces:xWe,setCssStyle:wWe,getData:TWe}});var kWe,CE,PO=M(()=>{"use strict";kWe=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; + stroke: none; + font-family: ${t.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${t.classText}; +} +.edgeLabel .label rect { + fill: ${t.mainBkg}; +} +.label text { + fill: ${t.classText}; +} + +.labelBkg { + background: ${t.mainBkg}; +} +.edgeLabel .label span { + background: ${t.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.classGroup line { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${t.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${t.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),CE=kWe});var EWe,SWe,CWe,AE,BO=M(()=>{"use strict";Vt();ht();j5();Fv();uT();hr();EWe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),SWe=o(function(t,e){return e.db.getClasses()},"getClasses"),CWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=de(),l=n.db.getData(),u=pm(e,i);l.type=n.type,l.layoutAlgorithm=cT(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Fm(l,u);let h=8;Ut.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),zm(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),AE={getClasses:SWe,draw:CWe,getDir:EWe}});var Ade={};vr(Ade,{diagram:()=>AWe});var AWe,_de=M(()=>{"use strict";NO();OO();PO();BO();AWe={parser:kE,db:$g,renderer:AE,styles:CE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,$g.clear()},"init")}});var Nde={};vr(Nde,{diagram:()=>NWe});var NWe,Rde=M(()=>{"use strict";NO();OO();PO();BO();NWe={parser:kE,db:$g,renderer:AE,styles:CE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,$g.clear()},"init")}});var FO,_E,zO=M(()=>{"use strict";FO=function(){var t=o(function(F,B,$,z){for($=$||{},z=F.length;z--;$[F[z]]=B);return $},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],_=[1,29],T=[1,30],E=[1,31],L=[1,34],C=[1,35],A=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],S=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(B,$,z,W,j,K,ie){var Q=K.length-1;switch(j){case 3:return W.setRootDoc(K[Q]),K[Q];break;case 4:this.$=[];break;case 5:K[Q]!="nl"&&(K[Q-1].push(K[Q]),this.$=K[Q-1]);break;case 6:case 7:this.$=K[Q];break;case 8:this.$="nl";break;case 12:this.$=K[Q];break;case 13:let q=K[Q-1];q.description=W.trimColon(K[Q]),this.$=q;break;case 14:this.$={stmt:"relation",state1:K[Q-2],state2:K[Q]};break;case 15:let Z=W.trimColon(K[Q]);this.$={stmt:"relation",state1:K[Q-3],state2:K[Q-1],description:Z};break;case 19:this.$={stmt:"state",id:K[Q-3],type:"default",description:"",doc:K[Q-1]};break;case 20:var ee=K[Q],J=K[Q-2].trim();if(K[Q].match(":")){var H=K[Q].split(":");ee=H[0],J=[J,H[1]]}this.$={stmt:"state",id:ee,type:"default",description:J};break;case 21:this.$={stmt:"state",id:K[Q-3],type:"default",description:K[Q-5],doc:K[Q-1]};break;case 22:this.$={stmt:"state",id:K[Q],type:"fork"};break;case 23:this.$={stmt:"state",id:K[Q],type:"join"};break;case 24:this.$={stmt:"state",id:K[Q],type:"choice"};break;case 25:this.$={stmt:"state",id:W.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:K[Q-1].trim(),note:{position:K[Q-2].trim(),text:K[Q].trim()}};break;case 29:this.$=K[Q].trim(),W.setAccTitle(this.$);break;case 30:case 31:this.$=K[Q].trim(),W.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:K[Q-1].trim(),classes:K[Q].trim()};break;case 34:this.$={stmt:"style",id:K[Q-1].trim(),styleClass:K[Q].trim()};break;case 35:this.$={stmt:"applyClass",id:K[Q-1].trim(),styleClass:K[Q].trim()};break;case 36:W.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:W.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:W.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:W.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:K[Q].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:K[Q-2].trim(),classes:[K[Q].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:K[Q-2].trim(),classes:[K[Q].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:C,50:A,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:C,50:A,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(R,[2,42],{55:[1,54]}),t(R,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(S,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:C,50:A,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(R,[2,44]),t(R,[2,45]),t(k,[2,15]),t(k,[2,19]),t(S,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:C,50:A,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(B,$){if($.recoverable)this.trace(B);else{var z=new Error(B);throw z.hash=$,z}},"parseError"),parse:o(function(B){var $=this,z=[0],W=[],j=[null],K=[],ie=this.table,Q="",ee=0,J=0,H=0,q=2,Z=1,ae=K.slice.call(arguments,1),ue=Object.create(this.lexer),ce={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(ce.yy[te]=this.yy[te]);ue.setInput(B,ce.yy),ce.yy.lexer=ue,ce.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var De=ue.yylloc;K.push(De);var oe=ue.options&&ue.options.ranges;typeof ce.yy.parseError=="function"?this.parseError=ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(Te){z.length=z.length-2*Te,j.length=j.length-Te,K.length=K.length-Te}o(ke,"popStack");function Fe(){var Te;return Te=W.pop()||ue.lex()||Z,typeof Te!="number"&&(Te instanceof Array&&(W=Te,Te=W.pop()),Te=$.symbols_[Te]||Te),Te}o(Fe,"lex");for(var Be,Ve,Ge,He,xe,X,fe={},he,ge,ne,ye;;){if(Ge=z[z.length-1],this.defaultActions[Ge]?He=this.defaultActions[Ge]:((Be===null||typeof Be>"u")&&(Be=Fe()),He=ie[Ge]&&ie[Ge][Be]),typeof He>"u"||!He.length||!He[0]){var U="";ye=[];for(he in ie[Ge])this.terminals_[he]&&he>q&&ye.push("'"+this.terminals_[he]+"'");ue.showPosition?U="Parse error on line "+(ee+1)+`: +`+ue.showPosition()+` +Expecting `+ye.join(", ")+", got '"+(this.terminals_[Be]||Be)+"'":U="Parse error on line "+(ee+1)+": Unexpected "+(Be==Z?"end of input":"'"+(this.terminals_[Be]||Be)+"'"),this.parseError(U,{text:ue.match,token:this.terminals_[Be]||Be,line:ue.yylineno,loc:De,expected:ye})}if(He[0]instanceof Array&&He.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ge+", token: "+Be);switch(He[0]){case 1:z.push(Be),j.push(ue.yytext),K.push(ue.yylloc),z.push(He[1]),Be=null,Ve?(Be=Ve,Ve=null):(J=ue.yyleng,Q=ue.yytext,ee=ue.yylineno,De=ue.yylloc,H>0&&H--);break;case 2:if(ge=this.productions_[He[1]][1],fe.$=j[j.length-ge],fe._$={first_line:K[K.length-(ge||1)].first_line,last_line:K[K.length-1].last_line,first_column:K[K.length-(ge||1)].first_column,last_column:K[K.length-1].last_column},oe&&(fe._$.range=[K[K.length-(ge||1)].range[0],K[K.length-1].range[1]]),X=this.performAction.apply(fe,[Q,J,ee,ce.yy,He[1],j,K].concat(ae)),typeof X<"u")return X;ge&&(z=z.slice(0,-1*ge*2),j=j.slice(0,-1*ge),K=K.slice(0,-1*ge)),z.push(this.productions_[He[1]][0]),j.push(fe.$),K.push(fe._$),ne=ie[z[z.length-2]][z[z.length-1]],z.push(ne);break;case 3:return!0}}return!0},"parse")},N=function(){var F={EOF:1,parseError:o(function($,z){if(this.yy.parser)this.yy.parser.parseError($,z);else throw new Error($)},"parseError"),setInput:o(function(B,$){return this.yy=$||this.yy||{},this._input=B,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var B=this._input[0];this.yytext+=B,this.yyleng++,this.offset++,this.match+=B,this.matched+=B;var $=B.match(/(?:\r\n?|\n).*/g);return $?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),B},"input"),unput:o(function(B){var $=B.length,z=B.split(/(?:\r\n?|\n)/g);this._input=B+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$),this.offset-=$;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var j=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===W.length?this.yylloc.first_column:0)+W[W.length-z.length].length-z[0].length:this.yylloc.first_column-$},this.options.ranges&&(this.yylloc.range=[j[0],j[0]+this.yyleng-$]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(B){this.unput(this.match.slice(B))},"less"),pastInput:o(function(){var B=this.matched.substr(0,this.matched.length-this.match.length);return(B.length>20?"...":"")+B.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var B=this.match;return B.length<20&&(B+=this._input.substr(0,20-B.length)),(B.substr(0,20)+(B.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var B=this.pastInput(),$=new Array(B.length+1).join("-");return B+this.upcomingInput()+` +`+$+"^"},"showPosition"),test_match:o(function(B,$){var z,W,j;if(this.options.backtrack_lexer&&(j={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(j.yylloc.range=this.yylloc.range.slice(0))),W=B[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+B[0].length},this.yytext+=B[0],this.match+=B[0],this.matches=B,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(B[0].length),this.matched+=B[0],z=this.performAction.call(this,this.yy,this,$,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var K in j)this[K]=j[K];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var B,$,z,W;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),K=0;K$[0].length)){if($=z,W=K,this.options.backtrack_lexer){if(B=this.test_match(z,j[K]),B!==!1)return B;if(this._backtrack){$=!1;continue}else return!1}else if(!this.options.flex)break}return $?(B=this.test_match($,j[W]),B!==!1?B:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var $=this.next();return $||this.lex()},"lex"),begin:o(function($){this.conditionStack.push($)},"begin"),popState:o(function(){var $=this.conditionStack.length-1;return $>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function($){return $=this.conditionStack.length-1-Math.abs($||0),$>=0?this.conditionStack[$]:"INITIAL"},"topState"),pushState:o(function($){this.begin($)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function($,z,W,j){var K=j;switch(W){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),z.yytext=z.yytext.substr(2).trim(),31;break;case 67:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return z.yytext=z.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=N;function P(){this.yy={}}return o(P,"Parser"),P.prototype=O,O.Parser=P,new P}();FO.parser=FO;_E=FO});var Ode,LE,Vg,Sx,Pde,Bde,Fde,_0,DE,GO,$O,VO,UO,HO,NE,RE,zde,Gde,WO,YO,$de,Vde,Ug,OWe,Ude,qO,PWe,BWe,Hde,Wde,FWe,Yde,zWe,qde,XO,jO,Xde,ME,jde,KO,IE=M(()=>{"use strict";Ode="LR",LE="TB",Vg="state",Sx="relation",Pde="classDef",Bde="style",Fde="applyClass",_0="default",DE="divider",GO="fill:none",$O="fill: #333",VO="c",UO="text",HO="normal",NE="rect",RE="rectWithTitle",zde="stateStart",Gde="stateEnd",WO="divider",YO="roundedWithTitle",$de="note",Vde="noteGroup",Ug="statediagram",OWe="state",Ude=`${Ug}-${OWe}`,qO="transition",PWe="note",BWe="note-edge",Hde=`${qO} ${BWe}`,Wde=`${Ug}-${PWe}`,FWe="cluster",Yde=`${Ug}-${FWe}`,zWe="cluster-alt",qde=`${Ug}-${zWe}`,XO="parent",jO="note",Xde="state",ME="----",jde=`${ME}${jO}`,KO=`${ME}${XO}`});function QO(t="",e=0,r="",n=ME){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Xde}-${t}${i}-${e}`}function OE(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function $We(t){return t?.classes?.join(" ")??""}function VWe(t){return t?.styles??[]}var PE,gf,GWe,Kde,Hg,Qde,Zde=M(()=>{"use strict";Vt();ht();fr();IE();PE=new Map,gf=0;o(QO,"stateDomId");GWe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case Vg:Hg(t,u,r,n,i,a,s,l);break;case _0:Hg(t,u,r,n,i,a,s,l);break;case Sx:{Hg(t,u.state1,r,n,i,a,s,l),Hg(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+gf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:GO,labelStyle:"",label:je.sanitizeText(u.description,de()),arrowheadStyle:$O,labelpos:VO,labelType:UO,thickness:HO,classes:qO,look:s};i.push(h),gf++}break}})},"setupDoc"),Kde=o((t,e=LE)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(OE,"insertOrUpdateNode");o($We,"getClassesFromDbInfo");o(VWe,"getStylesFromDbInfo");Hg=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=$We(h),d=VWe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=NE;e.start===!0?p=zde:e.start===!1&&(p=Gde),e.type!==_0&&(p=e.type),PE.get(u)||PE.set(u,{id:u,shape:p,description:je.sanitizeText(u,de()),cssClasses:`${f} ${Ude}`,cssStyles:d});let m=PE.get(u);e.description&&(Array.isArray(m.description)?(m.shape=RE,m.description.push(e.description)):m.description?.length>0?(m.shape=RE,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=NE,m.description=e.description),m.description=je.sanitizeTextOrArray(m.description,de())),m.description?.length===1&&m.shape===RE&&(m.type==="group"?m.shape=YO:m.shape=NE),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,Kde(e)),m.type="group",m.isGroup=!0,m.dir=Kde(e),m.shape=e.type===DE?WO:YO,m.cssClasses=`${m.cssClasses} ${Yde} ${a?qde:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:QO(u,gf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===WO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:$de,label:e.note.text,cssClasses:Wde,cssStyles:[],cssCompilesStyles:[],id:u+jde+"-"+gf,domId:QO(u,gf,jO),type:m.type,isGroup:m.type==="group",padding:de().flowchart.padding,look:s,position:e.note.position},v=u+KO,x={labelStyle:"",shape:Vde,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+KO,domId:QO(u,gf,XO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};gf++,x.id=v,y.parentId=v,OE(n,x,l),OE(n,y,l),OE(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:GO,labelStyle:"",classes:Hde,arrowheadStyle:$O,labelpos:VO,labelType:UO,thickness:HO,look:s})}else OE(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),GWe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),Qde=o(()=>{PE.clear(),gf=0},"reset")});var ZO,UWe,HWe,Jde,JO=M(()=>{"use strict";Vt();ht();j5();Fv();uT();hr();IE();ZO=o((t,e=LE)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),UWe=o(function(t,e){return e.db.extract(e.db.getRootDocV2()),e.db.getClasses()},"getClasses"),HWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=de();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=pm(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Fm(l,u);let h=8;Ut.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),zm(u,h,Ug,a?.useMaxWidth??!0)},"draw"),Jde={getClasses:UWe,draw:HWe,getDir:ZO}});function s0e(){return new Map}function eP(t=""){let e=t;return t===nP&&(Cx++,e=`${n0e}${Cx}`),e}function tP(t="",e=_0){return t===nP?n0e:e}function eYe(t=""){let e=t;return t===i0e&&(Cx++,e=`${a0e}${Cx}`),e}function tYe(t="",e=_0){return t===i0e?a0e:e}function rYe(t,e,r){let n=eP(t.id.trim()),i=tP(t.id.trim(),t.type),a=eP(e.id.trim()),s=tP(e.id.trim(),e.type);yf(n,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),yf(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),zs.relations.push({id1:n,id2:a,relationTitle:je.sanitizeText(r,de())})}var nP,n0e,i0e,a0e,e0e,t0e,WWe,YWe,zE,iP,o0e,GE,Wg,l0e,$E,zs,Cx,r0e,qWe,XWe,BE,jWe,KWe,FE,aP,QWe,yf,c0e,L0,u0e,ZWe,JWe,h0e,rP,nYe,iYe,f0e,aYe,sP,sYe,oYe,lYe,cYe,uYe,hYe,tl,VE=M(()=>{"use strict";ht();hr();fr();Vt();ki();Zde();JO();IE();nP="[*]",n0e="start",i0e=nP,a0e="end",e0e="color",t0e="fill",WWe="bgFill",YWe=",";o(s0e,"newClassesList");zE=[],iP=[],o0e=Ode,GE=[],Wg=s0e(),l0e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),$E={root:l0e()},zs=$E.root,Cx=0,r0e=0,qWe={LINE:0,DOTTED_LINE:1},XWe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},BE=o(t=>JSON.parse(JSON.stringify(t)),"clone"),jWe=o(t=>{Y.info("Setting root doc",t),GE=t},"setRootDoc"),KWe=o(()=>GE,"getRootDoc"),FE=o((t,e,r)=>{if(e.stmt===Sx)FE(t,e.state1,!0),FE(t,e.state2,!1);else if(e.stmt===Vg&&(e.id==="[*]"?(e.id=r?t.id+"_start":t.id+"_end",e.start=r):e.id=e.id.trim()),e.doc){let n=[],i=[],a;for(a=0;a0&&i.length>0){let s={stmt:Vg,id:e9(),type:"divider",doc:BE(i)};n.push(BE(s)),e.doc=n}e.doc.forEach(s=>FE(e,s,!0))}},"docTranslator"),aP=o(()=>(FE({id:"root"},{id:"root",doc:GE},!0),{id:"root",doc:GE}),"getRootDocV2"),QWe=o(t=>{let e;t.doc?e=t.doc:e=t,Y.info(e),c0e(!0),Y.info("Extract initial document:",e),e.forEach(a=>{switch(Y.warn("Statement",a.stmt),a.stmt){case Vg:yf(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case Sx:h0e(a.state1,a.state2,a.description);break;case Pde:f0e(a.id.trim(),a.classes);break;case Bde:{let s=a.id.trim().split(","),l=a.styleClass.split(",");s.forEach(u=>{let h=L0(u);if(h===void 0){let f=u.trim();yf(f),h=L0(f)}h.styles=l.map(f=>f.replace(/;/g,"")?.trim())})}break;case Fde:sP(a.id.trim(),a.styleClass);break}});let r=u0e(),i=de().look;Qde(),Hg(void 0,aP(),r,zE,iP,!0,i,Wg),zE.forEach(a=>{if(Array.isArray(a.label)){if(a.description=a.label.slice(1),a.isGroup&&a.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+a.id+"]");a.label=a.label[0]}})},"extract"),yf=o(function(t,e=_0,r=null,n=null,i=null,a=null,s=null,l=null){let u=t?.trim();if(zs.states.has(u)?(zs.states.get(u).doc||(zs.states.get(u).doc=r),zs.states.get(u).type||(zs.states.get(u).type=e)):(Y.info("Adding state ",u,n),zs.states.set(u,{id:u,descriptions:[],type:e,doc:r,note:i,classes:[],styles:[],textStyles:[]})),n&&(Y.info("Setting state description",u,n),typeof n=="string"&&rP(u,n.trim()),typeof n=="object"&&n.forEach(h=>rP(u,h.trim()))),i){let h=zs.states.get(u);h.note=i,h.note.text=je.sanitizeText(h.note.text,de())}a&&(Y.info("Setting state classes",u,a),(typeof a=="string"?[a]:a).forEach(f=>sP(u,f.trim()))),s&&(Y.info("Setting state styles",u,s),(typeof s=="string"?[s]:s).forEach(f=>sYe(u,f.trim()))),l&&(Y.info("Setting state styles",u,s),(typeof l=="string"?[l]:l).forEach(f=>oYe(u,f.trim())))},"addState"),c0e=o(function(t){zE=[],iP=[],$E={root:l0e()},zs=$E.root,Cx=0,Wg=s0e(),t||_r()},"clear"),L0=o(function(t){return zs.states.get(t)},"getState"),u0e=o(function(){return zs.states},"getStates"),ZWe=o(function(){Y.info("Documents = ",$E)},"logDocuments"),JWe=o(function(){return zs.relations},"getRelations");o(eP,"startIdIfNeeded");o(tP,"startTypeIfNeeded");o(eYe,"endIdIfNeeded");o(tYe,"endTypeIfNeeded");o(rYe,"addRelationObjs");h0e=o(function(t,e,r){if(typeof t=="object")rYe(t,e,r);else{let n=eP(t.trim()),i=tP(t),a=eYe(e.trim()),s=tYe(e);yf(n,i),yf(a,s),zs.relations.push({id1:n,id2:a,title:je.sanitizeText(r,de())})}},"addRelation"),rP=o(function(t,e){let r=zs.states.get(t),n=e.startsWith(":")?e.replace(":","").trim():e;r.descriptions.push(je.sanitizeText(n,de()))},"addDescription"),nYe=o(function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},"cleanupLabel"),iYe=o(()=>(r0e++,"divider-id-"+r0e),"getDividerId"),f0e=o(function(t,e=""){Wg.has(t)||Wg.set(t,{id:t,styles:[],textStyles:[]});let r=Wg.get(t);e?.split(YWe).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(e0e).exec(n)){let s=i.replace(t0e,WWe).replace(e0e,t0e);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),aYe=o(function(){return Wg},"getClasses"),sP=o(function(t,e){t.split(",").forEach(function(r){let n=L0(r);if(n===void 0){let i=r.trim();yf(i),n=L0(i)}n.classes.push(e)})},"setCssClass"),sYe=o(function(t,e){let r=L0(t);r!==void 0&&r.styles.push(e)},"setStyle"),oYe=o(function(t,e){let r=L0(t);r!==void 0&&r.textStyles.push(e)},"setTextStyle"),lYe=o(()=>o0e,"getDirection"),cYe=o(t=>{o0e=t},"setDirection"),uYe=o(t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),"trimColon"),hYe=o(()=>{let t=de();return{nodes:zE,edges:iP,other:{},config:t,direction:ZO(aP())}},"getData"),tl={getConfig:o(()=>de().state,"getConfig"),getData:hYe,addState:yf,clear:c0e,getState:L0,getStates:u0e,getRelations:JWe,getClasses:aYe,getDirection:lYe,addRelation:h0e,getDividerId:iYe,setDirection:cYe,cleanupLabel:nYe,lineType:qWe,relationType:XWe,logDocuments:ZWe,getRootDoc:KWe,setRootDoc:jWe,getRootDocV2:aP,extract:QWe,trimColon:uYe,getAccTitle:Pr,setAccTitle:Rr,getAccDescription:Fr,setAccDescription:Br,addStyleClass:f0e,setCssClass:sP,addDescription:rP,setDiagramTitle:ln,getDiagramTitle:Jr}});var fYe,UE,oP=M(()=>{"use strict";fYe=o(t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),UE=fYe});var lP,dYe,pYe,d0e,mYe,p0e,m0e=M(()=>{"use strict";lP={},dYe=o((t,e)=>{lP[t]=e},"set"),pYe=o(t=>lP[t],"get"),d0e=o(()=>Object.keys(lP),"keys"),mYe=o(()=>d0e().length,"size"),p0e={get:pYe,set:dYe,keys:d0e,size:mYe}});var gYe,yYe,vYe,xYe,y0e,bYe,wYe,TYe,kYe,cP,g0e,v0e,x0e=M(()=>{"use strict";mr();m0e();VE();hr();fr();Vt();ht();gYe=o(t=>t.append("circle").attr("class","start-state").attr("r",de().state.sizeUnit).attr("cx",de().state.padding+de().state.sizeUnit).attr("cy",de().state.padding+de().state.sizeUnit),"drawStartState"),yYe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",de().state.textHeight).attr("class","divider").attr("x2",de().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),vYe=o((t,e)=>{let r=t.append("text").attr("x",2*de().state.padding).attr("y",de().state.textHeight+2*de().state.padding).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",de().state.padding).attr("y",de().state.padding).attr("width",n.width+2*de().state.padding).attr("height",n.height+2*de().state.padding).attr("rx",de().state.radius),r},"drawSimpleState"),xYe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*de().state.padding).text(m);g||y.attr("dy",de().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*de().state.padding).attr("y",de().state.textHeight+1.3*de().state.padding).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",de().state.padding).attr("y",a+de().state.padding*.4+de().state.dividerMargin+de().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",de().state.padding).attr("y1",de().state.padding+a+de().state.dividerMargin/2).attr("y2",de().state.padding+a+de().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*de().state.padding),t.insert("rect",":first-child").attr("x",de().state.padding).attr("y",de().state.padding).attr("width",d+2*de().state.padding).attr("height",f.height+a+2*de().state.padding).attr("rx",de().state.radius),t},"drawDescrState"),y0e=o((t,e,r)=>{let n=de().state.padding,i=2*de().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",de().state.titleShift).attr("font-size",de().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-de().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+de().state.textHeight+de().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",de().state.titleShift-de().state.textHeight-de().state.padding).attr("width",d).attr("height",de().state.textHeight*3).attr("rx",de().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",de().state.titleShift-de().state.textHeight-de().state.padding).attr("width",d).attr("height",m.height+3+2*de().state.textHeight).attr("rx",de().state.radius),t},"addTitleAndBox"),bYe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",de().state.sizeUnit+de().state.miniPadding).attr("cx",de().state.padding+de().state.sizeUnit+de().state.miniPadding).attr("cy",de().state.padding+de().state.sizeUnit+de().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",de().state.sizeUnit).attr("cx",de().state.padding+de().state.sizeUnit+2).attr("cy",de().state.padding+de().state.sizeUnit+2)),"drawEndState"),wYe=o((t,e)=>{let r=de().state.forkWidth,n=de().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",de().state.padding).attr("y",de().state.padding)},"drawForkJoinState"),TYe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(je.lineBreakRegex),u=1.25*de().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+de().state.noteMargin),d.attr("y",r+i+1.25*de().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),kYe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",de().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=TYe(t,0,0,n);return r.attr("height",a+2*de().state.noteMargin),r.attr("width",i+de().state.noteMargin*2),r},"drawNote"),cP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&gYe(i),e.type==="end"&&bYe(i),(e.type==="fork"||e.type==="join")&&wYe(i,e),e.type==="note"&&kYe(e.note.text,i),e.type==="divider"&&yYe(i),e.type==="default"&&e.descriptions.length===0&&vYe(i,e),e.type==="default"&&e.descriptions.length>0&&xYe(i,e);let a=i.node().getBBox();return n.width=a.width+2*de().state.padding,n.height=a.height+2*de().state.padding,p0e.set(r,n),n},"drawState"),g0e=0,v0e=o(function(t,e,r){let n=o(function(u){switch(u){case tl.relationType.AGGREGATION:return"aggregation";case tl.relationType.EXTENSION:return"extension";case tl.relationType.COMPOSITION:return"composition";case tl.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=Ka().x(function(u){return u.x}).y(function(u){return u.y}).curve(Do),s=t.append("path").attr("d",a(i)).attr("id","edge"+g0e).attr("class","transition"),l="";if(de().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(tl.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Ut.calcLabelPosition(e.points),d=je.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),_=w.node().getBBox();g=Math.max(g,_.width),y=Math.min(y,_.x),Y.info(_.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,_)=>w.attr("y",f+_*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-de().state.padding/2).attr("y",f-v/2-de().state.padding/2-3.5).attr("width",g+de().state.padding).attr("height",v+de().state.padding),Y.info(x)}g0e++},"drawEdge")});var fo,uP,EYe,SYe,CYe,AYe,b0e,w0e,T0e=M(()=>{"use strict";mr();Pv();Ns();ht();fr();x0e();Vt();ni();uP={},EYe=o(function(){},"setConf"),SYe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),CYe=o(function(t,e,r,n){fo=de().state;let i=de().securityLevel,a;i==="sandbox"&&(a=ze("#i"+e));let s=i==="sandbox"?ze(a.nodes()[0].contentDocument.body):ze("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);SYe(u);let h=n.db.getRootDoc();b0e(h,u,void 0,!1,s,l,n);let f=fo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;Zr(u,m,g,fo.useMaxWidth),u.attr("viewBox",`${d.x-fo.padding} ${d.y-fo.padding} `+p+" "+m)},"draw"),AYe=o(t=>t?t.length*fo.fontSizeFactor:1,"getLabelWidth"),b0e=o((t,e,r,n,i,a,s)=>{let l=new Mr({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let T=_.parentElement,E=0,L=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),L=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(L)&&(L=0)),_.setAttribute("x1",0-L+8),_.setAttribute("x2",E-L-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),v0e(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*fo.padding,x.height=v.height+2*fo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),w0e={setConf:EYe,draw:CYe}});var k0e={};vr(k0e,{diagram:()=>_Ye});var _Ye,E0e=M(()=>{"use strict";zO();VE();oP();T0e();_Ye={parser:_E,db:tl,renderer:w0e,styles:UE,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,tl.clear()},"init")}});var A0e={};vr(A0e,{diagram:()=>RYe});var RYe,_0e=M(()=>{"use strict";zO();VE();oP();JO();RYe={parser:_E,db:tl,renderer:Jde,styles:UE,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,tl.clear()},"init")}});var hP,N0e,R0e=M(()=>{"use strict";hP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",_=0,T=0,E=0,L=2,C=1,A=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var R=I.yylloc;x.push(R);var S=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(H){g.length=g.length-2*H,v.length=v.length-H,x.length=x.length-H}o(O,"popStack");function N(){var H;return H=y.pop()||I.lex()||C,typeof H!="number"&&(H instanceof Array&&(y=H,H=y.pop()),H=m.symbols_[H]||H),H}o(N,"lex");for(var P,F,B,$,z,W,j={},K,ie,Q,ee;;){if(B=g[g.length-1],this.defaultActions[B]?$=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=N()),$=b[B]&&b[B][P]),typeof $>"u"||!$.length||!$[0]){var J="";ee=[];for(K in b[B])this.terminals_[K]&&K>L&&ee.push("'"+this.terminals_[K]+"'");I.showPosition?J="Parse error on line "+(_+1)+`: +`+I.showPosition()+` +Expecting `+ee.join(", ")+", got '"+(this.terminals_[P]||P)+"'":J="Parse error on line "+(_+1)+": Unexpected "+(P==C?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[P]||P,line:I.yylineno,loc:R,expected:ee})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch($[0]){case 1:g.push(P),v.push(I.yytext),x.push(I.yylloc),g.push($[1]),P=null,F?(P=F,F=null):(T=I.yyleng,w=I.yytext,_=I.yylineno,R=I.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[$[1]][1],j.$=v[v.length-ie],j._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},S&&(j._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),W=this.performAction.apply(j,[w,T,_,D.yy,$[1],v,x].concat(A)),typeof W<"u")return W;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[$[1]][0]),v.push(j.$),x.push(j._$),Q=b[g[g.length-2]][g[g.length-1]],g.push(Q);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();hP.parser=hP;N0e=hP});var Yg,fP,Ax,_x,PYe,BYe,FYe,zYe,GYe,$Ye,VYe,M0e,UYe,dP,I0e=M(()=>{"use strict";Vt();ki();Yg="",fP=[],Ax=[],_x=[],PYe=o(function(){fP.length=0,Ax.length=0,Yg="",_x.length=0,_r()},"clear"),BYe=o(function(t){Yg=t,fP.push(t)},"addSection"),FYe=o(function(){return fP},"getSections"),zYe=o(function(){let t=M0e(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),$Ye=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:Yg,type:Yg,people:a,task:t,score:n};_x.push(s)},"addTask"),VYe=o(function(t){let e={section:Yg,type:Yg,description:t,task:t,classes:[]};Ax.push(e)},"addTaskOrg"),M0e=o(function(){let t=o(function(r){return _x[r].processed},"compileTask"),e=!0;for(let[r,n]of _x.entries())t(r),e=e&&n.processed;return e},"compileTasks"),UYe=o(function(){return GYe()},"getActors"),dP={getConfig:o(()=>de().journey,"getConfig"),clear:PYe,setDiagramTitle:ln,getDiagramTitle:Jr,setAccTitle:Rr,getAccTitle:Pr,setAccDescription:Br,getAccDescription:Fr,addSection:BYe,getSections:FYe,getTasks:zYe,addTask:$Ye,addTaskOrg:VYe,getActors:UYe}});var HYe,O0e,P0e=M(()=>{"use strict";HYe=o(t=>`.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } +`,"getStyles"),O0e=HYe});var pP,WYe,F0e,z0e,YYe,qYe,B0e,XYe,jYe,G0e,KYe,qg,$0e=M(()=>{"use strict";mr();qy();pP=o(function(t,e){return md(t,e)},"drawRect"),WYe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=El().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=El().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),F0e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),z0e=o(function(t,e){return DY(t,e)},"drawText"),YYe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,z0e(t,e)},"drawLabel"),qYe=o(function(t,e,r){let n=t.append("g"),i=Sl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,pP(n,i),G0e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),B0e=-1,XYe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");B0e++;let a=300+5*30;i.append("line").attr("id","task"+B0e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),WYe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Sl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,pP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};F0e(i,f),l+=10}),G0e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),jYe=o(function(t,e){Y3(t,e)},"drawBackgroundRect"),G0e=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let i=Yu[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:Yu[n].position};qg.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};qg.drawText(t,s),r+=20})}var QYe,Yu,HE,D0,JYe,rl,mP,V0e,eqe,gP,U0e=M(()=>{"use strict";mr();$0e();Vt();ni();QYe=o(function(t){Object.keys(t).forEach(function(r){HE[r]=t[r]})},"setConf"),Yu={};o(ZYe,"drawActorLegend");HE=de().journey,D0=HE.leftMargin,JYe=o(function(t,e,r,n){let i=de().journey,a=de().securityLevel,s;a==="sandbox"&&(s=ze("#i"+e));let l=a==="sandbox"?ze(s.nodes()[0].contentDocument.body):ze("body");rl.init();let u=l.select("#"+e);qg.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in Yu)delete Yu[x];let p=0;d.forEach(x=>{Yu[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),ZYe(u),rl.insert(0,0,D0,Object.keys(Yu).length*50),eqe(u,h,0);let m=rl.getBounds();f&&u.append("text").text(f).attr("x",D0).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=D0+m.stopx+2*i.diagramMarginX;Zr(u,g,y,i.useMaxWidth),u.append("line").attr("x1",D0).attr("y1",i.height*4).attr("x2",y-D0-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),rl={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=de().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(rl.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(rl.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(rl.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(rl.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(rl.data,"startx",i,Math.min),this.updateVal(rl.data,"starty",s,Math.min),this.updateVal(rl.data,"stopx",a,Math.max),this.updateVal(rl.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},mP=HE.sectionFills,V0e=HE.sectionColours,eqe=o(function(t,e,r){let n=de().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=mP[l%mP.length],f=l%mP.length,h=V0e[l%V0e.length];let g=0,y=p.section;for(let x=d;x(Yu[y]&&(g[y]=Yu[y]),g),{});p.x=d*n.taskMargin+d*n.width+D0,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,qg.drawTask(t,p,n),rl.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),gP={setConf:QYe,draw:JYe}});var H0e={};vr(H0e,{diagram:()=>tqe});var tqe,W0e=M(()=>{"use strict";R0e();I0e();P0e();U0e();tqe={parser:N0e,db:dP,renderer:gP,styles:O0e,init:o(t=>{gP.setConf(t.journey),dP.clear()},"init")}});var vP,Z0e,J0e=M(()=>{"use strict";vP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var _=b.length-1;switch(x){case 1:return b[_-1];case 2:this.$=[];break;case 3:b[_-1].push(b[_]),this.$=b[_-1];break;case 4:case 5:this.$=b[_];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[_].substr(6)),this.$=b[_].substr(6);break;case 9:this.$=b[_].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[_].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[_].substr(8)),this.$=b[_].substr(8);break;case 15:v.addTask(b[_],0,""),this.$=b[_];break;case 16:v.addEvent(b[_].substr(2)),this.$=b[_];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,_="",T=0,E=0,L=0,C=2,A=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var R in this.yy)Object.prototype.hasOwnProperty.call(this.yy,R)&&(k.yy[R]=this.yy[R]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var S=D.yylloc;b.push(S);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(q){y.length=y.length-2*q,x.length=x.length-q,b.length=b.length-q}o(N,"popStack");function P(){var q;return q=v.pop()||D.lex()||A,typeof q!="number"&&(q instanceof Array&&(v=q,q=v.pop()),q=g.symbols_[q]||q),q}o(P,"lex");for(var F,B,$,z,W,j,K={},ie,Q,ee,J;;){if($=y[y.length-1],this.defaultActions[$]?z=this.defaultActions[$]:((F===null||typeof F>"u")&&(F=P()),z=w[$]&&w[$][F]),typeof z>"u"||!z.length||!z[0]){var H="";J=[];for(ie in w[$])this.terminals_[ie]&&ie>C&&J.push("'"+this.terminals_[ie]+"'");D.showPosition?H="Parse error on line "+(T+1)+`: +`+D.showPosition()+` +Expecting `+J.join(", ")+", got '"+(this.terminals_[F]||F)+"'":H="Parse error on line "+(T+1)+": Unexpected "+(F==A?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(H,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:S,expected:J})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+F);switch(z[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push(z[1]),F=null,B?(F=B,B=null):(E=D.yyleng,_=D.yytext,T=D.yylineno,S=D.yylloc,L>0&&L--);break;case 2:if(Q=this.productions_[z[1]][1],K.$=x[x.length-Q],K._$={first_line:b[b.length-(Q||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(Q||1)].first_column,last_column:b[b.length-1].last_column},O&&(K._$.range=[b[b.length-(Q||1)].range[0],b[b.length-1].range[1]]),j=this.performAction.apply(K,[_,E,T,k.yy,z[1],x,b].concat(I)),typeof j<"u")return j;Q&&(y=y.slice(0,-1*Q*2),x=x.slice(0,-1*Q),b=b.slice(0,-1*Q)),y.push(this.productions_[z[1]][0]),x.push(K.$),b.push(K._$),ee=w[y[y.length-2]][y[y.length-1]],y.push(ee);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();vP.parser=vP;Z0e=vP});var bP={};vr(bP,{addEvent:()=>lpe,addSection:()=>ipe,addTask:()=>ope,addTaskOrg:()=>cpe,clear:()=>npe,default:()=>uqe,getCommonDb:()=>rpe,getSections:()=>ape,getTasks:()=>spe});var Xg,tpe,xP,WE,jg,rpe,npe,ipe,ape,spe,ope,lpe,cpe,epe,uqe,upe=M(()=>{"use strict";ki();Xg="",tpe=0,xP=[],WE=[],jg=[],rpe=o(()=>iy,"getCommonDb"),npe=o(function(){xP.length=0,WE.length=0,Xg="",jg.length=0,_r()},"clear"),ipe=o(function(t){Xg=t,xP.push(t)},"addSection"),ape=o(function(){return xP},"getSections"),spe=o(function(){let t=epe(),e=100,r=0;for(;!t&&rr.id===tpe-1).events.push(t)},"addEvent"),cpe=o(function(t){let e={section:Xg,type:Xg,description:t,task:t,classes:[]};WE.push(e)},"addTaskOrg"),epe=o(function(){let t=o(function(r){return jg[r].processed},"compileTask"),e=!0;for(let[r,n]of jg.entries())t(r),e=e&&n.processed;return e},"compileTasks"),uqe={clear:npe,getCommonDb:rpe,addSection:ipe,getSections:ape,getTasks:spe,addTask:ope,addTaskOrg:cpe,addEvent:lpe}});function ppe(t,e){t.each(function(){var r=ze(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var hqe,YE,fqe,dqe,fpe,pqe,mqe,hpe,gqe,yqe,vqe,wP,dpe,xqe,bqe,wqe,Tqe,vf,mpe=M(()=>{"use strict";mr();hqe=12,YE=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),fqe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=El().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=El().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),dqe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),fpe=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),pqe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,fpe(t,e)},"drawLabel"),mqe=o(function(t,e,r){let n=t.append("g"),i=wP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,YE(n,i),dpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),hpe=-1,gqe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");hpe++;let a=300+5*30;i.append("line").attr("id","task"+hpe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),fqe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=wP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,YE(i,s),dpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),yqe=o(function(t,e){YE(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),vqe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),wP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),dpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";mr();mpe();ht();Vt();ni();kqe=o(function(t,e,r,n){let i=de(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=ze("#i"+e));let h=(s==="sandbox"?ze(l.nodes()[0].contentDocument.body):ze("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),vf.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,_=!0;p.forEach(function(A){let I={number:w,descr:A,section:w,width:150,padding:20,maxHeight:m},D=vf.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[A,I]of f.entries()){let D={number:A,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=vf.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let R=0;for(let S of I.events){let O={descr:S,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};R+=vf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,R)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(A=>{let I=f.filter(S=>S.section===A),D={number:w,descr:A,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),R=vf.drawNode(k,D,w,i);Y.debug("sectionNode output",R),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&gpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(_=!1,gpe(h,f,w,x,b,g,i,T,E,m,!0));let L=h.node().getBBox();Y.debug("bounds",L),d&&h.append("text").text(d).attr("x",L.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=_?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",L.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),_o(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),gpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=vf.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+Eqe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),Eqe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=vf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),ype={setConf:o(()=>{},"setConf"),draw:kqe}});var Sqe,Cqe,xpe,bpe=M(()=>{"use strict";To();Sqe=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${Sqe(t)} + .section-root rect, .section-root path, .section-root circle { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`,"getStyles"),xpe=Cqe});var wpe={};vr(wpe,{diagram:()=>Aqe});var Aqe,Tpe=M(()=>{"use strict";J0e();upe();vpe();bpe();Aqe={db:bP,renderer:ype,parser:Z0e,styles:xpe}});var TP,Spe,Cpe=M(()=>{"use strict";TP=function(){var t=o(function(_,T,E,L){for(E=E||{},L=_.length;L--;E[_[L]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,L,C,A,I,D){var k=I.length-1;switch(A){case 6:case 7:return C;case 8:C.getLogger().trace("Stop NL ");break;case 9:C.getLogger().trace("Stop EOF ");break;case 11:C.getLogger().trace("Stop NL2 ");break;case 12:C.getLogger().trace("Stop EOF2 ");break;case 15:C.getLogger().info("Node: ",I[k].id),C.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:C.getLogger().trace("Icon: ",I[k]),C.decorateNode({icon:I[k]});break;case 17:case 21:C.decorateNode({class:I[k]});break;case 18:C.getLogger().trace("SPACELIST");break;case 19:C.getLogger().trace("Node: ",I[k].id),C.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:C.decorateNode({icon:I[k]});break;case 25:C.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:C.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:C.nodeType.DEFAULT};break;case 27:C.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:C.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var L=new Error(T);throw L.hash=E,L}},"parseError"),parse:o(function(T){var E=this,L=[0],C=[],A=[null],I=[],D=this.table,k="",R=0,S=0,O=0,N=2,P=1,F=I.slice.call(arguments,1),B=Object.create(this.lexer),$={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&($.yy[z]=this.yy[z]);B.setInput(T,$.yy),$.yy.lexer=B,$.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var W=B.yylloc;I.push(W);var j=B.options&&B.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function K(ke){L.length=L.length-2*ke,A.length=A.length-ke,I.length=I.length-ke}o(K,"popStack");function ie(){var ke;return ke=C.pop()||B.lex()||P,typeof ke!="number"&&(ke instanceof Array&&(C=ke,ke=C.pop()),ke=E.symbols_[ke]||ke),ke}o(ie,"lex");for(var Q,ee,J,H,q,Z,ae={},ue,ce,te,De;;){if(J=L[L.length-1],this.defaultActions[J]?H=this.defaultActions[J]:((Q===null||typeof Q>"u")&&(Q=ie()),H=D[J]&&D[J][Q]),typeof H>"u"||!H.length||!H[0]){var oe="";De=[];for(ue in D[J])this.terminals_[ue]&&ue>N&&De.push("'"+this.terminals_[ue]+"'");B.showPosition?oe="Parse error on line "+(R+1)+`: +`+B.showPosition()+` +Expecting `+De.join(", ")+", got '"+(this.terminals_[Q]||Q)+"'":oe="Parse error on line "+(R+1)+": Unexpected "+(Q==P?"end of input":"'"+(this.terminals_[Q]||Q)+"'"),this.parseError(oe,{text:B.match,token:this.terminals_[Q]||Q,line:B.yylineno,loc:W,expected:De})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+Q);switch(H[0]){case 1:L.push(Q),A.push(B.yytext),I.push(B.yylloc),L.push(H[1]),Q=null,ee?(Q=ee,ee=null):(S=B.yyleng,k=B.yytext,R=B.yylineno,W=B.yylloc,O>0&&O--);break;case 2:if(ce=this.productions_[H[1]][1],ae.$=A[A.length-ce],ae._$={first_line:I[I.length-(ce||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ce||1)].first_column,last_column:I[I.length-1].last_column},j&&(ae._$.range=[I[I.length-(ce||1)].range[0],I[I.length-1].range[1]]),Z=this.performAction.apply(ae,[k,S,R,$.yy,H[1],A,I].concat(F)),typeof Z<"u")return Z;ce&&(L=L.slice(0,-1*ce*2),A=A.slice(0,-1*ce),I=I.slice(0,-1*ce)),L.push(this.productions_[H[1]][0]),A.push(ae.$),I.push(ae._$),te=D[L[L.length-2]][L[L.length-1]],L.push(te);break;case 3:return!0}}return!0},"parse")},b=function(){var _={EOF:1,parseError:o(function(E,L){if(this.yy.parser)this.yy.parser.parseError(E,L);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,L=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var C=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===C.length?this.yylloc.first_column:0)+C[C.length-L.length].length-L[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+E+"^"},"showPosition"),test_match:o(function(T,E){var L,C,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),C=T[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],L=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),L)return L;if(this._backtrack){for(var I in A)this[I]=A[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,L,C;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),I=0;IE[0].length)){if(E=L,C=I,this.options.backtrack_lexer){if(T=this.test_match(L,A[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,A[C]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,L,C,A){var I=A;switch(C){case 0:return E.getLogger().trace("Found comment",L.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",L.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",L.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",L.yytext),20;break;case 36:return E.getLogger().trace("Long description:",L.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return _}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();TP.parser=TP;Spe=TP});var Vl,Ape,kP,Nqe,Rqe,Mqe,Iqe,Ui,Oqe,Pqe,Bqe,Fqe,zqe,Gqe,$qe,_pe,Lpe=M(()=>{"use strict";Vt();fr();ht();hs();Vl=[],Ape=0,kP={},Nqe=o(()=>{Vl=[],Ape=0,kP={}},"clear"),Rqe=o(function(t){for(let e=Vl.length-1;e>=0;e--)if(Vl[e].levelVl.length>0?Vl[0]:null,"getMindmap"),Iqe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=de(),a=i.mindmap?.padding??ur.mindmap.padding;switch(n){case Ui.ROUNDED_RECT:case Ui.RECT:case Ui.HEXAGON:a*=2}let s={id:Ape++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:a},l=Rqe(t);if(l)l.children.push(s),Vl.push(s);else if(Vl.length===0)Vl.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Ui={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Oqe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Ui.RECT;case"(":return e===")"?Ui.ROUNDED_RECT:Ui.CLOUD;case"((":return Ui.CIRCLE;case")":return Ui.CLOUD;case"))":return Ui.BANG;case"{{":return Ui.HEXAGON;default:return Ui.DEFAULT}},"getType"),Pqe=o((t,e)=>{kP[t]=e},"setElementForId"),Bqe=o(t=>{if(!t)return;let e=de(),r=Vl[Vl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),Fqe=o(t=>{switch(t){case Ui.DEFAULT:return"no-border";case Ui.RECT:return"rect";case Ui.ROUNDED_RECT:return"rounded-rect";case Ui.CIRCLE:return"circle";case Ui.CLOUD:return"cloud";case Ui.BANG:return"bang";case Ui.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),zqe=o(()=>Y,"getLogger"),Gqe=o(t=>kP[t],"getElementById"),$qe={clear:Nqe,addNode:Iqe,getMindmap:Mqe,nodeType:Ui,getType:Oqe,setElementForId:Pqe,decorateNode:Bqe,type2Str:Fqe,getLogger:zqe,getElementById:Gqe},_pe=$qe});function Yi(t){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Yi(t)}function JP(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dpe(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function pXe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function mXe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function TXe(t){for(var e=t.length;e--&&wXe.test(t.charAt(e)););return e}function SXe(t){return t&&t.slice(0,kXe(t)+1).replace(EXe,"")}function DXe(t){var e=_Xe.call(t,Lx),r=t[Lx];try{t[Lx]=void 0;var n=!0}catch{}var i=LXe.call(t);return n&&(e?t[Lx]=r:delete t[Lx]),i}function IXe(t){return MXe.call(t)}function FXe(t){return t==null?t===void 0?BXe:PXe:Ipe&&Ipe in Object(t)?NXe(t):OXe(t)}function zXe(t){return t!=null&&typeof t=="object"}function VXe(t){return typeof t=="symbol"||GXe(t)&&tge(t)==$Xe}function qXe(t){if(typeof t=="number")return t;if(eb(t))return Ope;if(F0(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=F0(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=CXe(t);var r=HXe.test(t);return r||WXe.test(t)?YXe(t.slice(2),r?2:8):UXe.test(t)?Ope:+t}function QXe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(XXe);e=Ppe(e)||0,F0(r)&&(f=!!r.leading,d="maxWait"in r,a=d?jXe(Ppe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var L=n,C=i;return n=i=void 0,h=E,s=t.apply(C,L),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var L=E-u,C=E-h,A=e-L;return d?KXe(A,a-C):A}o(y,"remainingWait");function v(E){var L=E-u,C=E-h;return u===void 0||L>=e||L<0||d&&C>=a}o(v,"shouldInvoke");function x(){var E=EP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function _(){return l===void 0?s:b(EP())}o(_,"flush");function T(){var E=EP(),L=v(E);if(n=arguments,i=this,u=E,L){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=_,T}function D6(t,e,r,n,i,a){var s;return ti(t)?s=t:s=u1[t]||u1.euclidean,e===0&&ti(t)?s(i,a):s(e,r,n,i,a)}function UKe(t,e){if(N6(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||eb(t)?!0:VKe.test(t)||!$Ke.test(t)||e!=null&&t in Object(e)}function jKe(t){if(!F0(t))return!1;var e=tge(t);return e==YKe||e==qKe||e==WKe||e==XKe}function ZKe(t){return!!rme&&rme in t}function rQe(t){if(t!=null){try{return tQe.call(t)}catch{}try{return t+""}catch{}}return""}function hQe(t){if(!F0(t)||JKe(t))return!1;var e=KKe(t)?uQe:aQe;return e.test(nQe(t))}function dQe(t,e){return t?.[e]}function mQe(t,e){var r=pQe(t,e);return fQe(r)?r:void 0}function yQe(){this.__data__=qx?qx(null):{},this.size=0}function xQe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function EQe(t){var e=this.__data__;if(qx){var r=e[t];return r===wQe?void 0:r}return kQe.call(e,t)?e[t]:void 0}function _Qe(t){var e=this.__data__;return qx?e[t]!==void 0:AQe.call(e,t)}function NQe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=qx&&e===void 0?DQe:e,this}function p1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function WQe(t,e){var r=this.__data__,n=R6(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function m1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Ige(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:LJe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=S:D=S;while(Math.abs(R)>s&&++O=a?b(I,O):N===0?O:_(I,D,D+h)}o(T,"getTForX");var E=!1;function L(){E=!0,(t!==e||r!==n)&&w()}o(L,"precompute");var C=o(function(D){return E||L(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");C.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var A="generateBezier("+[t,e,r,n]+")";return C.toString=function(){return A},C}function wme(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Tme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function Zg(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=Tme(t,i),l=Tme(e,i);if(xt(s)&&xt(l))return wme(a,s,l,r,n);if(wn(s)&&wn(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=c6[m].apply(null,g)):s.easingImpl=c6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Mx(x.x,b.x)&&(w.x=Zg(x.x,b.x,v,y)),Mx(x.y,b.y)&&(w.y=Zg(x.y,b.y,v,y)),t.position(w)}var _=s.startPan,T=s.pan,E=a.pan,L=T!=null&&n;L&&(Mx(_.x,T.x)&&(E.x=Zg(_.x,T.x,v,y)),Mx(_.y,T.y)&&(E.y=Zg(_.y,T.y,v,y)),t.emit("pan"));var C=s.startZoom,A=s.zoom,I=A!=null&&n;I&&(Mx(C,A)&&(a.zoom=Wx(a.minZoom,Zg(C,A,v,y),a.maxZoom)),t.emit("zoom")),(L||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k=0;L--){var C=E[L];C()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],_=w._private;if(_.stopped){m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.frames);continue}!_.playing&&!_.applying||(_.playing&&_.applying&&(_.applying=!1),_.started||UJe(f,w,t),VJe(f,w,t,d),_.applying&&(_.applying=!1),x(_.frames),_.step!=null&&_.step(t),w.completed()&&(m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function Qge(t){this.options=ir({},QJe,ZJe,t)}function Zge(t){this.options=ir({},JJe,t)}function Jge(t){this.options=ir({},eet,t)}function G6(t){this.options=ir({},tet,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function t1e(t){this.options=ir({},xet,t)}function vB(t){this.options=ir({},bet,t)}function r1e(t){this.options=ir({},wet,t)}function n1e(t){this.options=ir({},Tet,t)}function i1e(t){this.options=t,this.notifications=0}function o1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function bB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Cet(t,e,r,n,i),{cx:WP,cy:YP,radius:O0,startX:a1e,startY:s1e,stopX:qP,stopY:XP,startAngle:$c.ang+Math.PI/2*P0,endAngle:nl.ang-Math.PI/2*P0,counterClockwise:f6})}function l1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function ptt(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a{"use strict";o(Yi,"_typeof");o(JP,"_classCallCheck");o(Dpe,"_defineProperties");o(eB,"_createClass");o(Hme,"_defineProperty$1");o(Ul,"_slicedToArray");o(Vqe,"_arrayWithHoles");o(Uqe,"_iterableToArrayLimit");o(Wme,"_unsupportedIterableToArray");o(Npe,"_arrayLikeToArray");o(Hqe,"_nonIterableRest");o(Yme,"_createForOfIteratorHelper");Hi=typeof window>"u"?null:window,Rpe=Hi?Hi.navigator:null;Hi&&Hi.document;Wqe=Yi(""),qme=Yi({}),Yqe=Yi(function(){}),qqe=typeof HTMLElement>"u"?"undefined":Yi(HTMLElement),Zx=o(function(e){return e&&e.instanceString&&ti(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Yi(e)==Wqe},"string"),ti=o(function(e){return e!=null&&Yi(e)===Yqe},"fn"),wn=o(function(e){return!po(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Vr=o(function(e){return e!=null&&Yi(e)===qme&&!wn(e)&&e.constructor===Object},"plainObject"),Xqe=o(function(e){return e!=null&&Yi(e)===qme},"object"),xt=o(function(e){return e!=null&&Yi(e)===Yi(1)&&!isNaN(e)},"number"),jqe=o(function(e){return xt(e)&&Math.floor(e)===e},"integer"),p6=o(function(e){if(qqe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),po=o(function(e){return Jx(e)||Xme(e)},"elementOrCollection"),Jx=o(function(e){return Zx(e)==="collection"&&e._private.single},"element"),Xme=o(function(e){return Zx(e)==="collection"&&!e._private.single},"collection"),tB=o(function(e){return Zx(e)==="core"},"core"),jme=o(function(e){return Zx(e)==="stylesheet"},"stylesheet"),Kqe=o(function(e){return Zx(e)==="event"},"event"),Sf=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),Qqe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),Zqe=o(function(e){return Vr(e)&&xt(e.x1)&&xt(e.x2)&&xt(e.y1)&&xt(e.y2)},"boundingBox"),Jqe=o(function(e){return Xqe(e)&&ti(e.then)},"promise"),eXe=o(function(){return Rpe&&Rpe.userAgent.match(/msie|trident|edge/i)},"ms"),$x=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),oXe=o(function(e,r){return-1*Qme(e,r)},"descending"),ir=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+nXe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),uXe=o(function(e){var r,n=new RegExp("^"+tXe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),hXe=o(function(e){return dXe[e.toLowerCase()]},"colorname2tuple"),fXe=o(function(e){return(wn(e)?e:null)||hXe(e)||lXe(e)||uXe(e)||cXe(e)},"color2tuple"),dXe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Zme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:t1,n=r,i;i=e.next(),!i.done;)n=n*nge+i.value|0;return n},"hashIterableInts"),Vx=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t1;return r*nge+e|0},"hashInt"),Ux=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ox;return(r<<5)+r+e|0},"hashIntAlt"),JXe=o(function(e,r){return e*2097152+r},"combineHashes"),xf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),qE=o(function(e,r){return[Vx(e[0],r[0]),Ux(e[1],r[1])]},"hashArrays"),eje=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),aB=o(function(e){e.splice(0,e.length)},"clearArray"),oje=o(function(e,r){for(var n=0;n"u"?"undefined":Yi(Set))!==cje?Set:uje,_6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!tB(e)){hi("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){hi("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new f1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];wn(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,w,_,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(_==null&&(_=x.length);w<_;)E=i((w+_)/2),T(b,x[E])<0?_=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,_;return b==null&&(b=n),w=x.pop(),x.length?(_=x[0],x[0]=w,v(x,0,b)):_=w,_},"heappop"),h=o(function(x,b,w){var _;return w==null&&(w=n),_=x[0],x[0]=b,v(x,0,w),_},"heapreplace"),u=o(function(x,b,w){var _;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(_=[x[0],b],b=_[0],x[0]=_[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,_,T,E,L,C;for(b==null&&(b=n),E=function(){C=[];for(var A=0,I=i(x.length/2);0<=I?AI;0<=I?A++:A--)C.push(A);return C}.apply(this).reverse(),L=[],_=0,T=E.length;_D;0<=D?++C:--C)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,_){var T,E,L;for(_==null&&(_=n),T=x[w];w>b;){if(L=w-1>>1,E=x[L],_(T,E)<0){x[w]=E,w=L;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var _,T,E,L,C;for(w==null&&(w=n),T=x.length,C=b,E=x[b],_=2*b+1;_0;){var E=b.pop(),L=v(E),C=E.id();if(p[C]=L,L!==1/0)for(var A=E.neighborhood().intersect(g),I=0;I0)for(F.unshift(P);d[$];){var z=d[$];F.unshift(z.edge),F.unshift(z.node),B=z.node,$=B.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},pje={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(_){for(var T=0;T0;){if(T(),L++,_===f){for(var C=[],A=a,I=f,D=x[I];C.unshift(A),D!=null&&C.unshift(D),A=v[I],A!=null;)I=A.id(),D=x[I];return{found:!0,distance:d[_],path:this.spawn(C),steps:L}}m[_]=!0;for(var k=w._private.edges,R=0;RD&&(g[I]=D,b[I]=A,w[I]=T),!a){var k=A*f+C;!a&&g[k]>D&&(g[k]=D,b[k]=C,w[k]=T)}}}for(var R=0;R1&&arguments[1]!==void 0?arguments[1]:s,Be=w(ke),Ve=[],Ge=Be;;){if(Ge==null)return r.spawn();var He=b(Ge),xe=He.edge,X=He.pred;if(Ve.unshift(Ge[0]),Ge.same(Fe)&&Ve.length>0)break;xe!=null&&Ve.unshift(xe),Ge=X}return u.spawn(Ve)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=Tje(a,e,r),n--}return r},"contractUntil"),kje={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/wje);if(a<2){hi("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Lje=o(function(e){return Math.PI*e/180},"deg2rad"),XE=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),sB=Math.log2||function(t){return Math.log(t)/Math.log(2)},hge=o(function(e){return e>0?1:e<0?-1:0},"signum"),G0=o(function(e,r){return Math.sqrt(M0(e,r))},"dist"),M0=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Dje=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Rje=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Mje=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Ije=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),fge=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Oje=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),a6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),s6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=Ul(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Gpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),oB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),c1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),Pje=o(function(e,r){return c1(e,r.x,r.y)},"pointInBoundingBox"),dge=o(function(e,r){return c1(e,r.x1,r.y1)&&c1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),pge=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?$0(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Tf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,_=i-d+h-l,T=w,E=i+d-h+l;if(g=Tf(e,r,n,i,w,_,T,E,!1),g.length>0)return g}if(p){var L=n-f+h-l,C=i+d+l,A=n+f-h+l,I=C;if(g=Tf(e,r,n,i,L,C,A,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,R=D,S=i+d-h+l;if(g=Tf(e,r,n,i,D,k,R,S,!1),g.length>0)return g}var O;{var N=n-f+h,P=i-d+h;if(O=Px(e,r,n,i,N,P,h+l),O.length>0&&O[0]<=N&&O[1]<=P)return[O[0],O[1]]}{var F=n+f-h,B=i-d+h;if(O=Px(e,r,n,i,F,B,h+l),O.length>0&&O[0]>=F&&O[1]<=B)return[O[0],O[1]]}{var $=n+f-h,z=i+d-h;if(O=Px(e,r,n,i,$,z,h+l),O.length>0&&O[0]>=$&&O[1]>=z)return[O[0],O[1]]}{var W=n-f+h,j=i+d-h;if(O=Px(e,r,n,i,W,j,h+l),O.length>0&&O[0]<=W&&O[1]>=j)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),Bje=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Fje=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),zje=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Gje=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),$je=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Gje(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,_,T=0;T=0?_h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Gs=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),ju=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=v6(f,-h);y=y6(v)}else y=f;return Gs(e,r,y)},"pointInsidePolygon"),Uje=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,_=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,_];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,_,T,E]}else return[w,_]},"intersectLineCircle"),AP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Tf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,_=x/b,T=.001,E=0-T,L=1+T;return E<=w&&w<=L&&E<=_&&_<=L?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?AP(e,n,l)===l?[l,u]:AP(e,n,a)===a?[a,s]:AP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Yx=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=v6(d,-u);m=y6(y)}else m=d}else m=n;for(var v,x,b,w,_=0;_2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=_)},"set"),get:o(function(w){return h[w]},"get")},p=0;p0?N=O.edgesTo(S)[0]:N=S.edgesTo(O)[0];var P=i(N);S=S.id(),C[S]>C[k]+P&&(C[S]=C[k]+P,A.nodes.indexOf(S)<0?A.push(S):A.updateItem(S),L[S]=0,E[S]=[]),C[S]==C[k]+P&&(L[S]=L[S]+L[k],E[S].push(k))}else for(var F=0;F0;){for(var W=T.pop(),j=0;j0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),aKe=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:lKe,l=i,u,h,f=0;f=2?Dx(e,r,n,0,Wpe,cKe):Dx(e,r,n,0,Hpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return Dx(e,r,n,0,Wpe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return Dx(e,r,n,0,Hpe)},"manhattan"),max:o(function(e,r,n){return Dx(e,r,n,-1/0,uKe)},"max")};u1["squared-euclidean"]=u1.squaredEuclidean;u1.squaredeuclidean=u1.squaredEuclidean;o(D6,"clusteringDistance");hKe=wa({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),cB=o(function(e){return hKe(e)},"setOptions"),x6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return D6(e,i.length,l,u,h,f)},"getDist"),_P=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),pKe=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),Qpe=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=Qpe(e,r,n),i},"assign"),Zpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=_Ke(e),a={},s=0;s=D?(k=D,D=S,R=O):S>k&&(k=S);for(var N=0;N0?1:0;L[A%i.minIterations*l+W]=j,z+=j}if(z>0&&(A>=i.minIterations-1||A==i.maxIterations-1)){for(var K=0,ie=0;ie1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(C){C.isEdge()&&d[w].push(C.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var _=b.degree(!0);_%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var _=w,T=[w],E,L,C;d[_].length;)E=d[_].shift(),L=p[E][0],C=p[E][1],_!=C?(d[C]=d[C].filter(function(A){return A!=E}),_=C):!a&&_!=L&&(d[L]=d[L].filter(function(A){return A!=E}),_=L),T.unshift(E),T.unshift(_);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},QE=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var _=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[_].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(_){v=_.source().id(),x=_.target().id(),b=v===m?x:v,b!==g&&(w=_.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:_})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),PKe={hopcroftTarjanBiconnected:QE,htbc:QE,htb:QE,hopcroftTarjanBiconnectedComponents:QE},ZE=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),BKe={tarjanStronglyConnected:ZE,tsc:ZE,tscc:ZE,tarjanStronglyConnectedComponents:ZE},wge={};[Hx,dje,pje,gje,vje,bje,kje,Xje,a1,s1,zP,oKe,bKe,CKe,MKe,OKe,PKe,BKe].forEach(function(t){ir(wge,t)});Tge=0,kge=1,Ege=2,Ku=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Tge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ku.prototype={fulfill:o(function(e){return Jpe(this,kge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Jpe(this,Ege,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Ku;return n.onFulfilled.push(tme(e,i,"fulfill")),n.onRejected.push(tme(r,i,"reject")),Sge(n),i.proxy},"then")};Jpe=o(function(e,r,n,i){return e.state===Tge&&(e.state=r,e[n]=i,Sge(e)),e},"deliver"),Sge=o(function(e){e.state===kge?eme(e,"onFulfilled",e.fulfillValue):e.state===Ege&&eme(e,"onRejected",e.rejectReason)},"execute"),eme=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){wn(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};o6.className=o6.classNames=o6.classes;$r={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Wi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};$r.variable="(?:[\\w-.]|(?:\\\\"+$r.metaChar+"))+";$r.className="(?:[\\w-]|(?:\\\\"+$r.metaChar+"))+";$r.value=$r.string+"|"+$r.number;$r.id=$r.variable;(function(){var t,e,r;for(t=$r.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&($r.comparatorOp+="|\\!"+e)})();pn=o(function(){return{checks:[]}},"newQuery"),Pt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},$P=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return oXe(t.selector,e.selector)}),KZe=function(){for(var t={},e,r=0;r<$P.length;r++)e=$P[r],t[e.selector]=e.matches;return t}(),QZe=o(function(e,r){return KZe[e](r)},"stateSelectorMatches"),ZZe="("+$P.map(function(t){return t.selector}).join("|")+")",Kg=o(function(e){return e.replace(new RegExp("\\\\("+$r.metaChar+")","g"),function(r,n){return n})},"cleanMetaChars"),bf=o(function(e,r,n){e[e.length-1]=n},"replaceLastQuery"),VP=[{name:"group",query:!0,regex:"("+$r.group+")",populate:o(function(e,r,n){var i=Ul(n,1),a=i[0];r.checks.push({type:Pt.GROUP,value:a==="*"?a:a+"s"})},"populate")},{name:"state",query:!0,regex:ZZe,populate:o(function(e,r,n){var i=Ul(n,1),a=i[0];r.checks.push({type:Pt.STATE,value:a})},"populate")},{name:"id",query:!0,regex:"\\#("+$r.id+")",populate:o(function(e,r,n){var i=Ul(n,1),a=i[0];r.checks.push({type:Pt.ID,value:Kg(a)})},"populate")},{name:"className",query:!0,regex:"\\.("+$r.className+")",populate:o(function(e,r,n){var i=Ul(n,1),a=i[0];r.checks.push({type:Pt.CLASS,value:Kg(a)})},"populate")},{name:"dataExists",query:!0,regex:"\\[\\s*("+$r.variable+")\\s*\\]",populate:o(function(e,r,n){var i=Ul(n,1),a=i[0];r.checks.push({type:Pt.DATA_EXIST,field:Kg(a)})},"populate")},{name:"dataCompare",query:!0,regex:"\\[\\s*("+$r.variable+")\\s*("+$r.comparatorOp+")\\s*("+$r.value+")\\s*\\]",populate:o(function(e,r,n){var i=Ul(n,3),a=i[0],s=i[1],l=i[2],u=new RegExp("^"+$r.string+"$").exec(l)!=null;u?l=l.substring(1,l.length-1):l=parseFloat(l),r.checks.push({type:Pt.DATA_COMPARE,field:Kg(a),operator:s,value:l})},"populate")},{name:"dataBool",query:!0,regex:"\\[\\s*("+$r.boolOp+")\\s*("+$r.variable+")\\s*\\]",populate:o(function(e,r,n){var i=Ul(n,2),a=i[0],s=i[1];r.checks.push({type:Pt.DATA_BOOL,field:Kg(s),operator:a})},"populate")},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+$r.meta+")\\s*("+$r.comparatorOp+")\\s*("+$r.number+")\\s*\\]\\]",populate:o(function(e,r,n){var i=Ul(n,3),a=i[0],s=i[1],l=i[2];r.checks.push({type:Pt.META_COMPARE,field:Kg(a),operator:s,value:parseFloat(l)})},"populate")},{name:"nextQuery",separator:!0,regex:$r.separator,populate:o(function(e,r){var n=e.currentSubject,i=e.edgeCount,a=e.compoundCount,s=e[e.length-1];n!=null&&(s.subject=n,e.currentSubject=null),s.edgeCount=i,s.compoundCount=a,e.edgeCount=0,e.compoundCount=0;var l=e[e.length++]=pn();return l},"populate")},{name:"directedEdge",separator:!0,regex:$r.directedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=pn(),i=r,a=pn();return n.checks.push({type:Pt.DIRECTED_EDGE,source:i,target:a}),bf(e,r,n),e.edgeCount++,a}else{var s=pn(),l=r,u=pn();return s.checks.push({type:Pt.NODE_SOURCE,source:l,target:u}),bf(e,r,s),e.edgeCount++,u}},"populate")},{name:"undirectedEdge",separator:!0,regex:$r.undirectedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=pn(),i=r,a=pn();return n.checks.push({type:Pt.UNDIRECTED_EDGE,nodes:[i,a]}),bf(e,r,n),e.edgeCount++,a}else{var s=pn(),l=r,u=pn();return s.checks.push({type:Pt.NODE_NEIGHBOR,node:l,neighbor:u}),bf(e,r,s),u}},"populate")},{name:"child",separator:!0,regex:$r.child,populate:o(function(e,r){if(e.currentSubject==null){var n=pn(),i=pn(),a=e[e.length-1];return n.checks.push({type:Pt.CHILD,parent:a,child:i}),bf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=pn(),l=e[e.length-1],u=pn(),h=pn(),f=pn(),d=pn();return s.checks.push({type:Pt.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:Pt.TRUE}],d.checks.push({type:Pt.TRUE}),u.checks.push({type:Pt.PARENT,parent:d,child:f}),bf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=pn(),m=pn(),g=[{type:Pt.PARENT,parent:p,child:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"descendant",separator:!0,regex:$r.descendant,populate:o(function(e,r){if(e.currentSubject==null){var n=pn(),i=pn(),a=e[e.length-1];return n.checks.push({type:Pt.DESCENDANT,ancestor:a,descendant:i}),bf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=pn(),l=e[e.length-1],u=pn(),h=pn(),f=pn(),d=pn();return s.checks.push({type:Pt.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:Pt.TRUE}],d.checks.push({type:Pt.TRUE}),u.checks.push({type:Pt.ANCESTOR,ancestor:d,descendant:f}),bf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=pn(),m=pn(),g=[{type:Pt.ANCESTOR,ancestor:p,descendant:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"subject",modifier:!0,regex:$r.subject,populate:o(function(e,r){if(e.currentSubject!=null&&e.currentSubject!==r)return on("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=r;var n=e[e.length-1],i=n.checks[0],a=i==null?null:i.type;a===Pt.DIRECTED_EDGE?i.type=Pt.NODE_TARGET:a===Pt.UNDIRECTED_EDGE&&(i.type=Pt.NODE_NEIGHBOR,i.node=i.nodes[1],i.neighbor=i.nodes[0],i.nodes=null)},"populate")}];VP.forEach(function(t){return t.regexObj=new RegExp("^"+t.regex)});JZe=o(function(e){for(var r,n,i,a=0;a0&&f.edgeCount>0)return on("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return on("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&on("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),rJe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case Pt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Pt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case Pt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Pt.DATA_EXIST:{var w=f.field;return"["+w+"]"}case Pt.META_COMPARE:{var _=f.operator,T=f.field;return"[["+T+n(e(_))+r(m)+"]]"}case Pt.STATE:return m;case Pt.ID:return"#"+m;case Pt.CLASS:return"."+m;case Pt.PARENT:case Pt.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case Pt.ANCESTOR:case Pt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Pt.COMPOUND_SPLIT:{var E=a(f.left,d),L=a(f.subject,d),C=a(f.right,d);return E+(E.length>0?" ":"")+L+C}case Pt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return pB(this,t,e,Ige)};o(Oge,"addParent");h1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return pB(this,t,e,Oge)};o(uJe,"addParentAndChildren");h1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return pB(this,t,e,uJe)};h1.ancestors=h1.parents;Xx=Pge={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:sn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:sn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};Xx.attr=Xx.data;Xx.removeAttr=Xx.removeData;hJe=Pge,I6={};o(DP,"defineDegreeFunction");ir(I6,{degree:DP(function(t,e){return e.source().same(e.target())?2:1}),indegree:DP(function(t,e){return e.target().same(t)?1:0}),outdegree:DP(function(t,e){return e.source().same(t)?1:0})});o(Qg,"defineDegreeBoundsFunction");ir(I6,{minDegree:Qg("degree",function(t,e){return te}),minIndegree:Qg("indegree",function(t,e){return te}),minOutdegree:Qg("outdegree",function(t,e){return te})});ir(I6,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Yl.modelPosition=Yl.point=Yl.position;Yl.modelPositions=Yl.points=Yl.positions;Yl.renderedPoint=Yl.renderedPosition;Yl.relativePoint=Yl.relativePosition;fJe=Bge;o1=Df={};Df.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Df.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Df.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(A,I,D){var k=0,R=0,S=I+D;return A>0&&S>0&&(k=I/S*A,R=D/S*A),{biasDiff:k,biasComplementDiff:R}}o(m,"computeBiasValues");function g(A,I,D,k){if(D.units==="%")switch(k){case"width":return A>0?D.pfValue*A:0;case"height":return I>0?D.pfValue*I:0;case"average":return A>0&&I>0?D.pfValue*(A+I)/2:0;case"min":return A>0&&I>0?A>I?D.pfValue*I:D.pfValue*A:0;case"max":return A>0&&I>0?A>I?D.pfValue*A:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),_=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),L=E.biasDiff,C=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-_+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-L+d.y1+d.y2+C)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),I0=o(function(e,r){return r==null?e:Hl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Nx=o(function(e,r,n){return Wl(e,r,n)},"prefixedProperty"),JE=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,a6(d,1),Hl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),NP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Nx(s,"labelWidth",n),d=Nx(s,"labelHeight",n),p=Nx(s,"labelX",n),m=Nx(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,_=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,L=d,C=f,A=C/2,I=L/2,D,k,R,S;if(v)D=p-A,k=p+A,R=m-I,S=m+I;else{switch(u.value){case"left":D=p-C,k=p;break;case"center":D=p-A,k=p+A;break;case"right":D=p,k=p+C;break}switch(h.value){case"top":R=m-L,S=m;break;case"center":R=m-I,S=m+I;break;case"bottom":R=m,S=m+L;break}}D+=g-Math.max(b,_)-T-E,k+=g+Math.max(b,_)+T+E,R+=y-Math.max(b,_)-T-E,S+=y+Math.max(b,_)+T+E;var O=n||"main",N=a.labelBounds,P=N[O]=N[O]||{};P.x1=D,P.y1=R,P.x2=k,P.y2=S,P.w=k-D,P.h=S-R;var F=v&&x.strValue==="autorotate",B=x.pfValue!=null&&x.pfValue!==0;if(F||B){var $=F?Nx(a.rstyle,"labelAngle",n):x.pfValue,z=Math.cos($),W=Math.sin($),j=(D+k)/2,K=(R+S)/2;if(!v){switch(u.value){case"left":j=k;break;case"right":j=D;break}switch(h.value){case"top":K=S;break;case"bottom":K=R;break}}var ie=o(function(ue,ce){return ue=ue-j,ce=ce-K,{x:ue*z-ce*W+j,y:ue*W+ce*z+K}},"rotate"),Q=ie(D,R),ee=ie(D,S),J=ie(k,R),H=ie(k,S);D=Math.min(Q.x,ee.x,J.x,H.x),k=Math.max(Q.x,ee.x,J.x,H.x),R=Math.min(Q.y,ee.y,J.y,H.y),S=Math.max(Q.y,ee.y,J.y,H.y)}var q=O+"Rot",Z=N[q]=N[q]||{};Z.x1=D,Z.y1=R,Z.x2=k,Z.y2=S,Z.w=k-D,Z.h=S-R,Hl(e,D,R,k,S),Hl(a.labelBounds.all,D,R,k,S)}return e}},"updateBoundsFromLabel"),dJe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(s6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=Ije(e,f,d);fge(e,g)}}}},"updateBoundsFromOutline"),pJe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=$s(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(De){return De.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var _=0,T=0;i&&r.includeOverlays&&(_=e.pstyle("overlay-opacity").value,_!==0&&(T=e.pstyle("overlay-padding").value));var E=0,L=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(L=e.pstyle("underlay-padding").value));var C=Math.max(T,L),A=0,I=0;if(i&&(A=e.pstyle("width").pfValue,I=A/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),R=k/2,S=e.outerHeight(),O=S/2;f=g-R,d=g+R,p=y-O,m=y+O,Hl(s,f,p,d,m),i&&r.includeOutlines&&dJe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var N=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,Hl(s,f,p,d,m),N==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var F=f;f=d,d=F}if(p>m){var B=p;p=m,m=B}Hl(s,f-I,p-I,d+I,m+I)}}else if(N==="bezier"||N==="unbundled-bezier"||N.endsWith("segments")||N.endsWith("taxi")){var $;switch(N){case"bezier":case"unbundled-bezier":$=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":$=v.linePts;break}if($!=null)for(var z=0;z<$.length;z++){var W=$[z];f=W.x-I,d=W.x+I,p=W.y-I,m=W.y+I,Hl(s,f,p,d,m)}}}else{var j=e.source(),K=j.position(),ie=e.target(),Q=ie.position();if(f=K.x,d=Q.x,p=K.y,m=Q.y,f>d){var ee=f;f=d,d=ee}if(p>m){var J=p;p=m,m=J}f-=I,d+=I,p-=I,m+=I,Hl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(JE(s,e,"mid-source"),JE(s,e,"mid-target"),JE(s,e,"source"),JE(s,e,"target")),i){var H=e.pstyle("ghost").value==="yes";if(H){var q=e.pstyle("ghost-offset-x").pfValue,Z=e.pstyle("ghost-offset-y").pfValue;Hl(s,s.x1+q,s.y1+Z,s.x2+q,s.y2+Z)}}var ae=l.bodyBounds=l.bodyBounds||{};Gpe(ae,s),s6(ae,x),a6(ae,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Hl(s,f-C,p-C,d+C,m+C));var ue=l.overlayBounds=l.overlayBounds||{};Gpe(ue,s),s6(ue,x),a6(ue,1);var ce=l.labelBounds=l.labelBounds||{};ce.all!=null?Mje(ce.all):ce.all=$s(),i&&r.includeLabels&&(r.includeMainLabels&&NP(s,e,null),h&&(r.includeSourceLabels&&NP(s,e,"source"),r.includeTargetLabels&&NP(s,e,"target")))}return s.x1=il(s.x1),s.y1=il(s.y1),s.x2=il(s.x2),s.y2=il(s.y2),s.w=il(s.x2-s.x1),s.h=il(s.y2-s.y1),s.w>0&&s.h>0&&w&&(s6(s,x),a6(s,1)),s},"boundingBoxImpl"),zge=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Lf.removeAllListeners=function(){return this.removeListener("*")};Lf.emit=Lf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,wn(e)||(e=[e]),DJe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===_Je)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&oje(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":Yi(Symbol))!=e&&Yi(Symbol.iterator)!=e;r&&(b6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return Hme({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){this.cleanStyle();var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Vr(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Ba.neighbourhood=Ba.neighborhood;Ba.closedNeighbourhood=Ba.closedNeighborhood;Ba.openNeighbourhood=Ba.openNeighborhood;ir(Ba,{source:al(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:al(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:vme({attr:"source"}),targets:vme({attr:"target"})});o(vme,"defineSourceFunction");ir(Ba,{edgesWith:al(xme(),"edgesWith"),edgesTo:al(xme({thisIsSrc:!0}),"edgesTo")});o(xme,"defineEdgesWithFunction");ir(Ba,{connectedEdges:al(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Ba.componentsOf=Ba.components;ba=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){hi("A collection must have a reference to the core");return}var a=new Uc,s=!1;if(!r)r=[];else if(r.length>0&&Vr(r[0])&&!Jx(r[0])){s=!0;for(var l=[],u=new f1,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var B=l.length===r.length?r:new ba(n,l),$=0;$0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(S){for(var O=S._private.edges,N=0;N0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Dn=o(function(e,r,n,i){var a=GJe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),c6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Dn(.25,.1,.25,1),"ease-in":Dn(.42,0,1,1),"ease-out":Dn(0,0,.58,1),"ease-in-out":Dn(.42,0,.58,1),"ease-in-sine":Dn(.47,0,.745,.715),"ease-out-sine":Dn(.39,.575,.565,1),"ease-in-out-sine":Dn(.445,.05,.55,.95),"ease-in-quad":Dn(.55,.085,.68,.53),"ease-out-quad":Dn(.25,.46,.45,.94),"ease-in-out-quad":Dn(.455,.03,.515,.955),"ease-in-cubic":Dn(.55,.055,.675,.19),"ease-out-cubic":Dn(.215,.61,.355,1),"ease-in-out-cubic":Dn(.645,.045,.355,1),"ease-in-quart":Dn(.895,.03,.685,.22),"ease-out-quart":Dn(.165,.84,.44,1),"ease-in-out-quart":Dn(.77,0,.175,1),"ease-in-quint":Dn(.755,.05,.855,.06),"ease-out-quint":Dn(.23,1,.32,1),"ease-in-out-quint":Dn(.86,0,.07,1),"ease-in-expo":Dn(.95,.05,.795,.035),"ease-out-expo":Dn(.19,1,.22,1),"ease-in-out-expo":Dn(1,0,0,1),"ease-in-circ":Dn(.6,.04,.98,.335),"ease-out-circ":Dn(.075,.82,.165,1),"ease-in-out-circ":Dn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return c6.linear;var i=$Je(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Dn};o(wme,"getEasedValue");o(Tme,"getValue");o(Zg,"ease");o(VJe,"step$1");o(Mx,"valid");o(UJe,"startAnimation");o(kme,"stepAll");HJe={animate:sn.animate(),animation:sn.animation(),animated:sn.animated(),clearQueue:sn.clearQueue(),delay:sn.delay(),delayAnimation:sn.delayAnimation(),stop:sn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&m6(o(function(a){kme(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){kme(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},WJe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&Jx(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},r6=o(function(e){return Zt(e)?new Af(e):e},"argSelector"),Kge={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new O6(WJe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,r6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,r6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,r6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,r6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};sn.eventAliasesOn(Kge);UP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};UP.jpeg=UP.jpg;u6={layout:o(function(e){var r=this;if(e==null){hi("Layout options must be specified to make a layout");return}if(e.name==null){hi("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){hi("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(ir({},e,{cy:r,eles:a}));return s},"layout")};u6.createLayout=u6.makeLayout=u6.layout;YJe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};HP.invalidateDimensions=HP.resize;h6={collection:o(function(e,r){return Zt(e)?this.$(e):po(e)?e.collection():wn(e)?(r||(r={}),new ba(this,e,r.unique,r.removed)):new ba(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};h6.elements=h6.filter=h6.$;za={},zx="t",XJe="f";za.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(_=1),l.color){var E=n.valueMin[0],L=n.valueMax[0],C=n.valueMin[1],A=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],R=n.valueMax[3]==null?1:n.valueMax[3],S=[Math.round(E+(L-E)*_),Math.round(C+(A-C)*_),Math.round(I+(D-I)*_),Math.round(k+(R-k)*_)];a={bypass:n.bypass,name:n.name,value:S,strValue:"rgb("+S[0]+", "+S[1]+", "+S[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*_;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var N=n.field.split("."),P=d.data,F=0;F0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};za.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};za.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};za.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.isBundledBezier()&&a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};za.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};nb={};nb.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){on("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Af(d);if(p.invalid){on("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){on("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],_=e.properties[b];if(!_){on("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){on("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return on("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):wn(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var _=[],T=[],E=[],L="",C=!1,A=0;A0?" ":"")+I.strValue}return h.validate&&!h.validate(_,T)?null:h.singleEnum&&C?_.length===1&&Zt(_[0])?{name:t,value:_[0],strValue:_[0],bypass:r}:null:{name:t,value:_,pfValue:E,strValue:L,bypass:r,units:T}}var D=o(function(){for(var H=0;Hh.max||h.strictMax&&e===h.max))return null;var N={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?N.pfValue=e:N.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(N.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(N.pfValue=k==="rad"?e:Lje(e)),k==="%"&&(N.pfValue=e/100),N}else if(h.propList){var P=[],F=""+e;if(F!=="none"){for(var B=F.split(/\s*,\s*|\s+/),$=0;$0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),xt(e)?s=e:Vr(e)&&(s=e.level,e.position!=null?a=L6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;xt(h.x)&&(r.pan.x=h.x,l=!1),xt(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else po(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};U0.centre=U0.center;U0.autolockNodes=U0.autolock;U0.autoungrabifyNodes=U0.autoungrabify;Kx={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Kx.attr=Kx.data;Kx.removeAttr=Kx.removeData;Qx=o(function(e){var r=this;e=ir({},e);var n=e.container;n&&!p6(n)&&p6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Hi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=ir({name:s?"grid":"null"},l.layout),l.renderer=ir({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ba(this),listeners:[],aniEles:new ba(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:xt(l.zoom)?l.zoom:1,pan:{x:Vr(l.pan)&&xt(l.pan.x)?l.pan.x:0,y:Vr(l.pan)&&xt(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(Jqe);if(v)return d1.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=ir({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Vr(g)||wn(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=ir({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,ti(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,u=$s(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),h;if(po(e.roots))h=e.roots;else if(wn(e.roots)){for(var f=[],d=0;d0;){var O=S(),N=I(O,k);if(N)O.outgoers().filter(function(ce){return ce.isNode()&&n.has(ce)}).forEach(R);else if(N===null){on("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var P=0;if(e.avoidOverlap)for(var F=0;F0&&x[0].length<=3?Ge/2:0),X=2*Math.PI/x[oe].length*ke;return oe===0&&x[0].length===1&&(xe=1),{x:Z.x+xe*Math.cos(X),y:Z.y+xe*Math.sin(X)}}else{var He={x:Z.x+(ke+1-(Fe+1)/2)*Be,y:(oe+1)*Ve};return He}},"getPosition");return n.nodes().layoutPositions(this,e,ue),this};JJe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Zge,"CircleLayout");Zge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=$s(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var _=o(function(E,L){var C=e.startAngle+L*h*(i?1:-1),A=f*Math.cos(C),I=f*Math.sin(C),D={x:l.x+A,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,_),this};eet={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Jge,"ConcentricLayout");Jge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=$s(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var T=Math.abs(b[0].value-_.value);T>=v&&(b=[],x.push(b))}b.push(_)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var L=x.length>0&&x[0].length>1,C=Math.min(s.w,s.h)/2-E,A=C/(x.length+L?1:0);E=Math.min(E,A)}for(var I=0,D=0;D1&&e.avoidOverlap){var O=Math.cos(S)-Math.cos(0),N=Math.sin(S)-Math.sin(0),P=Math.sqrt(E*E/(O*O+N*N));I=Math.max(P,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,B=0,$=0;$=t.numIter||(cet(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),m6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;Cme(n,t),l()}return this};G6.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};G6.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};ret=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=$s(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(C);for(var f=0;fi.count?0:i.graph},"findLCA"),iet=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=T6(e,l,u),v=T6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),fet=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),T6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),det=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),met=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),vet=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),xet={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(t1e,"GridLayout");t1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=$s(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(j){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(K){if(K==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=K:h=K},"small"),d=o(function(K){if(K==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=K:h=K},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var _=0;_=h&&(O=0,S++)},"moveToNextCell"),P={},F=0;F(O=Vje(t,e,N[P],N[P+1],N[P+2],N[P+3])))return v(L,O),!0}else if(A.edgeType==="bezier"||A.edgeType==="multibezier"||A.edgeType==="self"||A.edgeType==="compound"){for(var N=A.allpts,P=0;P+5(O=$je(t,e,N[P],N[P+1],N[P+2],N[P+3],N[P+4],N[P+5])))return v(L,O),!0}for(var F=F||C.source,B=B||C.target,$=i.getArrowWidth(I,D),z=[{name:"source",x:A.arrowStartX,y:A.arrowStartY,angle:A.srcArrowAngle},{name:"target",x:A.arrowEndX,y:A.arrowEndY,angle:A.tgtArrowAngle},{name:"mid-source",x:A.midX,y:A.midY,angle:A.midsrcArrowAngle},{name:"mid-target",x:A.midX,y:A.midY,angle:A.midtgtArrowAngle}],P=0;P0&&(x(F),x(B))}o(b,"checkEdge");function w(L,C,A){return Wl(L,C,A)}o(w,"preprop");function _(L,C){var A=L._private,I=p,D;C?D=C+"-":D="",L.boundingBox();var k=A.labelBounds[C||"main"],R=L.pstyle(D+"label").value,S=L.pstyle("text-events").strValue==="yes";if(!(!S||!R)){var O=w(A.rscratch,"labelX",C),N=w(A.rscratch,"labelY",C),P=w(A.rscratch,"labelAngle",C),F=L.pstyle(D+"text-margin-x").pfValue,B=L.pstyle(D+"text-margin-y").pfValue,$=k.x1-I-F,z=k.x2+I-F,W=k.y1-I-B,j=k.y2+I-B;if(P){var K=Math.cos(P),ie=Math.sin(P),Q=o(function(ue,ce){return ue=ue-O,ce=ce-N,{x:ue*K-ce*ie+O,y:ue*ie+ce*K+N}},"rotate"),ee=Q($,W),J=Q($,j),H=Q(z,W),q=Q(z,j),Z=[ee.x+F,ee.y+B,H.x+F,H.y+B,q.x+F,q.y+B,J.x+F,J.y+B];if(Gs(t,e,Z))return v(L),!0}else if(c1(k,t,e))return v(L),!0}}o(_,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||_(E):b(E)||_(E)||_(E,"source")||_(E,"target")}return l};W0.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=$s({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),Cet=o(function(e,r,n,i,a){if(e!==Nme?Rme(r,e,$c):Eet(nl,$c),Rme(r,n,nl),Lme=$c.nx*nl.ny-$c.ny*nl.nx,Dme=$c.nx*nl.nx-$c.ny*-nl.ny,qu=Math.asin(Math.max(-1,Math.min(1,Lme))),Math.abs(qu)<1e-6){WP=r.x,YP=r.y,O0=e1=0;return}P0=1,f6=!1,Dme<0?qu<0?qu=Math.PI+qu:(qu=Math.PI-qu,P0=-1,f6=!0):qu>0&&(P0=-1,f6=!0),r.radius!==void 0?e1=r.radius:e1=i,N0=qu/2,n6=Math.min($c.len/2,nl.len/2),a?(Gc=Math.abs(Math.cos(N0)*e1/Math.sin(N0)),Gc>n6?(Gc=n6,O0=Math.abs(Gc*Math.sin(N0)/Math.cos(N0))):O0=e1):(Gc=Math.min(n6,e1),O0=Math.abs(Gc*Math.sin(N0)/Math.cos(N0))),qP=r.x+nl.nx*Gc,XP=r.y+nl.ny*Gc,WP=qP-nl.ny*O0*P0,YP=XP+nl.nx*O0*P0,a1e=r.x+$c.nx*Gc,s1e=r.y+$c.ny*Gc,Nme=r},"calcCornerArc");o(o1e,"drawPreparedRoundCorner");o(bB,"getRoundCorner");Ga={};Ga.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,L,C){var A=C-E,I=L-T,D=Math.sqrt(I*I+A*A);return{x:-A/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=Ul(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=Ul(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else on("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Ga.findHaystackPoints=function(t){for(var e=0;e0?Math.max(se-Ee,0):Math.min(se+Ee,0)},"subDWH"),R=k(I,C),S=k(D,A),O=!1;b===h?x=Math.abs(R)>Math.abs(S)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var N=x===n,P=N?S:R,F=N?D:I,B=hge(F),$=!1;!(O&&(_||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(B*=-1,P=B*Math.abs(P),$=!0);var z;if(_){var W=T<0?1+T:T;z=W*P}else{var j=T<0?P:0;z=j+T*B}var K=o(function(se){return Math.abs(se)=Math.abs(P)},"getIsTooClose"),ie=K(z),Q=K(Math.abs(P)-Math.abs(z)),ee=ie||Q;if(ee&&!$)if(N){var J=Math.abs(F)<=p/2,H=Math.abs(I)<=m/2;if(J){var q=(f.x1+f.x2)/2,Z=f.y1,ae=f.y2;r.segpts=[q,Z,q,ae]}else if(H){var ue=(f.y1+f.y2)/2,ce=f.x1,te=f.x2;r.segpts=[ce,ue,te,ue]}else r.segpts=[f.x1,f.y2]}else{var De=Math.abs(F)<=d/2,oe=Math.abs(D)<=g/2;if(De){var ke=(f.y1+f.y2)/2,Fe=f.x1,Be=f.x2;r.segpts=[Fe,ke,Be,ke]}else if(oe){var Ve=(f.x1+f.x2)/2,Ge=f.y1,He=f.y2;r.segpts=[Ve,Ge,Ve,He]}else r.segpts=[f.x2,f.y1]}else if(N){var xe=f.y1+z+(v?p/2*B:0),X=f.x1,fe=f.x2;r.segpts=[X,xe,fe,xe]}else{var he=f.x1+z+(v?d/2*B:0),ge=f.y1,ne=f.y2;r.segpts=[he,ge,he,ne]}if(r.isRound){var ye=t.pstyle("taxi-radius").value,U=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(ye),r.isArcRadius=new Array(r.segpts.length/2).fill(U)}};Ga.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!xt(r.startX)||!xt(r.startY),v=!xt(r.arrowStartX)||!xt(r.arrowStartY),x=!xt(r.endX)||!xt(r.endY),b=!xt(r.arrowEndX)||!xt(r.arrowEndY),w=3,_=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*_,E=G0({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),L=ES.poolIndex()){var O=R;R=S,S=O}var N=A.srcPos=R.position(),P=A.tgtPos=S.position(),F=A.srcW=R.outerWidth(),B=A.srcH=R.outerHeight(),$=A.tgtW=S.outerWidth(),z=A.tgtH=S.outerHeight(),W=A.srcShape=r.nodeShapes[e.getNodeShape(R)],j=A.tgtShape=r.nodeShapes[e.getNodeShape(S)],K=A.srcCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,ie=A.tgtCornerRadius=S.pstyle("corner-radius").value==="auto"?"auto":S.pstyle("corner-radius").pfValue,Q=A.tgtRs=S._private.rscratch,ee=A.srcRs=R._private.rscratch;A.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var J=0;J0){var ae=a,ue=M0(ae,r1(r)),ce=M0(ae,r1(Z)),te=ue;if(ce2){var De=M0(ae,{x:Z[2],y:Z[3]});De0){var ne=s,ye=M0(ne,r1(r)),U=M0(ne,r1(ge)),Te=ye;if(U2){var se=M0(ne,{x:ge[2],y:ge[3]});se=g||L){v={cp:_,segment:E};break}}if(v)break}var C=v.cp,A=v.segment,I=(g-x)/A.length,D=A.t1-A.t0,k=m?A.t0+D*I:A.t1-D*I;k=Wx(0,k,1),e=i1(C.p0,C.p1,C.p2,k),p=_et(C.p0,C.p1,C.p2,k);break}case"straight":case"segments":case"haystack":{for(var R=0,S,O,N,P,F=n.allpts.length,B=0;B+3=g));B+=2);var $=g-O,z=$/S;z=Wx(0,z,1),e=Nje(N,P,z),p=u1e(N,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Wc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Wc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Wl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;wf(r.rstyle,"labelWidth",e,d),wf(r.rscratch,"labelWidth",e,d),wf(r.rstyle,"labelHeight",e,p),wf(r.rscratch,"labelHeight",e,p),wf(r.rscratch,"labelLineHeight",e,f)};Wc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(j,K){return K?(wf(r.rscratch,j,e,K),K):Wl(r.rscratch,j,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var T=x.matchAll(y),E="",L=0,C=Yme(T),A;try{for(C.s();!(A=C.n()).done;){var I=A.value,D=I[0],k=x.substring(L,I.index);L=I.index+D.length;var R=E.length===0?k:E+k+D,S=this.calculateLabelDimensions(t,R),O=S.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(W){C.e(W)}finally{C.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var N=t.pstyle("text-max-width").pfValue,P="",F="\u2026",B=!1;if(this.calculateLabelDimensions(t,i).widthN)break;P+=i[$],$===i.length-1&&(B=!0)}return B||(P+=F),P}return i};Wc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Wc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=z0(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` +`),w=0;w1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var Tt=i(X);Re&&(t.hoverData.tapholdCancelled=!0);var $e=o(function(){var zt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];zt.length===0?(zt.push(me[0]),zt.push(me[1])):(zt[0]+=me[0],zt[1]+=me[1])},"updateDragDelta");he=!0,n(Ae,["mousemove","vmousemove","tapdrag"],X,{x:U[0],y:U[1]});var rt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:U[0],y:U[1]}}),Ee[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(Re){var ft={originalEvent:X,type:"cxtdrag",position:{x:U[0],y:U[1]}};Me?Me.emit(ft):ge.emit(ft),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Ae!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:U[0],y:U[1]}}),t.hoverData.cxtOver=Ae,Ae&&Ae.emit({originalEvent:X,type:"cxtdragover",position:{x:U[0],y:U[1]}}))}}else if(t.hoverData.dragging){if(he=!0,ge.panningEnabled()&&ge.userPanningEnabled()){var kt;if(t.hoverData.justStartedPan){var er=t.hoverData.mdownPos;kt={x:(U[0]-er[0])*ne,y:(U[1]-er[1])*ne},t.hoverData.justStartedPan=!1}else kt={x:me[0]*ne,y:me[1]*ne};ge.panBy(kt),ge.emit("dragpan"),t.hoverData.dragged=!0}U=t.projectIntoViewport(X.clientX,X.clientY)}else if(Ee[4]==1&&(Me==null||Me.pannable())){if(Re){if(!t.hoverData.dragging&&ge.boxSelectionEnabled()&&(Tt||!ge.panningEnabled()||!ge.userPanningEnabled()))rt();else if(!t.hoverData.selecting&&ge.panningEnabled()&&ge.userPanningEnabled()){var dt=a(Me,t.hoverData.downs);dt&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Ee[4]=0,t.data.bgActivePosistion=r1(Te),t.redrawHint("select",!0),t.redraw())}Me&&Me.pannable()&&Me.active()&&Me.unactivate()}}else{if(Me&&Me.pannable()&&Me.active()&&Me.unactivate(),(!Me||!Me.grabbed())&&Ae!=Pe&&(Pe&&n(Pe,["mouseout","tapdragout"],X,{x:U[0],y:U[1]}),Ae&&n(Ae,["mouseover","tapdragover"],X,{x:U[0],y:U[1]}),t.hoverData.last=Ae),Me)if(Re){if(ge.boxSelectionEnabled()&&Tt)Me&&Me.grabbed()&&(v(We),Me.emit("freeon"),We.emit("free"),t.dragData.didDrag&&(Me.emit("dragfreeon"),We.emit("dragfree"))),rt();else if(Me&&Me.grabbed()&&t.nodeIsDraggable(Me)){var Xe=!t.dragData.didDrag;Xe&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||g(We,{inDragLayer:!0});var ct={x:0,y:0};if(xt(me[0])&&xt(me[1])&&(ct.x+=me[0],ct.y+=me[1],Xe)){var Lt=t.hoverData.dragDelta;Lt&&xt(Lt[0])&&xt(Lt[1])&&(ct.x+=Lt[0],ct.y+=Lt[1])}t.hoverData.draggingEles=!0,We.silentShift(ct).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else $e();he=!0}if(Ee[2]=U[0],Ee[3]=U[1],he)return X.stopPropagation&&X.stopPropagation(),X.preventDefault&&X.preventDefault(),!1}},"mousemoveHandler"),!1);var I,D,k;t.registerBinding(e,"mouseup",o(function(X){if(!(t.hoverData.which===1&&X.which!==1&&t.hoverData.capture)){var fe=t.hoverData.capture;if(fe){t.hoverData.capture=!1;var he=t.cy,ge=t.projectIntoViewport(X.clientX,X.clientY),ne=t.selection,ye=t.findNearestElement(ge[0],ge[1],!0,!1),U=t.dragData.possibleDragElements,Te=t.hoverData.down,se=i(X);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,Te&&Te.unactivate(),t.hoverData.which===3){var Ee={originalEvent:X,type:"cxttapend",position:{x:ge[0],y:ge[1]}};if(Te?Te.emit(Ee):he.emit(Ee),!t.hoverData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:ge[0],y:ge[1]}};Te?Te.emit(Ae):he.emit(Ae)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ye,["mouseup","tapend","vmouseup"],X,{x:ge[0],y:ge[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(Te,["click","tap","vclick"],X,{x:ge[0],y:ge[1]}),D=!1,X.timeStamp-k<=he.multiClickDebounceTime()?(I&&clearTimeout(I),D=!0,k=null,n(Te,["dblclick","dbltap","vdblclick"],X,{x:ge[0],y:ge[1]})):(I=setTimeout(function(){D||n(Te,["oneclick","onetap","voneclick"],X,{x:ge[0],y:ge[1]})},he.multiClickDebounceTime()),k=X.timeStamp)),Te==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!i(X)&&(he.$(r).unselect(["tapunselect"]),U.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=U=he.collection()),ye==Te&&!t.dragData.didDrag&&!t.hoverData.selecting&&ye!=null&&ye._private.selectable&&(t.hoverData.dragging||(he.selectionType()==="additive"||se?ye.selected()?ye.unselect(["tapunselect"]):ye.select(["tapselect"]):se||(he.$(r).unmerge(ye).unselect(["tapunselect"]),ye.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var Pe=he.collection(t.getAllInBox(ne[0],ne[1],ne[2],ne[3]));t.redrawHint("select",!0),Pe.length>0&&t.redrawHint("eles",!0),he.emit({type:"boxend",originalEvent:X,position:{x:ge[0],y:ge[1]}});var Me=o(function(Re){return Re.selectable()&&!Re.selected()},"eleWouldBeSelected");he.selectionType()==="additive"||se||he.$(r).unmerge(Pe).unselect(),Pe.emit("box").stdFilter(Me).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!ne[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var me=Te&&Te.grabbed();v(U),me&&(Te.emit("freeon"),U.emit("free"),t.dragData.didDrag&&(Te.emit("dragfreeon"),U.emit("dragfree")))}}ne[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var R=o(function(X){if(!t.scrollingPage){var fe=t.cy,he=fe.zoom(),ge=fe.pan(),ne=t.projectIntoViewport(X.clientX,X.clientY),ye=[ne[0]*he+ge.x,ne[1]*he+ge.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||C()){X.preventDefault();return}if(fe.panningEnabled()&&fe.userPanningEnabled()&&fe.zoomingEnabled()&&fe.userZoomingEnabled()){X.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var U;X.deltaY!=null?U=X.deltaY/-250:X.wheelDeltaY!=null?U=X.wheelDeltaY/1e3:U=X.wheelDelta/1e3,U=U*t.wheelSensitivity;var Te=X.deltaMode===1;Te&&(U*=33);var se=fe.zoom()*Math.pow(10,U);X.type==="gesturechange"&&(se=t.gestureStartZoom*X.scale),fe.zoom({level:se,renderedPosition:{x:ye[0],y:ye[1]}}),fe.emit(X.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",R,!0),t.registerBinding(e,"scroll",o(function(X){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(X){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||X.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(xe){t.hasTouchStarted||R(xe)},!0),t.registerBinding(t.container,"mouseout",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseout",position:{x:fe[0],y:fe[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseover",position:{x:fe[0],y:fe[1]}})},"mouseOverHandler"),!1);var S,O,N,P,F,B,$,z,W,j,K,ie,Q,ee=o(function(X,fe,he,ge){return Math.sqrt((he-X)*(he-X)+(ge-fe)*(ge-fe))},"distance"),J=o(function(X,fe,he,ge){return(he-X)*(he-X)+(ge-fe)*(ge-fe)},"distanceSq"),H;t.registerBinding(t.container,"touchstart",H=o(function(X){if(t.hasTouchStarted=!0,!!A(X)){b(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var fe=t.cy,he=t.touchData.now,ge=t.touchData.earlier;if(X.touches[0]){var ne=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);he[0]=ne[0],he[1]=ne[1]}if(X.touches[1]){var ne=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);he[2]=ne[0],he[3]=ne[1]}if(X.touches[2]){var ne=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);he[4]=ne[0],he[5]=ne[1]}if(X.touches[1]){t.touchData.singleTouchMoved=!0,v(t.dragData.touchDragEles);var ye=t.findContainerClientCoords();W=ye[0],j=ye[1],K=ye[2],ie=ye[3],S=X.touches[0].clientX-W,O=X.touches[0].clientY-j,N=X.touches[1].clientX-W,P=X.touches[1].clientY-j,Q=0<=S&&S<=K&&0<=N&&N<=K&&0<=O&&O<=ie&&0<=P&&P<=ie;var U=fe.pan(),Te=fe.zoom();F=ee(S,O,N,P),B=J(S,O,N,P),$=[(S+N)/2,(O+P)/2],z=[($[0]-U.x)/Te,($[1]-U.y)/Te];var se=200,Ee=se*se;if(B=1){for(var gt=t.touchData.startPosition=[null,null,null,null,null,null],Et=0;Et=t.touchTapThreshold2}if(fe&&t.touchData.cxt){X.preventDefault();var gt=X.touches[0].clientX-W,Et=X.touches[0].clientY-j,vt=X.touches[1].clientX-W,Ye=X.touches[1].clientY-j,Tt=J(gt,Et,vt,Ye),$e=Tt/B,rt=150,ft=rt*rt,kt=1.5,er=kt*kt;if($e>=er||Tt>=ft){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var dt={originalEvent:X,type:"cxttapend",position:{x:ne[0],y:ne[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(dt),t.touchData.start=null):ge.emit(dt)}}if(fe&&t.touchData.cxt){var dt={originalEvent:X,type:"cxtdrag",position:{x:ne[0],y:ne[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(dt):ge.emit(dt),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var Xe=t.findNearestElement(ne[0],ne[1],!0,!0);(!t.touchData.cxtOver||Xe!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:ne[0],y:ne[1]}}),t.touchData.cxtOver=Xe,Xe&&Xe.emit({originalEvent:X,type:"cxtdragover",position:{x:ne[0],y:ne[1]}}))}else if(fe&&X.touches[2]&&ge.boxSelectionEnabled())X.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:ne[0],y:ne[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,he[4]=1,!he||he.length===0||he[0]===void 0?(he[0]=(ne[0]+ne[2]+ne[4])/3,he[1]=(ne[1]+ne[3]+ne[5])/3,he[2]=(ne[0]+ne[2]+ne[4])/3+1,he[3]=(ne[1]+ne[3]+ne[5])/3+1):(he[2]=(ne[0]+ne[2]+ne[4])/3,he[3]=(ne[1]+ne[3]+ne[5])/3),t.redrawHint("select",!0),t.redraw();else if(fe&&X.touches[1]&&!t.touchData.didSelect&&ge.zoomingEnabled()&&ge.panningEnabled()&&ge.userZoomingEnabled()&&ge.userPanningEnabled()){X.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ct=t.dragData.touchDragEles;if(ct){t.redrawHint("drag",!0);for(var Lt=0;Lt0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var Z;t.registerBinding(e,"touchcancel",Z=o(function(X){var fe=t.touchData.start;t.touchData.capture=!1,fe&&fe.unactivate()},"touchcancelHandler"));var ae,ue,ce,te;if(t.registerBinding(e,"touchend",ae=o(function(X){var fe=t.touchData.start,he=t.touchData.capture;if(he)X.touches.length===0&&(t.touchData.capture=!1),X.preventDefault();else return;var ge=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var ne=t.cy,ye=ne.zoom(),U=t.touchData.now,Te=t.touchData.earlier;if(X.touches[0]){var se=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);U[0]=se[0],U[1]=se[1]}if(X.touches[1]){var se=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);U[2]=se[0],U[3]=se[1]}if(X.touches[2]){var se=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);U[4]=se[0],U[5]=se[1]}fe&&fe.unactivate();var Ee;if(t.touchData.cxt){if(Ee={originalEvent:X,type:"cxttapend",position:{x:U[0],y:U[1]}},fe?fe.emit(Ee):ne.emit(Ee),!t.touchData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:U[0],y:U[1]}};fe?fe.emit(Ae):ne.emit(Ae)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!X.touches[2]&&ne.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var Pe=ne.collection(t.getAllInBox(ge[0],ge[1],ge[2],ge[3]));ge[0]=void 0,ge[1]=void 0,ge[2]=void 0,ge[3]=void 0,ge[4]=0,t.redrawHint("select",!0),ne.emit({type:"boxend",originalEvent:X,position:{x:U[0],y:U[1]}});var Me=o(function(ft){return ft.selectable()&&!ft.selected()},"eleWouldBeSelected");Pe.emit("box").stdFilter(Me).select().emit("boxselect"),Pe.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(fe?.unactivate(),X.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!X.touches[1]){if(!X.touches[0]){if(!X.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var me=t.dragData.touchDragEles;if(fe!=null){var We=fe._private.grabbed;v(me),t.redrawHint("drag",!0),t.redrawHint("eles",!0),We&&(fe.emit("freeon"),me.emit("free"),t.dragData.didDrag&&(fe.emit("dragfreeon"),me.emit("dragfree"))),n(fe,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]}),fe.unactivate(),t.touchData.start=null}else{var Re=t.findNearestElement(U[0],U[1],!0,!0);n(Re,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]})}var tt=t.touchData.startPosition[0]-U[0],gt=tt*tt,Et=t.touchData.startPosition[1]-U[1],vt=Et*Et,Ye=gt+vt,Tt=Ye*ye*ye;t.touchData.singleTouchMoved||(fe||ne.$(":selected").unselect(["tapunselect"]),n(fe,["tap","vclick"],X,{x:U[0],y:U[1]}),ue=!1,X.timeStamp-te<=ne.multiClickDebounceTime()?(ce&&clearTimeout(ce),ue=!0,te=null,n(fe,["dbltap","vdblclick"],X,{x:U[0],y:U[1]})):(ce=setTimeout(function(){ue||n(fe,["onetap","voneclick"],X,{x:U[0],y:U[1]})},ne.multiClickDebounceTime()),te=X.timeStamp)),fe!=null&&!t.dragData.didDrag&&fe._private.selectable&&Tt"u"){var De=[],oe=o(function(X){return{clientX:X.clientX,clientY:X.clientY,force:1,identifier:X.pointerId,pageX:X.pageX,pageY:X.pageY,radiusX:X.width/2,radiusY:X.height/2,screenX:X.screenX,screenY:X.screenY,target:X.target}},"makeTouch"),ke=o(function(X){return{event:X,touch:oe(X)}},"makePointer"),Fe=o(function(X){De.push(ke(X))},"addPointer"),Be=o(function(X){for(var fe=0;fe0)return W[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:pge(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?$0(i,a):u;var h=2*u;if(ju(e,r,this.points,s,l,i,a-h,[0,-1],n)||ju(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Gs(e,r,p)||B0(e,r,h,h,s+i/2-u,l+a/2-u,n)||B0(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};Qu.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ls(3,0)),this.generateRoundPolygon("round-triangle",ls(3,0)),this.generatePolygon("rectangle",ls(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ls(5,0)),this.generateRoundPolygon("round-pentagon",ls(5,0)),this.generatePolygon("hexagon",ls(6,0)),this.generateRoundPolygon("round-hexagon",ls(6,0)),this.generatePolygon("heptagon",ls(7,0)),this.generateRoundPolygon("round-heptagon",ls(7,0)),this.generatePolygon("octagon",ls(8,0)),this.generateRoundPolygon("round-octagon",ls(8,0));var n=new Array(20);{var i=BP(5,0),a=BP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*_)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*IP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||iB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},Det=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:g6;JP(this,t),this.idsByKey=new Uc,this.keyForId=new Uc,this.cachesByLvl=new Uc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),eB(t,[{key:"getIdsFor",value:o(function(r){r==null&&hi("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new f1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Uc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),Pme=25,i6=50,d6=-4,jP=3,Net=7.99,Ret=8,Met=1024,Iet=1024,Oet=1024,Pet=.2,Bet=.8,Fet=10,zet=.15,Get=.1,$et=.9,Vet=.9,Uet=100,Het=1,n1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},Wet=wa({getKey:null,doesEleInvalidateKey:g6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:sge,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Fx=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=Wet(r);ir(n,i),n.lookup=new Det(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),qi=Fx.prototype;qi.reasons=n1;qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new tb(function(r,n){return n.reqs-r.reqs});return e};qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(sB(l*r))),n=Net||n>jP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Pme?g=Pme:f<=i6?g=i6:g=Math.ceil(f/i6)*i6,f>Oet||d>Iet)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;D--)A=a.getElement(t,e,r,D,n1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!_&&!T)for(var R=n-1;R>=d6;R--){var S=u.get(t,R);if(S){k=S;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+Ret),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};qi.invalidateElements=function(t){for(var e=0;e=Pet*t.width&&this.retireTexture(t)};qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>Bet&&t.fullnessChecks>=Fet?Cf(r,t):t.fullnessChecks++};qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Cf(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,aB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Cf(i,s),n.push(s),s}};qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,n1.dequeue)}return i};qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=nB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};qi.onDequeue=function(t){this.onDequeues.push(t)};qi.offDequeue=function(t){Cf(this.onDequeues,t)};qi.setupDequeueing=m1e.setupDequeueing({deqRedrawThreshold:Uet,deqCost:zet,deqAvgCost:Get,deqNoDrawCost:$et,deqFastCost:Vet,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=qet||r>E6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var N=r+O;Gx<=N&&N<=E6&&!I(N);N+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var R=f[k];R.invalid&&Cf(f,R)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=$s();for(var I=0;Ittt)return null;var R=n.makeLayer(d,r);if(D!=null){var S=f.indexOf(D)+1;f.splice(S,0,R)}else(I.insert===void 0||I.insert)&&f.unshift(R);return R},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/Yet,w=!l,_=0;_=b||!dge(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),L[r]=x}return m||(w?null:f)};Ta.getEleLevelForLayerLevel=function(t,e){return t};Ta.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,rtt),a.setImgSmoothing(s,!0))};Ta.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ta.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};Ta.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Xu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ta.invalidateLayer=function(t){if(this.lastInvalidationTime=Xu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Cf(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),_=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),L=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),C=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var A=e.pstyle("ghost").value==="yes";if(A){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,R=x*k;t.translate(I,D),w(R),L(R),t.translate(-I,-D)}else _();E(),w(),L(),T(),C(),r&&t.translate(u.x1,u.y1)}};v1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");Zu.drawEdgeOverlay=v1e("overlay");Zu.drawEdgeUnderlay=v1e("underlay");Zu.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Y0.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(PP,"roundRect");Y0.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=Wl(i,"labelAngle",e);return s.strValue==="autorotate"?r=t.isEdge()?l:0:s.strValue==="none"?r=0:r=s.pfValue,r};Y0.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Wl(s,"labelX",r),h=Wl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Wl(s,"labelWidth",r),y=Wl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,_=e.pstyle("text-valign").value;b&&(w="center",_="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),_){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,L=e.pstyle("text-border-opacity").value,C=e.pstyle("text-border-width").pfValue,A=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||C>0&&L>0){var R=u-A;switch(w){case"left":R-=g;break;case"center":R-=g/2;break}var S=h-y-A,O=g+2*A,N=y+2*A;if(E>0){var P=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?PP(t,R,S,O,N,k):t.fillRect(R,S,O,N),t.fillStyle=P}if(C>0&&L>0){var B=t.strokeStyle,$=t.lineWidth,z=e.pstyle("text-border-color").value,W=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+L*l+")",t.lineWidth=C,t.setLineDash)switch(W){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=C/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?PP(t,R,S,O,N,k,"stroke"):t.strokeRect(R,S,O,N),W==="double"){var j=C/2;D?PP(t,R+j,S+j,O-j*2,N-j*2,k,"stroke"):t.strokeRect(R+j,S+j,O-j*2,N-j*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=$,t.strokeStyle=B}}var K=2*e.pstyle("text-outline-width").pfValue;if(K>0&&(t.lineWidth=K),e.pstyle("text-wrap").value==="wrap"){var ie=Wl(s,"labelWrapCachedLines",r),Q=Wl(s,"labelLineHeight",r),ee=g/2,J=this.getLabelJustification(e);switch(J==="auto"||(w==="left"?J==="left"?u+=-g:J==="center"&&(u+=-ee):w==="center"?J==="left"?u+=-ee:J==="right"&&(u+=ee):w==="right"&&(J==="center"?u+=ee:J==="right"&&(u+=g))),_){case"top":h-=(ie.length-1)*Q;break;case"center":case"bottom":h-=(ie.length-1)*Q;break}for(var H=0;H0&&t.strokeText(ie[H],u,h),t.fillText(ie[H],u,h),h+=Q}else K>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};w1={};w1.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!xt(d.x)||!xt(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,_=new Array(w.length),T=new Array(w.length),E=0,L=0;L0&&arguments[0]!==void 0?arguments[0]:R;s.eleFillStyle(t,e,ye)},"setupShapeColor"),H=o(function(){var ye=arguments.length>0&&arguments[0]!==void 0?arguments[0]:z;s.colorStrokeStyle(t,S[0],S[1],S[2],ye)},"setupBorderColor"),q=o(function(){var ye=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,j[0],j[1],j[2],ye)},"setupOutlineColor"),Z=o(function(ye,U,Te,se){var Ee=s.nodePathCache=s.nodePathCache||[],Ae=age(Te==="polygon"?Te+","+se.join(","):Te,""+U,""+ye,""+ee),Pe=Ee[Ae],Me,me=!1;return Pe!=null?(Me=Pe,me=!0,f.pathCache=Me):(Me=new Path2D,Ee[Ae]=f.pathCache=Me),{path:Me,cacheHit:me}},"getPath"),ae=e.pstyle("shape").strValue,ue=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ce=Z(l,u,ae,ue);g=ce.path,y=ce.cacheHit}var te=o(function(){if(!y){var ye=d;m&&(ye={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,ye.x,ye.y,l,u,ee,f)}m?t.fill(g):t.fill()},"drawShape"),De=o(function(){for(var ye=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Te=h.backgrounding,se=0,Ee=0;Ee0&&arguments[0]!==void 0?arguments[0]:!1,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,U),ye&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,ee,f)))},"drawPie"),ke=o(function(){var ye=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=(D>0?D:-D)*ye,Te=D>0?0:255;D!==0&&(s.colorFillStyle(t,Te,Te,Te,U),m?t.fill(g):t.fill())},"darken"),Fe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=N,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(B),t.lineDashOffset=$;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var ye=new Path2D;ye.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),ye.addPath(g),t.clip(ye,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var U=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=U}t.setLineDash&&t.setLineDash([])}},"drawBorder"),Be=o(function(){if(W>0){if(t.lineWidth=W,t.lineCap="butt",t.setLineDash)switch(K){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var ye=d;m&&(ye={x:0,y:0});var U=s.getNodeShape(e),Te=k;F==="inside"&&(Te=0),F==="outside"&&(Te*=2);var se=(l+Te+(W+Q))/l,Ee=(u+Te+(W+Q))/u,Ae=l*se,Pe=u*Ee,Me=s.nodeShapes[U].points,me;if(m){var We=Z(Ae,Pe,U,Me);me=We.path}if(U==="ellipse")s.drawEllipsePath(me||t,ye.x,ye.y,Ae,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(U)){var Re=0,tt=0,gt=0;U==="round-diamond"?Re=(Te+Q+W)*1.4:U==="round-heptagon"?(Re=(Te+Q+W)*1.075,gt=-(Te/2+Q+W)/35):U==="round-hexagon"?Re=(Te+Q+W)*1.12:U==="round-pentagon"?(Re=(Te+Q+W)*1.13,gt=-(Te/2+Q+W)/15):U==="round-tag"?(Re=(Te+Q+W)*1.12,tt=(Te/2+W+Q)*.07):U==="round-triangle"&&(Re=(Te+Q+W)*(Math.PI/2),gt=-(Te+Q/2+W)/Math.PI),Re!==0&&(se=(l+Re)/l,Ae=l*se,["round-hexagon","round-tag"].includes(U)||(Ee=(u+Re)/u,Pe=u*Ee)),ee=ee==="auto"?gge(Ae,Pe):ee;for(var Et=Ae/2,vt=Pe/2,Ye=ee+(Te+W+Q)/2,Tt=new Array(Me.length/2),$e=new Array(Me.length/2),rt=0;rt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");w1.drawNodeOverlay=x1e("overlay");w1.drawNodeUnderlay=x1e("underlay");w1.hasPie=function(t){return t=t[0],t._private.hasPie};w1.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,_=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,_),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};mo={},dtt=100;mo.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};mo.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;is.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!d&&(f[s.NODE]=!0,f[s.SELECT_BOX]=!0);var b=u.style(),w=u.zoom(),_=i!==void 0?i:w,T=u.pan(),E={x:T.x,y:T.y},L={zoom:w,pan:{x:T.x,y:T.y}},C=s.prevViewport,A=C===void 0||L.zoom!==C.zoom||L.pan.x!==C.pan.x||L.pan.y!==C.pan.y;!A&&!(y&&!g)&&(s.motionBlurPxRatio=1),a&&(E=a),_*=l,E.x*=l,E.y*=l;var I=s.getCachedZSortedEles();function D(ce,te,De,oe,ke){var Fe=ce.globalCompositeOperation;ce.globalCompositeOperation="destination-out",s.colorFillStyle(ce,255,255,255,s.motionBlurTransparency),ce.fillRect(te,De,oe,ke),ce.globalCompositeOperation=Fe}o(D,"mbclear");function k(ce,te){var De,oe,ke,Fe;!s.clearingMotionBlur&&(ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]||ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG])?(De={x:T.x*m,y:T.y*m},oe=w*m,ke=s.canvasWidth*m,Fe=s.canvasHeight*m):(De=E,oe=_,ke=s.canvasWidth,Fe=s.canvasHeight),ce.setTransform(1,0,0,1,0,0),te==="motionBlur"?D(ce,0,0,ke,Fe):!e&&(te===void 0||te)&&ce.clearRect(0,0,ke,Fe),r||(ce.translate(De.x,De.y),ce.scale(oe,oe)),a&&ce.translate(a.x,a.y),i&&ce.scale(i,i)}if(o(k,"setContextTransform"),d||(s.textureDrawLastFrame=!1),d){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=u.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var R=s.data.bufferContexts[s.TEXTURE_BUFFER];R.setTransform(1,0,0,1,0,0),R.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:R,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult});var L=s.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:s.canvasWidth,height:s.canvasHeight};L.mpan={x:(0-L.pan.x)/L.zoom,y:(0-L.pan.y)/L.zoom}}f[s.DRAG]=!1,f[s.NODE]=!1;var S=h.contexts[s.NODE],O=s.textureCache.texture,L=s.textureCache.viewport;S.setTransform(1,0,0,1,0,0),p?D(S,0,0,L.width,L.height):S.clearRect(0,0,L.width,L.height);var N=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;s.colorFillStyle(S,N[0],N[1],N[2],P),S.fillRect(0,0,L.width,L.height);var w=u.zoom();k(S,!1),S.clearRect(L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l),S.drawImage(O,L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l)}else s.textureOnViewport&&!e&&(s.textureCache=null);var F=u.extent(),B=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles||s.cy.animated(),$=s.hideEdgesOnViewport&&B,z=[];if(z[s.NODE]=!f[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,z[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),z[s.DRAG]=!f[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,z[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),f[s.NODE]||r||n||z[s.NODE]){var W=p&&!z[s.NODE]&&m!==1,S=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:h.contexts[s.NODE]),j=p&&!W?"motionBlur":void 0;k(S,j),$?s.drawCachedNodes(S,I.nondrag,l,F):s.drawLayeredElements(S,I.nondrag,l,F),s.debug&&s.drawDebugPoints(S,I.nondrag),!r&&!p&&(f[s.NODE]=!1)}if(!n&&(f[s.DRAG]||r||z[s.DRAG])){var W=p&&!z[s.DRAG]&&m!==1,S=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:h.contexts[s.DRAG]);k(S,p&&!W?"motionBlur":void 0),$?s.drawCachedNodes(S,I.drag,l,F):s.drawCachedElements(S,I.drag,l,F),s.debug&&s.drawDebugPoints(S,I.drag),!r&&!p&&(f[s.DRAG]=!1)}if(s.showFps||!n&&f[s.SELECT_BOX]&&!r){var S=e||h.contexts[s.SELECT_BOX];if(k(S),s.selection[4]==1&&(s.hoverData.selecting||s.touchData.selecting)){var w=s.cy.zoom(),K=b.core("selection-box-border-width").value/w;S.lineWidth=K,S.fillStyle="rgba("+b.core("selection-box-color").value[0]+","+b.core("selection-box-color").value[1]+","+b.core("selection-box-color").value[2]+","+b.core("selection-box-opacity").value+")",S.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),K>0&&(S.strokeStyle="rgba("+b.core("selection-box-border-color").value[0]+","+b.core("selection-box-border-color").value[1]+","+b.core("selection-box-border-color").value[2]+","+b.core("selection-box-opacity").value+")",S.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(h.bgActivePosistion&&!s.hoverData.selecting){var w=s.cy.zoom(),ie=h.bgActivePosistion;S.fillStyle="rgba("+b.core("active-bg-color").value[0]+","+b.core("active-bg-color").value[1]+","+b.core("active-bg-color").value[2]+","+b.core("active-bg-opacity").value+")",S.beginPath(),S.arc(ie.x,ie.y,b.core("active-bg-size").pfValue/w,0,2*Math.PI),S.fill()}var Q=s.lastRedrawTime;if(s.showFps&&Q){Q=Math.round(Q);var ee=Math.round(1e3/Q);S.setTransform(1,0,0,1,0,0),S.fillStyle="rgba(255, 0, 0, 0.75)",S.strokeStyle="rgba(255, 0, 0, 0.75)",S.lineWidth=1,S.fillText("1 frame = "+Q+" ms = "+ee+" fps",0,20);var J=60;S.strokeRect(0,30,250,20),S.fillRect(0,30,250*Math.min(ee/J,1),20)}r||(f[s.SELECT_BOX]=!1)}if(p&&m!==1){var H=h.contexts[s.NODE],q=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],Z=h.contexts[s.DRAG],ae=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],ue=o(function(te,De,oe){te.setTransform(1,0,0,1,0,0),oe||!x?te.clearRect(0,0,s.canvasWidth,s.canvasHeight):D(te,0,0,s.canvasWidth,s.canvasHeight);var ke=m;te.drawImage(De,0,0,s.canvasWidth*ke,s.canvasHeight*ke,0,0,s.canvasWidth,s.canvasHeight)},"drawMotionBlur");(f[s.NODE]||z[s.NODE])&&(ue(H,q,z[s.NODE]),f[s.NODE]=!1),(f[s.DRAG]||z[s.DRAG])&&(ue(Z,ae,z[s.DRAG]),f[s.DRAG]=!1)}s.prevViewport=L,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout(function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!d,s.mbFrames=0,f[s.NODE]=!0,f[s.DRAG]=!0,s.redraw()},dtt)),e||u.emit("render")};Nf={};Nf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(ptt,"b64ToBlob");o(Ume,"b64UriToB64");o(w1e,"output");sb.png=function(t){return w1e(t,this.bufferCanvasImage(t),"image/png")};sb.jpg=function(t){return w1e(t,this.bufferCanvasImage(t),"image/jpeg")};T1e={};T1e.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};mtt=k1e,Kr=k1e.prototype;Kr.CANVAS_LAYERS=3;Kr.SELECT_BOX=0;Kr.DRAG=1;Kr.NODE=2;Kr.BUFFER_COUNT=3;Kr.TEXTURE_BUFFER=0;Kr.MOTIONBLUR_BUFFER_NODE=1;Kr.MOTIONBLUR_BUFFER_DRAG=2;o(k1e,"CanvasRenderer");Kr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Kr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Kr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Kr.SELECT_BOX]=e;break}};gtt=typeof Path2D<"u";Kr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Kr.usePaths=function(){return gtt&&this.pathsEnabled};Kr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Kr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Kr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Yi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[y1e,Yc,Zu,TB,Y0,w1,mo,Nf,sb,T1e].forEach(function(t){ir(Kr,t)});ytt=[{name:"null",impl:i1e},{name:"base",impl:p1e},{name:"canvas",impl:mtt}],vtt=[{type:"layout",extensions:ket},{type:"renderer",extensions:ytt}],E1e={},S1e={};o(C1e,"setExtension");o(A1e,"getExtension");o(xtt,"setModule");o(btt,"getModule");ZP=o(function(){if(arguments.length===2)return A1e.apply(null,arguments);if(arguments.length===3)return C1e.apply(null,arguments);if(arguments.length===4)return btt.apply(null,arguments);if(arguments.length===5)return xtt.apply(null,arguments);hi("Invalid extension access syntax")},"extension");Qx.prototype.extension=ZP;vtt.forEach(function(t){t.extensions.forEach(function(e){C1e(t.type,e.name,e.impl)})});_1e=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),H0=_1e.prototype;H0.instanceString=function(){return"stylesheet"};H0.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};H0.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Vr(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof ob=="object"&&typeof EB=="object"?EB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof ob=="object"?ob.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(ob,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,C=this.nodes,A=C.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=C,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):S===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=C,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=C,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(S,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-S,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-S,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(S,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:$=m,B=u+-w/N,l[0]=B,l[1]=$;break;case 2:B=x,$=h+b*N,l[0]=B,l[1]=$;break;case 3:$=v,B=u+w/N,l[0]=B,l[1]=$;break;case 4:B=y,$=h+-b*N,l[0]=B,l[1]=$;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=C,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,C=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,C=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*C-E*L)/A,b=(_*L-w*C)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(C,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),S=R-1;S==1&&E.push(k),v.set(k,S)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof lb=="object"&&typeof CB=="object"?CB.exports=r(SB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof lb=="object"?lb.coseBase=r(SB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(lb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(C){return E.has(C)});this.graphManager.setAllNodesToApplyGravitation(L),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(A){return T.has(A)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var L=!this.isTreeGrowing&&!this.isGrowthFinished,C=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(L,C),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},L=0;L1){var k;for(k=0;kC&&(C=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,L){var C=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,C);var A=x.calculateBounds(T),I=new b;I.setDeviceOrgX(A.getMinX()),I.setDeviceOrgY(A.getMinY()),I.setWorldOrgX(L.x),I.setWorldOrgY(L.y);for(var D=0;D1;){var j=W[0];W.splice(0,1);var K=P.indexOf(j);K>=0&&P.splice(K,1),$--,F--}E!=null?z=(P.indexOf(W[0])+1)%$:z=0;for(var ie=Math.abs(C-L)/F,Q=z;B!=F;Q=++Q%$){var ee=P[Q].getOtherEnd(T);if(ee!=E){var J=(L+B*ie)%360,H=(J+ie)%360;w.branchRadialLayout(ee,T,J,H,A+I,I),B++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,L=0;LE&&(E=A)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var L=[],C=this.graphManager.getAllNodes(),A=0;A"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(R){if(E[R].length>1){var S="DummyCompound_"+R;T.memberGroups[S]=E[R];var O=E[R][0].getParent(),N=new l(T.graphManager);N.id=S,N.paddingLeft=O.paddingLeft||0,N.paddingRight=O.paddingRight||0,N.paddingBottom=O.paddingBottom||0,N.paddingTop=O.paddingTop||0,T.idToDummyNode[S]=N;var P=T.getGraphManager().add(T.newGraph(),N),F=O.getChild();F.add(N);for(var B=0;B=0;T--){var E=this.compoundOrder[T],L=E.id,C=E.paddingLeft,A=E.paddingTop;this.adjustLocations(this.tiledMemberPack[L],E.rect.x,E.rect.y,C,A)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(L){var C=T.idToDummyNode[L],A=C.paddingLeft,I=C.paddingTop;T.adjustLocations(E[L],C.rect.x,C.rect.y,A,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var L=T.getChild();if(L==null)return this.toBeTiled[E]=!1,!1;for(var C=L.getNodes(),A=0;A0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,L=T.getEdges(),C=0,A=0;AR&&(R=O.rect.height)}L+=R+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var L=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(C){var A=E[C];L.tiledMemberPack[C]=L.tileNodes(T[C],A.paddingLeft+A.paddingRight),A.rect.width=L.tiledMemberPack[C].width,A.rect.height=L.tiledMemberPack[C].height})},w.prototype.tileNodes=function(T,E){var L=h.TILING_PADDING_VERTICAL,C=h.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:L,horizontalPadding:C};T.sort(function(k,R){return k.rect.width*k.rect.height>R.rect.width*R.rect.height?-1:k.rect.width*k.rect.height0&&(D+=T.horizontalPadding),T.rowWidth[L]=D,T.width0&&(k+=T.verticalPadding);var R=0;k>T.rowHeight[L]&&(R=T.rowHeight[L],T.rowHeight[L]=k,R=T.rowHeight[L]-R),T.height+=R,T.rows[L].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,L=Number.MAX_VALUE,C=0;CL&&(E=C,L=T.rowWidth[C]);return E},w.prototype.canAddHorizontal=function(T,E,L){var C=this.getShortestRowIndex(T);if(C<0)return!0;var A=T.rowWidth[C];if(A+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[C]0&&(I=L+T.verticalPadding-T.rowHeight[C]);var D;T.width-A>=E+T.horizontalPadding?D=(T.height+I)/(A+E+T.horizontalPadding):D=(T.height+I)/T.width,I=L+T.verticalPadding;var k;return T.widthI&&E!=L){C.splice(-1,1),T.rows[L].push(A),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[L]=T.rowWidth[L]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;kD&&(D=C[k].height);E>0&&(D+=T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[L];T.rowHeight[E]=D,T.rowHeight[L]0)for(var F=A;F<=I;F++)P[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I0)for(var F=D;F<=k;F++)P[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var B=y.MAX_VALUE,$,z,W=0;W{"use strict";o(function(e,r){typeof cb=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof cb=="object"?cb.cytoscapeCoseBilkent=r(AB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(cb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},_=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=_.newGraphManager();this.gm=E;var L=this.options.eles.nodes(),C=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(L),_);for(var A=0;A0){var k;k=b.getGraphManager().add(b.newGraph(),L),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function _tt(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var Ttt,ktt,Ett,Stt,Ctt,Att,Ltt,Dtt,D1e,N1e,R1e=M(()=>{"use strict";Dl();hr();Ttt=12,ktt=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),Ett=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),Stt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} + + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} + + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} + a${l},${l} 1 0,1 ${-1*n*.5},0 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} + + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} + + H0 V0 Z`)},"cloudBkg"),Ctt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} + + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} + + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} + + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} + + H0 V0 Z`)},"bangBkg"),Att=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(_tt,"insertPolygonShape");Ltt=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];_tt(e,s,n,l,r)},"hexagonBkg"),Dtt=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),D1e=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(Ttt-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/()/g,` +`);await Si(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Fo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:ktt(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:Dtt(t,h,r,s);break;case t.nodeType.RECT:Ett(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),Att(t,h,r,s);break;case t.nodeType.CLOUD:Stt(t,h,r,s);break;case t.nodeType.BANG:Ctt(t,h,r,s);break;case t.nodeType.HEXAGON:Ltt(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),N1e=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function I1e(t,e,r,n,i){await D1e(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>I1e(t,e,a,n<0?s:n,i)))}function Ntt(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function O1e(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{O1e(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function Rtt(t,e){return new Promise(r=>{let n=ze("body").append("div").attr("id","cy").attr("style","display:none"),i=sl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),O1e(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function Mtt(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,N1e(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var M1e,Itt,P1e,B1e=M(()=>{"use strict";kB();M1e=ka(L1e(),1);mr();Vt();ht();Hu();ni();R1e();hs();sl.use(M1e.default);o(I1e,"drawNodes");o(Ntt,"drawEdges");o(O1e,"addNodes");o(Rtt,"layoutMindmap");o(Mtt,"positionNodes");Itt=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=de();s.htmlLabels=!1;let l=Oa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await I1e(i,h,a,-1,s);let f=await Rtt(a,s);Ntt(u,f),Mtt(i,f),_o(void 0,l,s.mindmap?.padding??ur.mindmap.padding,s.mindmap?.useMaxWidth??ur.mindmap.useMaxWidth)},"draw"),P1e={draw:Itt}});var Ott,Ptt,F1e,z1e=M(()=>{"use strict";To();Ott=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${Ott(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),F1e=Ptt});var G1e={};vr(G1e,{diagram:()=>Btt});var Btt,$1e=M(()=>{"use strict";Cpe();Lpe();B1e();z1e();Btt={db:_pe,renderer:P1e,parser:Spe,styles:F1e}});var LB,H1e,W1e=M(()=>{"use strict";LB=function(){var t=o(function(L,C,A,I){for(A=A||{},I=L.length;I--;A[L[I]]=C);return A},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],_={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(C,A,I,D,k,R,S){var O=R.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",R[O-1].id),D.addNode(R[O-2].length,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 16:D.getLogger().info("Node: ",R[O].id),D.addNode(R[O-1].length,R[O].id,R[O].descr,R[O].type);break;case 17:D.getLogger().trace("Icon: ",R[O]),D.decorateNode({icon:R[O]});break;case 18:case 23:D.decorateNode({class:R[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",R[O-1].id),D.addNode(0,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 21:D.getLogger().trace("Node: ",R[O].id),D.addNode(0,R[O].id,R[O].descr,R[O].type);break;case 22:D.decorateNode({icon:R[O]});break;case 27:D.getLogger().trace("node found ..",R[O-2]),this.$={id:R[O-1],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 28:this.$={id:R[O],descr:R[O],type:0};break;case 29:D.getLogger().trace("node found ..",R[O-3]),this.$={id:R[O-3],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 30:this.$=R[O-1]+R[O];break;case 31:this.$=R[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(C,A){if(A.recoverable)this.trace(C);else{var I=new Error(C);throw I.hash=A,I}},"parseError"),parse:o(function(C){var A=this,I=[0],D=[],k=[null],R=[],S=this.table,O="",N=0,P=0,F=0,B=2,$=1,z=R.slice.call(arguments,1),W=Object.create(this.lexer),j={yy:{}};for(var K in this.yy)Object.prototype.hasOwnProperty.call(this.yy,K)&&(j.yy[K]=this.yy[K]);W.setInput(C,j.yy),j.yy.lexer=W,j.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var ie=W.yylloc;R.push(ie);var Q=W.options&&W.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ee(Ve){I.length=I.length-2*Ve,k.length=k.length-Ve,R.length=R.length-Ve}o(ee,"popStack");function J(){var Ve;return Ve=D.pop()||W.lex()||$,typeof Ve!="number"&&(Ve instanceof Array&&(D=Ve,Ve=D.pop()),Ve=A.symbols_[Ve]||Ve),Ve}o(J,"lex");for(var H,q,Z,ae,ue,ce,te={},De,oe,ke,Fe;;){if(Z=I[I.length-1],this.defaultActions[Z]?ae=this.defaultActions[Z]:((H===null||typeof H>"u")&&(H=J()),ae=S[Z]&&S[Z][H]),typeof ae>"u"||!ae.length||!ae[0]){var Be="";Fe=[];for(De in S[Z])this.terminals_[De]&&De>B&&Fe.push("'"+this.terminals_[De]+"'");W.showPosition?Be="Parse error on line "+(N+1)+`: +`+W.showPosition()+` +Expecting `+Fe.join(", ")+", got '"+(this.terminals_[H]||H)+"'":Be="Parse error on line "+(N+1)+": Unexpected "+(H==$?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(Be,{text:W.match,token:this.terminals_[H]||H,line:W.yylineno,loc:ie,expected:Fe})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+H);switch(ae[0]){case 1:I.push(H),k.push(W.yytext),R.push(W.yylloc),I.push(ae[1]),H=null,q?(H=q,q=null):(P=W.yyleng,O=W.yytext,N=W.yylineno,ie=W.yylloc,F>0&&F--);break;case 2:if(oe=this.productions_[ae[1]][1],te.$=k[k.length-oe],te._$={first_line:R[R.length-(oe||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(oe||1)].first_column,last_column:R[R.length-1].last_column},Q&&(te._$.range=[R[R.length-(oe||1)].range[0],R[R.length-1].range[1]]),ce=this.performAction.apply(te,[O,P,N,j.yy,ae[1],k,R].concat(z)),typeof ce<"u")return ce;oe&&(I=I.slice(0,-1*oe*2),k=k.slice(0,-1*oe),R=R.slice(0,-1*oe)),I.push(this.productions_[ae[1]][0]),k.push(te.$),R.push(te._$),ke=S[I[I.length-2]][I[I.length-1]],I.push(ke);break;case 3:return!0}}return!0},"parse")},T=function(){var L={EOF:1,parseError:o(function(A,I){if(this.yy.parser)this.yy.parser.parseError(A,I);else throw new Error(A)},"parseError"),setInput:o(function(C,A){return this.yy=A||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var A=C.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var A=C.length,I=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),A=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+A+"^"},"showPosition"),test_match:o(function(C,A){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=C[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],I=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var R in k)this[R]=k[R];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,A,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),R=0;RA[0].length)){if(A=I,D=R,this.options.backtrack_lexer){if(C=this.test_match(I,k[R]),C!==!1)return C;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(C=this.test_match(A,k[D]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var A=this.next();return A||this.lex()},"lex"),begin:o(function(A){this.conditionStack.push(A)},"begin"),popState:o(function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},"topState"),pushState:o(function(A){this.begin(A)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(A,I,D,k){var R=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let S=/\n\s*/g;return I.yytext=I.yytext.replace(S,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return A.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:A.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return A.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:A.getLogger().trace("end icon"),this.popState();break;case 16:return A.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return A.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return A.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return A.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:A.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return A.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),A.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),A.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),A.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return A.getLogger().trace("Long description:",I.yytext),21;break;case 42:return A.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return L}();_.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=_,_.Parser=E,new E}();LB.parser=LB;H1e=LB});var ol,NB,DB,RB,$tt,Vtt,Y1e,Utt,Htt,Xi,Wtt,Ytt,qtt,Xtt,jtt,Ktt,Qtt,q1e,X1e=M(()=>{"use strict";Vt();fr();ht();hs();V5();ol=[],NB=[],DB=0,RB={},$tt=o(()=>{ol=[],NB=[],DB=0,RB={}},"clear"),Vtt=o(t=>{if(ol.length===0)return null;let e=ol[0].level,r=null;for(let n=ol.length-1;n>=0;n--)if(ol[n].level===e&&!r&&(r=ol[n]),ol[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:de()}},"getData"),Htt=o((t,e,r,n,i)=>{let a=de(),s=a.mindmap?.padding??ur.mindmap.padding;switch(n){case Xi.ROUNDED_RECT:case Xi.RECT:case Xi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+DB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` +`)?h=i+` +`:h=`{ +`+i+` +}`;let f=fm(h,{schema:hm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=Vtt(t);u?l.parentId=u.id||"kbn"+DB++:NB.push(l),ol.push(l)},"addNode"),Xi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Wtt=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Xi.RECT;case"(":return e===")"?Xi.ROUNDED_RECT:Xi.CLOUD;case"((":return Xi.CIRCLE;case")":return Xi.CLOUD;case"))":return Xi.BANG;case"{{":return Xi.HEXAGON;default:return Xi.DEFAULT}},"getType"),Ytt=o((t,e)=>{RB[t]=e},"setElementForId"),qtt=o(t=>{if(!t)return;let e=de(),r=ol[ol.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),Xtt=o(t=>{switch(t){case Xi.DEFAULT:return"no-border";case Xi.RECT:return"rect";case Xi.ROUNDED_RECT:return"rounded-rect";case Xi.CIRCLE:return"circle";case Xi.CLOUD:return"cloud";case Xi.BANG:return"bang";case Xi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),jtt=o(()=>Y,"getLogger"),Ktt=o(t=>RB[t],"getElementById"),Qtt={clear:$tt,addNode:Htt,getSections:Y1e,getData:Utt,nodeType:Xi,getType:Wtt,setElementForId:Ytt,decorateNode:qtt,type2Str:Xtt,getLogger:jtt,getElementById:Ktt},q1e=Qtt});var Ztt,j1e,K1e=M(()=>{"use strict";Vt();ht();Hu();ni();hs();K5();sw();Ztt=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram +`+t);let a=n.db.getData(),s=de();s.htmlLabels=!1;let l=Oa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await mm(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,_=w,T=a.nodes.filter(C=>C.parentId===v.id);for(let C of T){if(C.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");C.x=v.x,C.width=b-1.5*p;let I=(await gm(h,C,{config:s})).node().getBBox();C.y=_+I.height/2,await _v(C),_=C.y+I.height/2+p/2}let E=x.cluster.select("rect"),L=Math.max(_-w+3*p,50)+(g-25);E.attr("height",L)}_o(void 0,l,s.mindmap?.padding??ur.kanban.padding,s.mindmap?.useMaxWidth??ur.kanban.useMaxWidth)},"draw"),j1e={draw:Ztt}});var Jtt,ert,Q1e,Z1e=M(()=>{"use strict";To();Jtt=o(t=>{let e="";for(let n=0;nt.darkMode?Bt(n,i):Dt(n,i),"adjuster");for(let n=0;n` + .edge { + stroke-width: 3; + } + ${Jtt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),Q1e=ert});var J1e={};vr(J1e,{diagram:()=>trt});var trt,eye=M(()=>{"use strict";W1e();X1e();K1e();Z1e();trt={db:q1e,renderer:j1e,parser:H1e,styles:Q1e}});var MB,ub,nye=M(()=>{"use strict";MB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,_=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var C in this.yy)Object.prototype.hasOwnProperty.call(this.yy,C)&&(L.yy[C]=this.yy[C]);E.setInput(u,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var A=E.yylloc;m.push(A);var I=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(D,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||_,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var R,S,O,N,P,F,B={},$,z,W,j;;){if(O=f[f.length-1],this.defaultActions[O]?N=this.defaultActions[O]:((R===null||typeof R>"u")&&(R=k()),N=g[O]&&g[O][R]),typeof N>"u"||!N.length||!N[0]){var K="";j=[];for($ in g[O])this.terminals_[$]&&$>w&&j.push("'"+this.terminals_[$]+"'");E.showPosition?K="Parse error on line "+(v+1)+`: +`+E.showPosition()+` +Expecting `+j.join(", ")+", got '"+(this.terminals_[R]||R)+"'":K="Parse error on line "+(v+1)+": Unexpected "+(R==_?"end of input":"'"+(this.terminals_[R]||R)+"'"),this.parseError(K,{text:E.match,token:this.terminals_[R]||R,line:E.yylineno,loc:A,expected:j})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+R);switch(N[0]){case 1:f.push(R),p.push(E.yytext),m.push(E.yylloc),f.push(N[1]),R=null,S?(R=S,S=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,A=E.yylloc,b>0&&b--);break;case 2:if(z=this.productions_[N[1]][1],B.$=p[p.length-z],B._$={first_line:m[m.length-(z||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(z||1)].first_column,last_column:m[m.length-1].last_column},I&&(B._$.range=[m[m.length-(z||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(B,[y,x,v,L.yy,N[1],p,m].concat(T)),typeof F<"u")return F;z&&(f=f.slice(0,-1*z*2),p=p.slice(0,-1*z),m=m.slice(0,-1*z)),f.push(this.productions_[N[1]][0]),p.push(B.$),m.push(B._$),W=g[f[f.length-2]][f[f.length-1]],f.push(W);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();MB.parser=MB;ub=MB});var H6,W6,U6,art,IB,srt,OB,ort,lrt,crt,urt,iye,aye=M(()=>{"use strict";Vt();fr();ki();H6=[],W6=[],U6=new Map,art=o(()=>{H6=[],W6=[],U6=new Map,_r()},"clear"),IB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},srt=o((t,e,r)=>{H6.push(new IB(t,e,r))},"addLink"),OB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},ort=o(t=>{t=je.sanitizeText(t,de());let e=U6.get(t);return e===void 0&&(e=new OB(t),U6.set(t,e),W6.push(e)),e},"findOrCreateNode"),lrt=o(()=>W6,"getNodes"),crt=o(()=>H6,"getLinks"),urt=o(()=>({nodes:W6.map(t=>({id:t.ID})),links:H6.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),iye={nodesMap:U6,getConfig:o(()=>de().sankey,"getConfig"),getNodes:lrt,getLinks:crt,getGraph:urt,addLink:srt,findOrCreateNode:ort,getAccTitle:Pr,setAccTitle:Rr,getAccDescription:Fr,setAccDescription:Br,getDiagramTitle:Jr,setDiagramTitle:ln,clear:art}});function hb(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var sye=M(()=>{"use strict";o(hb,"max")});function T1(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var oye=M(()=>{"use strict";o(T1,"min")});function k1(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var lye=M(()=>{"use strict";o(k1,"sum")});var PB=M(()=>{"use strict";sye();oye();lye()});function hrt(t){return t.target.depth}function BB(t){return t.depth}function FB(t,e){return e-1-t.height}function fb(t,e){return t.sourceLinks.length?t.depth:e-1}function zB(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?T1(t.sourceLinks,hrt)-1:0}var GB=M(()=>{"use strict";PB();o(hrt,"targetDepth");o(BB,"left");o(FB,"right");o(fb,"justify");o(zB,"center")});function E1(t){return function(){return t}}var cye=M(()=>{"use strict";o(E1,"constant")});function uye(t,e){return Y6(t.source,e.source)||t.index-e.index}function hye(t,e){return Y6(t.target,e.target)||t.index-e.index}function Y6(t,e){return t.y0-e.y0}function $B(t){return t.value}function frt(t){return t.index}function drt(t){return t.nodes}function prt(t){return t.links}function fye(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function dye({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function q6(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=frt,u=fb,h,f,d=drt,p=prt,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),dye(O),O}o(g,"sankey"),g.update=function(O){return dye(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:E1(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:E1(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:E1(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:E1(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:N}){for(let[F,B]of O.entries())B.index=F,B.sourceLinks=[],B.targetLinks=[];let P=new Map(O.map((F,B)=>[l(F,B,O),F]));for(let[F,B]of N.entries()){B.index=F;let{source:$,target:z}=B;typeof $!="object"&&($=B.source=fye(P,$)),typeof z!="object"&&(z=B.target=fye(P,z)),$.sourceLinks.push(B),z.targetLinks.push(B)}if(f!=null)for(let{sourceLinks:F,targetLinks:B}of O)F.sort(f),B.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let N of O)N.value=N.fixedValue===void 0?Math.max(k1(N.sourceLinks,$B),k1(N.targetLinks,$B)):N.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let $ of P){$.depth=B;for(let{target:z}of $.sourceLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let $ of P){$.height=B;for(let{source:z}of $.targetLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let N=hb(O,B=>B.depth)+1,P=(r-t-i)/(N-1),F=new Array(N);for(let B of O){let $=Math.max(0,Math.min(N-1,Math.floor(u.call(null,B,N))));B.layer=$,B.x0=t+$*P,B.x1=B.x0+i,F[$]?F[$].push(B):F[$]=[B]}if(h)for(let B of F)B.sort(h);return F}o(w,"computeNodeLayers");function _(O){let N=T1(O,P=>(n-e-(P.length-1)*s)/k1(P,$B));for(let P of O){let F=e;for(let B of P){B.y0=F,B.y1=F+B.value*N,F=B.y1+s;for(let $ of B.sourceLinks)$.width=$.value*N}F=(n-F+s)/(P.length+1);for(let B=0;BP.length)-1)),_(N);for(let P=0;P0))continue;let K=(W/j-z.y0)*N;z.y0+=K,z.y1+=K,D(z)}h===void 0&&$.sort(Y6),C($,P)}}o(E,"relaxLeftToRight");function L(O,N,P){for(let F=O.length,B=F-2;B>=0;--B){let $=O[B];for(let z of $){let W=0,j=0;for(let{target:ie,value:Q}of z.sourceLinks){let ee=Q*(ie.layer-z.layer);W+=S(z,ie)*ee,j+=ee}if(!(j>0))continue;let K=(W/j-z.y0)*N;z.y0+=K,z.y1+=K,D(z)}h===void 0&&$.sort(Y6),C($,P)}}o(L,"relaxRightToLeft");function C(O,N){let P=O.length>>1,F=O[P];I(O,F.y0-s,P-1,N),A(O,F.y1+s,P+1,N),I(O,n,O.length-1,N),A(O,e,0,N)}o(C,"resolveCollisions");function A(O,N,P,F){for(;P1e-6&&(B.y0+=$,B.y1+=$),N=B.y1+s}}o(A,"resolveCollisionsTopToBottom");function I(O,N,P,F){for(;P>=0;--P){let B=O[P],$=(B.y1-N)*F;$>1e-6&&(B.y0-=$,B.y1-=$),N=B.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:N}){if(f===void 0){for(let{source:{sourceLinks:P}}of N)P.sort(hye);for(let{target:{targetLinks:P}}of O)P.sort(uye)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:N,targetLinks:P}of O)N.sort(hye),P.sort(uye)}o(k,"reorderLinks");function R(O,N){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P+=B+s}for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P-=B}return P}o(R,"targetTop");function S(O,N){let P=N.y0-(N.targetLinks.length-1)*s/2;for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P+=B+s}for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P-=B}return P}return o(S,"sourceTop"),g}var pye=M(()=>{"use strict";PB();GB();cye();o(uye,"ascendingSourceBreadth");o(hye,"ascendingTargetBreadth");o(Y6,"ascendingBreadth");o($B,"value");o(frt,"defaultId");o(drt,"defaultNodes");o(prt,"defaultLinks");o(fye,"find");o(dye,"computeLinkBreadths");o(q6,"Sankey")});function HB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function mye(){return new HB}var VB,UB,q0,mrt,WB,gye=M(()=>{"use strict";VB=Math.PI,UB=2*VB,q0=1e-6,mrt=UB-q0;o(HB,"Path");o(mye,"path");HB.prototype=mye.prototype={constructor:HB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>q0)if(!(Math.abs(f*l-u*h)>q0)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((VB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,_=b/v;Math.abs(w-1)>q0&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+_*l)+","+(this._y1=e+_*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>q0||Math.abs(this._y1-h)>q0)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%UB+UB),d>mrt?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>q0&&(this._+="A"+r+","+r+",0,"+ +(d>=VB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};WB=mye});var yye=M(()=>{"use strict";gye()});function X6(t){return o(function(){return t},"constant")}var vye=M(()=>{"use strict";o(X6,"default")});function xye(t){return t[0]}function bye(t){return t[1]}var wye=M(()=>{"use strict";o(xye,"x");o(bye,"y")});var Tye,kye=M(()=>{"use strict";Tye=Array.prototype.slice});function grt(t){return t.source}function yrt(t){return t.target}function vrt(t){var e=grt,r=yrt,n=xye,i=bye,a=null;function s(){var l,u=Tye.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=WB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:X6(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:X6(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function xrt(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function YB(){return vrt(xrt)}var Eye=M(()=>{"use strict";yye();kye();vye();wye();o(grt,"linkSource");o(yrt,"linkTarget");o(vrt,"link");o(xrt,"curveHorizontal");o(YB,"linkHorizontal")});var Sye=M(()=>{"use strict";Eye()});function brt(t){return[t.source.x1,t.y0]}function wrt(t){return[t.target.x0,t.y1]}function j6(){return YB().source(brt).target(wrt)}var Cye=M(()=>{"use strict";Sye();o(brt,"horizontalSource");o(wrt,"horizontalTarget");o(j6,"default")});var Aye=M(()=>{"use strict";pye();GB();Cye()});var db,_ye=M(()=>{"use strict";db=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var Trt,krt,Lye,Dye=M(()=>{"use strict";Vt();mr();Aye();ni();_ye();Trt={left:BB,right:FB,center:zB,justify:fb},krt=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=de(),s=S4.sankey,l;i==="sandbox"&&(l=ze("#i"+e));let u=i==="sandbox"?ze(l.nodes()[0].contentDocument.body):ze("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):ze(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=Trt[m];q6().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=du(Z8);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=db.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I} +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0(D.uid=db.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let A;switch(C){case"gradient":A=o(I=>I.uid,"coloring");break;case"source":A=o(I=>T(I.source.id),"coloring");break;case"target":A=o(I=>T(I.target.id),"coloring");break;default:A=C}L.append("path").attr("d",j6()).attr("stroke",A).attr("stroke-width",I=>Math.max(1,I.width)),_o(void 0,h,0,p)},"draw"),Lye={draw:krt}});var Nye,Rye=M(()=>{"use strict";Nye=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var Mye={};vr(Mye,{diagram:()=>Srt});var Ert,Srt,Iye=M(()=>{"use strict";nye();aye();Dye();Rye();Ert=ub.parse.bind(ub);ub.parse=t=>Ert(Nye(t));Srt={parser:ub,db:iye,renderer:Lye}});var Bye,qB,Lrt,Drt,Nrt,Rrt,Mrt,Rf,XB=M(()=>{"use strict";Ua();hs();hr();ki();Bye={packet:[]},qB=structuredClone(Bye),Lrt=ur.packet,Drt=o(()=>{let t=ws({...Lrt,...Sr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),Nrt=o(()=>qB.packet,"getPacket"),Rrt=o(t=>{t.length>0&&qB.packet.push(t)},"pushWord"),Mrt=o(()=>{_r(),qB=structuredClone(Bye)},"clear"),Rf={pushWord:Rrt,getPacket:Nrt,getConfig:Drt,clear:Mrt,setAccTitle:Rr,getAccTitle:Pr,setDiagramTitle:ln,getDiagramTitle:Jr,getAccDescription:Fr,setAccDescription:Br}});var Irt,Ort,Prt,Fye,zye=M(()=>{"use strict";Ng();ht();ox();XB();Irt=1e4,Ort=o(t=>{lf(t,Rf);let e=-1,r=[],n=1,{bitsPerRow:i}=Rf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Fye={parse:o(async t=>{let e=await Gl("packet",t);Y.debug(e),Ort(e)},"parse")}});var Brt,Frt,Gye,$ye=M(()=>{"use strict";Hu();ni();Brt=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Oa(e);y.attr("viewbox",`0 0 ${g} ${m}`),Zr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())Frt(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),Frt=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),Gye={draw:Brt}});var zrt,Vye,Uye=M(()=>{"use strict";hr();zrt={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},Vye=o(({packet:t}={})=>{let e=ws(zrt,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var Hye={};vr(Hye,{diagram:()=>Grt});var Grt,Wye=M(()=>{"use strict";XB();zye();$ye();Uye();Grt={parser:Fye,db:Rf,renderer:Gye,styles:Vye}});var jB,Xye,jye=M(()=>{"use strict";jB=function(){var t=o(function(w,_,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=_);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(_,T,E,L,C,A,I){var D=A.length-1;switch(C){case 4:L.getLogger().debug("Rule: separator (NL) ");break;case 5:L.getLogger().debug("Rule: separator (Space) ");break;case 6:L.getLogger().debug("Rule: separator (EOF) ");break;case 7:L.getLogger().debug("Rule: hierarchy: ",A[D-1]),L.setHierarchy(A[D-1]);break;case 8:L.getLogger().debug("Stop NL ");break;case 9:L.getLogger().debug("Stop EOF ");break;case 10:L.getLogger().debug("Stop NL2 ");break;case 11:L.getLogger().debug("Stop EOF2 ");break;case 12:L.getLogger().debug("Rule: statement: ",A[D]),typeof A[D].length=="number"?this.$=A[D]:this.$=[A[D]];break;case 13:L.getLogger().debug("Rule: statement #2: ",A[D-1]),this.$=[A[D-1]].concat(A[D]);break;case 14:L.getLogger().debug("Rule: link: ",A[D],_),this.$={edgeTypeStr:A[D],label:""};break;case 15:L.getLogger().debug("Rule: LABEL link: ",A[D-3],A[D-1],A[D]),this.$={edgeTypeStr:A[D],label:A[D-1]};break;case 18:let k=parseInt(A[D]),R=L.generateId();this.$={id:R,type:"space",label:"",width:k,children:[]};break;case 23:L.getLogger().debug("Rule: (nodeStatement link node) ",A[D-2],A[D-1],A[D]," typestr: ",A[D-1].edgeTypeStr);let S=L.edgeStrToEdgeData(A[D-1].edgeTypeStr);this.$=[{id:A[D-2].id,label:A[D-2].label,type:A[D-2].type,directions:A[D-2].directions},{id:A[D-2].id+"-"+A[D].id,start:A[D-2].id,end:A[D].id,label:A[D-1].label,type:"edge",directions:A[D].directions,arrowTypeEnd:S,arrowTypeStart:"arrow_open"},{id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions}];break;case 24:L.getLogger().debug("Rule: nodeStatement (abc88 node size) ",A[D-1],A[D]),this.$={id:A[D-1].id,label:A[D-1].label,type:L.typeStr2Type(A[D-1].typeStr),directions:A[D-1].directions,widthInColumns:parseInt(A[D],10)};break;case 25:L.getLogger().debug("Rule: nodeStatement (node) ",A[D]),this.$={id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions,widthInColumns:1};break;case 26:L.getLogger().debug("APA123",this?this:"na"),L.getLogger().debug("COLUMNS: ",A[D]),this.$={type:"column-setting",columns:A[D]==="auto"?-1:parseInt(A[D])};break;case 27:L.getLogger().debug("Rule: id-block statement : ",A[D-2],A[D-1]);let O=L.generateId();this.$={...A[D-2],type:"composite",children:A[D-1]};break;case 28:L.getLogger().debug("Rule: blockStatement : ",A[D-2],A[D-1],A[D]);let N=L.generateId();this.$={id:N,type:"composite",label:"",children:A[D-1]};break;case 29:L.getLogger().debug("Rule: node (NODE_ID separator): ",A[D]),this.$={id:A[D]};break;case 30:L.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",A[D-1],A[D]),this.$={id:A[D-1],label:A[D].label,typeStr:A[D].typeStr,directions:A[D].directions};break;case 31:L.getLogger().debug("Rule: dirList: ",A[D]),this.$=[A[D]];break;case 32:L.getLogger().debug("Rule: dirList: ",A[D-1],A[D]),this.$=[A[D-1]].concat(A[D]);break;case 33:L.getLogger().debug("Rule: nodeShapeNLabel: ",A[D-2],A[D-1],A[D]),this.$={typeStr:A[D-2]+A[D],label:A[D-1]};break;case 34:L.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",A[D-3],A[D-2]," #3:",A[D-1],A[D]),this.$={typeStr:A[D-3]+A[D],label:A[D-2],directions:A[D-1]};break;case 35:case 36:this.$={type:"classDef",id:A[D-1].trim(),css:A[D].trim()};break;case 37:this.$={type:"applyClass",id:A[D-1].trim(),styleClass:A[D].trim()};break;case 38:this.$={type:"applyStyles",id:A[D-1].trim(),stylesStr:A[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(_,T){if(T.recoverable)this.trace(_);else{var E=new Error(_);throw E.hash=T,E}},"parseError"),parse:o(function(_){var T=this,E=[0],L=[],C=[null],A=[],I=this.table,D="",k=0,R=0,S=0,O=2,N=1,P=A.slice.call(arguments,1),F=Object.create(this.lexer),B={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(B.yy[$]=this.yy[$]);F.setInput(_,B.yy),B.yy.lexer=F,B.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var z=F.yylloc;A.push(z);var W=F.options&&F.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(oe){E.length=E.length-2*oe,C.length=C.length-oe,A.length=A.length-oe}o(j,"popStack");function K(){var oe;return oe=L.pop()||F.lex()||N,typeof oe!="number"&&(oe instanceof Array&&(L=oe,oe=L.pop()),oe=T.symbols_[oe]||oe),oe}o(K,"lex");for(var ie,Q,ee,J,H,q,Z={},ae,ue,ce,te;;){if(ee=E[E.length-1],this.defaultActions[ee]?J=this.defaultActions[ee]:((ie===null||typeof ie>"u")&&(ie=K()),J=I[ee]&&I[ee][ie]),typeof J>"u"||!J.length||!J[0]){var De="";te=[];for(ae in I[ee])this.terminals_[ae]&&ae>O&&te.push("'"+this.terminals_[ae]+"'");F.showPosition?De="Parse error on line "+(k+1)+`: +`+F.showPosition()+` +Expecting `+te.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":De="Parse error on line "+(k+1)+": Unexpected "+(ie==N?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(De,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:z,expected:te})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ee+", token: "+ie);switch(J[0]){case 1:E.push(ie),C.push(F.yytext),A.push(F.yylloc),E.push(J[1]),ie=null,Q?(ie=Q,Q=null):(R=F.yyleng,D=F.yytext,k=F.yylineno,z=F.yylloc,S>0&&S--);break;case 2:if(ue=this.productions_[J[1]][1],Z.$=C[C.length-ue],Z._$={first_line:A[A.length-(ue||1)].first_line,last_line:A[A.length-1].last_line,first_column:A[A.length-(ue||1)].first_column,last_column:A[A.length-1].last_column},W&&(Z._$.range=[A[A.length-(ue||1)].range[0],A[A.length-1].range[1]]),q=this.performAction.apply(Z,[D,R,k,B.yy,J[1],C,A].concat(P)),typeof q<"u")return q;ue&&(E=E.slice(0,-1*ue*2),C=C.slice(0,-1*ue),A=A.slice(0,-1*ue)),E.push(this.productions_[J[1]][0]),C.push(Z.$),A.push(Z._$),ce=I[E[E.length-2]][E[E.length-1]],E.push(ce);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(_,T){return this.yy=T||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var T=_.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},"input"),unput:o(function(_){var T=_.length,E=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var L=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===L.length?this.yylloc.first_column:0)+L[L.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(_){this.unput(this.match.slice(_))},"less"),pastInput:o(function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var _=this.pastInput(),T=new Array(_.length+1).join("-");return _+this.upcomingInput()+` +`+T+"^"},"showPosition"),test_match:o(function(_,T){var E,L,C;if(this.options.backtrack_lexer&&(C={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(C.yylloc.range=this.yylloc.range.slice(0))),L=_[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var A in C)this[A]=C[A];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,T,E,L;this._more||(this.yytext="",this.match="");for(var C=this._currentRules(),A=0;AT[0].length)){if(T=E,L=A,this.options.backtrack_lexer){if(_=this.test_match(E,C[A]),_!==!1)return _;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(_=this.test_match(T,C[L]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,L,C){var A=C;switch(L){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();jB.parser=jB;Xye=jB});function Krt(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Qrt(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function Zrt(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var ql,QB,KB,Kye,Qye,Urt,Jye,Hrt,K6,Wrt,Yrt,qrt,Xrt,eve,ZB,pb,jrt,Zye,Jrt,ent,tnt,rnt,nnt,int,ant,snt,ont,lnt,cnt,tve,rve=M(()=>{"use strict";SL();Ua();Vt();ht();fr();ki();ql=new Map,QB=[],KB=new Map,Kye="color",Qye="fill",Urt="bgFill",Jye=",",Hrt=de(),K6=new Map,Wrt=o(t=>je.sanitizeText(t,Hrt),"sanitizeText"),Yrt=o(function(t,e=""){let r=K6.get(t);r||(r={id:t,styles:[],textStyles:[]},K6.set(t,r)),e?.split(Jye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Kye).exec(n)){let s=i.replace(Qye,Urt).replace(Kye,Qye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),qrt=o(function(t,e=""){let r=ql.get(t);e!=null&&(r.styles=e.split(Jye))},"addStyle2Node"),Xrt=o(function(t,e){t.split(",").forEach(function(r){let n=ql.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},ql.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),eve=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Wrt(i.label)),i.type==="classDef"){Yrt(i.id,i.css);continue}if(i.type==="applyClass"){Xrt(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&qrt(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(KB.get(i.id)??0)+1;KB.set(i.id,a),i.id=a+"-"+i.id,QB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=ql.get(i.id);if(a===void 0?ql.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&eve(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{Y.debug("Clear called"),_r(),pb={id:"root",type:"composite",children:[],columns:-1},ql=new Map([["root",pb]]),ZB=[],K6=new Map,QB=[],KB=new Map},"clear");o(Krt,"typeStr2Type");o(Qrt,"edgeTypeStr2Type");o(Zrt,"edgeStrToEdgeData");Zye=0,Jrt=o(()=>(Zye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Zye),"generateId"),ent=o(t=>{pb.children=t,eve(t,pb),ZB=pb.children},"setHierarchy"),tnt=o(t=>{let e=ql.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),rnt=o(()=>[...ql.values()],"getBlocksFlat"),nnt=o(()=>ZB||[],"getBlocks"),int=o(()=>QB,"getEdges"),ant=o(t=>ql.get(t),"getBlock"),snt=o(t=>{ql.set(t.id,t)},"setBlock"),ont=o(()=>console,"getLogger"),lnt=o(function(){return K6},"getClasses"),cnt={getConfig:o(()=>Sr().block,"getConfig"),typeStr2Type:Krt,edgeTypeStr2Type:Qrt,edgeStrToEdgeData:Zrt,getLogger:ont,getBlocksFlat:rnt,getBlocks:nnt,getEdges:int,setHierarchy:ent,getBlock:ant,setBlock:snt,getColumns:tnt,getClasses:lnt,clear:jrt,generateId:Jrt},tve=cnt});var Q6,unt,nve,ive=M(()=>{"use strict";To();Q6=o((t,e)=>{let r=z1,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Hs(n,i,a,e)},"fade"),unt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span,p { + color: ${t.titleColor}; + } + + + + .label text,span,p { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${Q6(t.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${Q6(t.mainBkg,.5)}; + fill: ${Q6(t.clusterBkg,.5)}; + stroke: ${Q6(t.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span,p { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),nve=unt});var hnt,fnt,dnt,pnt,mnt,gnt,ynt,vnt,xnt,bnt,wnt,ave,sve=M(()=>{"use strict";ht();hnt=o((t,e,r,n)=>{e.forEach(i=>{wnt[i](t,r,n)})},"insertMarkers"),fnt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),dnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),pnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),mnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),gnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ynt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),vnt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),xnt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),bnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),wnt={extension:fnt,composition:dnt,aggregation:pnt,dependency:mnt,lollipop:gnt,point:ynt,circle:vnt,cross:xnt,barb:bnt},ave=hnt});function Tnt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function JB(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)JB(m,e);let s=knt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+xi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)JB(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*xi-xi)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function ove(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*xi;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-xi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=Tnt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-xi,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${xi}`),h.size){let g=f/2;u.size.x=s+xi+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${xi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+xi)+d/2+xi,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${xi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&ove(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function lve(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=lve(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function cve(t){let e=t.getBlock("root");if(!e)return;JB(e,t,0,0),ove(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=lve(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var xi,knt,uve=M(()=>{"use strict";ht();Vt();xi=de()?.block?.padding??8;o(Tnt,"calculateBlockPosition");knt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(JB,"setBlockSizes");o(ove,"layoutBlocks");o(lve,"findBounds");o(cve,"layout")});function hve(t,e){e&&t.attr("style",e)}function Ent(t){let e=ze(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),hve(a,t.labelStyle),a.attr("class",i),hve(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Snt,cs,Z6=M(()=>{"use strict";mr();ht();Vt();fr();hr();Dl();o(hve,"applyStyle");o(Ent,"addHtmlLabel");Snt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(de().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.debug("vertexText"+i);let a={isNode:n,label:x9(Ca(i)),labelStyle:e.replace("fill:","color:")};return Ent(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),cs=Snt});var dve,Cnt,fve,pve=M(()=>{"use strict";ht();dve=o((t,e,r,n,i)=>{e.arrowTypeStart&&fve(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&fve(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),Cnt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},fve=o((t,e,r,n,i,a)=>{let s=Cnt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function J6(t,e){de().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var eF,$a,gve,yve,Ant,_nt,mve,vve,xve=M(()=>{"use strict";ht();Z6();Dl();mr();Vt();hr();fr();lL();Cv();pve();eF={},$a={},gve=o((t,e)=>{let r=de(),n=xr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Si(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):cs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=ze(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),eF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=cs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),$a[e.id]||($a[e.id]={}),$a[e.id].startLeft=f,J6(u,e.startLabelLeft)}if(e.startLabelRight){let h=cs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),$a[e.id]||($a[e.id]={}),$a[e.id].startRight=f,J6(u,e.startLabelRight)}if(e.endLabelLeft){let h=cs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),$a[e.id]||($a[e.id]={}),$a[e.id].endLeft=f,J6(u,e.endLabelLeft)}if(e.endLabelRight){let h=cs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),$a[e.id]||($a[e.id]={}),$a[e.id].endRight=f,J6(u,e.endLabelRight)}return i},"insertEdgeLabel");o(J6,"setTerminalWidth");yve=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,eF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=de(),{subGraphTitleTotalMargin:i}=_u(n);if(t.label){let a=eF[t.id],s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=$a[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=$a[t.id].startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=$a[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=$a[t.id].endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Ant=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),_nt=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Ant(e,a)&&!i){let s=_nt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),vve=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=mve(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=mve(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(_=>!Number.isNaN(_.y)),p=Do;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=Z5(r),y=Ka().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(de().flowchart.arrowMarkerAbsolute||de().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),dve(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var Lnt,bve,wve=M(()=>{"use strict";Lnt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),bve=o((t,e,r)=>{let n=Lnt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Dnt(t,e){return t.intersect(e)}var Tve,kve=M(()=>{"use strict";o(Dnt,"intersectNode");Tve=Dnt});function Nnt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(Nnt,"intersectEllipse");eS=Nnt});function Rnt(t,e,r){return eS(t,e,e,r)}var Eve,Sve=M(()=>{"use strict";tF();o(Rnt,"intersectCircle");Eve=Rnt});function Mnt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Cve(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Cve(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Cve(t,e){return t*e>0}var Ave,_ve=M(()=>{"use strict";o(Mnt,"intersectLine");o(Cve,"sameSign");Ave=Mnt});function Int(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,_=y.y-r.y,T=Math.sqrt(w*w+_*_);return b{"use strict";_ve();Lve=Int;o(Int,"intersectPolygon")});var Ont,Nve,Rve=M(()=>{"use strict";Ont=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Nve=Ont});var Rn,rF=M(()=>{"use strict";kve();Sve();tF();Dve();Rve();Rn={node:Tve,circle:Eve,ellipse:eS,polygon:Lve,rect:Nve}});function Xl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var _i,qn,nF=M(()=>{"use strict";Z6();Dl();Vt();mr();fr();hr();_i=o(async(t,e,r,n)=>{let i=de(),a,s=e.useHtmlLabels||xr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Si(u,Tr(Ca(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(cs(Tr(Ca(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(xr(i.flowchart.htmlLabels)){let g=d.children[0],y=ze(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function _(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,L=parseInt(T,10)*5+"px";b.style.minWidth=L,b.style.maxWidth=L}else b.style.width="100%";w(b)}o(_,"setupImage"),setTimeout(()=>{b.complete&&_()}),b.addEventListener("error",_),b.addEventListener("load",_)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Xl,"insertPolygonShape")});var Pnt,Mve,Ive=M(()=>{"use strict";nF();ht();Vt();rF();Pnt=o(async(t,e)=>{e.useHtmlLabels||de().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await _i(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),qn(e,s),e.intersect=function(l){return Rn.rect(e,l)},n},"note"),Mve=Pnt});function iF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var Ove,go,Pve,Bnt,Fnt,znt,Gnt,$nt,Vnt,Unt,Hnt,Wnt,Ynt,qnt,Xnt,jnt,Knt,Qnt,Znt,Jnt,eit,tit,Bve,rit,nit,Fve,tS,aF,zve,Gve=M(()=>{"use strict";mr();Vt();fr();ht();wve();Z6();rF();Ive();nF();Ove=o(t=>t?" "+t:"","formatClass"),go=o((t,e)=>`${e||"node default"}${Ove(t.classes)} ${Ove(t.class)}`,"getClassesFromNode"),Pve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=Xl(r,s,s,l);return u.attr("style",e.style),qn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),Rn.polygon(e,l,h)},r},"question"),Bnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return Rn.circle(e,14,s)},r},"choice"),Fnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Xl(r,l,a,u);return h.attr("style",e.style),qn(e,h),e.intersect=function(f){return Rn.polygon(e,u,f)},r},"hexagon"),znt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=bve(e.directions,n,e),h=Xl(r,l,a,u);return h.attr("style",e.style),qn(e,h),e.intersect=function(f){return Rn.polygon(e,u,f)},r},"block_arrow"),Gnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Xl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return Rn.polygon(e,s,u)},r},"rect_left_inv_arrow"),$nt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"lean_right"),Vnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"lean_left"),Unt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"trapezoid"),Hnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"inv_trapezoid"),Wnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"rect_right_inv_arrow"),Ynt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return qn(e,h),e.intersect=function(f){let d=Rn.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),qnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await _i(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(iF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return qn(e,a),e.intersect=function(f){return Rn.rect(e,f)},r},"rect"),Xnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await _i(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(iF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return qn(e,a),e.intersect=function(f){return Rn.rect(e,f)},r},"composite"),jnt=o(async(t,e)=>{let{shapeSvg:r}=await _i(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(iF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return qn(e,n),e.intersect=function(s){return Rn.rect(e,s)},r},"labelRect");o(iF,"applyNodePropertyBorders");Knt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(cs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(xr(de().flowchart.htmlLabels)){let y=h.children[0],v=ze(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(cs(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(xr(de().flowchart.htmlLabels)){let y=m.children[0],v=ze(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return ze(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),ze(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return qn(e,s),e.intersect=function(l){return Rn.rect(e,l)},r},"stadium"),Znt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await _i(t,e,go(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),qn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),Rn.circle(e,n.width/2+i,s)},r},"circle"),Jnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await _i(t,e,go(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),qn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),Rn.circle(e,n.width/2+i+a,h)},r},"doublecircle"),eit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await _i(t,e,go(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Xl(r,i,a,s);return l.attr("style",e.style),qn(e,l),e.intersect=function(u){return Rn.polygon(e,s,u)},r},"subroutine"),tit=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),qn(e,n),e.intersect=function(i){return Rn.circle(e,7,i)},r},"start"),Bve=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return Rn.rect(e,l)},n},"forkJoin"),rit=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),qn(e,i),e.intersect=function(a){return Rn.circle(e,7,a)},r},"end"),nit=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(cs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(xr(de().flowchart.htmlLabels)){let C=v.children[0],A=ze(v);x=C.getBoundingClientRect(),A.attr("width",x.width),A.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(de().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(cs(b,e.labelStyle,!0,!0));ze(w).attr("class","classTitle");let _=w.getBBox();if(xr(de().flowchart.htmlLabels)){let C=w.children[0],A=ze(w);_=C.getBoundingClientRect(),A.attr("width",_.width),A.attr("height",_.height)}d+=_.height+n,_.width>f&&(f=_.width);let T=[];e.classData.members.forEach(C=>{let A=C.getDisplayDetails(),I=A.displayText;de().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(cs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(de().flowchart.htmlLabels)){let R=D.children[0],S=ze(D);k=R.getBoundingClientRect(),S.attr("width",k.width),S.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(C=>{let A=C.getDisplayDetails(),I=A.displayText;de().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(cs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(de().flowchart.htmlLabels)){let R=D.children[0],S=ze(D);k=R.getBoundingClientRect(),S.attr("width",k.width),S.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let C=(f-x.width)/2;ze(v).attr("transform","translate( "+(-1*f/2+C)+", "+-1*d/2+")"),m=x.height+n}let L=(f-_.width)/2;return ze(w).attr("transform","translate( "+(-1*f/2+L)+", "+(-1*d/2+m)+")"),m+=_.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(C=>{ze(C).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let A=C?.getBBox();m+=(A?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(C=>{ze(C).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let A=C?.getBBox();m+=(A?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),qn(e,l),e.intersect=function(C){return Rn.rect(e,C)},s},"class_box"),Fve={rhombus:Pve,composite:Xnt,question:Pve,rect:qnt,labelRect:jnt,rectWithTitle:Knt,choice:Bnt,circle:Znt,doublecircle:Jnt,stadium:Qnt,hexagon:Fnt,block_arrow:znt,rect_left_inv_arrow:Gnt,lean_right:$nt,lean_left:Vnt,trapezoid:Unt,inv_trapezoid:Hnt,rect_right_inv_arrow:Wnt,cylinder:Ynt,start:tit,end:rit,note:Mve,subroutine:eit,fork:Bve,join:Bve,class_box:nit},tS={},aF=o(async(t,e,r)=>{let n,i;if(e.link){let a;de().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await Fve[e.shape](n,e,r)}else i=await Fve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),tS[e.id]=n,e.haveCallback&&tS[e.id].attr("class",tS[e.id].attr("class")+" clickable"),n},"insertNode"),zve=o(t=>{let e=tS[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function $ve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=J_(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??Sr()?.block?.padding??0}}async function iit(t,e,r){let n=$ve(e,r,!1);if(n.type==="group")return;let i=Sr(),a=await aF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function ait(t,e,r){let n=$ve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=Sr();await aF(t,n,{config:a}),e.intersect=n?.intersect,zve(n)}}async function sF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await sF(t,i.children,r,n)}async function Vve(t,e,r){await sF(t,e,r,iit)}async function Uve(t,e,r){await sF(t,e,r,ait)}async function Hve(t,e,r,n,i){let a=new Mr({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];vve(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await gve(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),yve({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var Wve=M(()=>{"use strict";Ns();Ua();xve();Gve();hr();o($ve,"getNodeFromBlock");o(iit,"calculateBlockSize");o(ait,"insertBlockPositioned");o(sF,"performOperations");o(Vve,"calculateBlockSizes");o(Uve,"insertBlocks");o(Hve,"insertEdges")});var sit,oit,Yve,qve=M(()=>{"use strict";mr();Ua();sve();ht();ni();uve();Wve();sit=o(function(t,e){return e.db.getClasses()},"getClasses"),oit=o(async function(t,e,r,n){let{securityLevel:i,block:a}=Sr(),s=n.db,l;i==="sandbox"&&(l=ze("#i"+e));let u=i==="sandbox"?ze(l.nodes()[0].contentDocument.body):ze("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):ze(`[id="${e}"]`);ave(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await Vve(g,d,s);let y=cve(s);if(await Uve(g,d,s),await Hve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:_}=a;Zr(h,b,w,!!_),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Yve={draw:oit,getClasses:sit}});var Xve={};vr(Xve,{diagram:()=>lit});var lit,jve=M(()=>{"use strict";jye();rve();ive();qve();lit={parser:Xye,db:tve,renderer:Yve,styles:nve}});var oF,lF,mb,Zve,cF,us,qc,rS,Jve,fit,gb,e2e,t2e,r2e,n2e,nS,Mf,iS=M(()=>{"use strict";oF={L:"left",R:"right",T:"top",B:"bottom"},lF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},mb={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},Zve=o(function(t){return us(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),cF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),us=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),qc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),rS=o(function(t,e){let r=us(t)&&qc(e),n=qc(t)&&us(e);return r||n},"isArchitectureDirectionXY"),Jve=o(function(t){let e=t[0],r=t[1],n=us(e)&&qc(r),i=qc(e)&&us(r);return n||i},"isArchitecturePairXY"),fit=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),gb=o(function(t,e){let r=`${t}${e}`;return fit(r)?r:void 0},"getArchitectureDirectionPair"),e2e=o(function([t,e],r){let n=r[0],i=r[1];return us(n)?qc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:us(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),t2e=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),r2e=o(function(t){return t.type==="service"},"isArchitectureService"),n2e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),nS=o(t=>t.data(),"edgeData"),Mf=o(t=>t.data(),"nodeData")});function Li(t){let e=de().architecture;return e?.[t]?e[t]:i2e[t]}var i2e,gr,dit,pit,mit,git,yit,vit,xit,bit,wit,Tit,kit,Eit,Sit,Cit,X0,yb=M(()=>{"use strict";hs();Vt();tE();ki();iS();i2e=ur.architecture,gr=new cf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:i2e,dataStructures:void 0,elements:{}})),dit=o(()=>{gr.reset(),_r()},"clear"),pit=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(gr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${gr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(gr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(gr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}gr.records.registeredIds[t]="node",gr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),mit=o(()=>Object.values(gr.records.nodes).filter(r2e),"getServices"),git=o(function({id:t,in:e}){gr.records.registeredIds[t]="node",gr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),yit=o(()=>Object.values(gr.records.nodes).filter(n2e),"getJunctions"),vit=o(()=>Object.values(gr.records.nodes),"getNodes"),xit=o(t=>gr.records.nodes[t],"getNode"),bit=o(function({id:t,icon:e,in:r,title:n}){if(gr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${gr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(gr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(gr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}gr.records.registeredIds[t]="group",gr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),wit=o(()=>Object.values(gr.records.groups),"getGroups"),Tit=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!cF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!cF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(gr.records.nodes[t]===void 0&&gr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(gr.records.nodes[e]===void 0&&gr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=gr.records.nodes[t].in,f=gr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};gr.records.edges.push(d),gr.records.nodes[t]&&gr.records.nodes[e]&&(gr.records.nodes[t].edges.push(gr.records.edges[gr.records.edges.length-1]),gr.records.nodes[e].edges.push(gr.records.edges[gr.records.edges.length-1]))},"addEdge"),kit=o(()=>gr.records.edges,"getEdges"),Eit=o(()=>{if(gr.records.dataStructures===void 0){let t=Object.entries(gr.records.nodes).reduce((s,[l,u])=>(s[l]=u.edges.reduce((h,f)=>{if(f.lhsId===l){let d=gb(f.lhsDir,f.rhsDir);d&&(h[d]=f.rhsId)}else{let d=gb(f.rhsDir,f.lhsDir);d&&(h[d]=f.lhsId)}return h},{}),s),{}),e=Object.keys(t)[0],r={[e]:1},n=Object.keys(t).reduce((s,l)=>l===e?s:{...s,[l]:1},{}),i=o(s=>{let l={[s]:[0,0]},u=[s];for(;u.length>0;){let h=u.shift();if(h){r[h]=1,delete n[h];let f=t[h],[d,p]=l[h];Object.entries(f).forEach(([m,g])=>{r[g]||(l[g]=e2e([d,p],m),u.push(g))})}}return l},"BFS"),a=[i(e)];for(;Object.keys(n).length>0;)a.push(i(Object.keys(n)[0]));gr.records.dataStructures={adjList:t,spatialMaps:a}}return gr.records.dataStructures},"getDataStructures"),Sit=o((t,e)=>{gr.records.elements[t]=e},"setElementForId"),Cit=o(t=>gr.records.elements[t],"getElementById"),X0={clear:dit,setDiagramTitle:ln,getDiagramTitle:Jr,setAccTitle:Rr,getAccTitle:Pr,setAccDescription:Br,getAccDescription:Fr,addService:pit,getServices:mit,addJunction:git,getJunctions:yit,getNodes:vit,getNode:xit,addGroup:bit,getGroups:wit,addEdge:Tit,getEdges:kit,setElementForId:Sit,getElementById:Cit,getDataStructures:Eit};o(Li,"getConfigField")});var Ait,a2e,s2e=M(()=>{"use strict";Ng();ht();ox();yb();Ait=o((t,e)=>{lf(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),a2e={parse:o(async t=>{let e=await Gl("architecture",t);Y.debug(e),Ait(e,X0)},"parse")}});var _it,o2e,l2e=M(()=>{"use strict";_it=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),o2e=_it});var hF=Ni((vb,uF)=>{"use strict";o(function(e,r){typeof vb=="object"&&typeof uF=="object"?uF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof vb=="object"?vb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(vb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,C=this.nodes,A=C.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=C,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):S===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=C,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=C,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(S,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-S,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-S,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(S,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:$=m,B=u+-w/N,l[0]=B,l[1]=$;break;case 2:B=x,$=h+b*N,l[0]=B,l[1]=$;break;case 3:$=v,B=u+w/N,l[0]=B,l[1]=$;break;case 4:B=y,$=h+-b*N,l[0]=B,l[1]=$;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=C,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,C=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,C=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*C-E*L)/A,b=(_*L-w*C)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(C,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),S=R-1;S==1&&E.push(k),v.set(k,S)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(dt){for(var Xe=[];dt-- >0;)Xe.push(0);return Xe}(Math.min(this.m+1,this.n)),this.U=function(dt){var Xe=o(function ct(Lt){if(Lt.length==0)return 0;for(var Rt=[],zt=0;zt0;)Xe.push(0);return Xe}(this.n),l=function(dt){for(var Xe=[];dt-- >0;)Xe.push(0);return Xe}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;N--)if(this.s[N]!==0){for(var P=N+1;P=0;K--){if(function(dt,Xe){return dt&&Xe}(K0;){var ce=void 0,te=void 0;for(ce=R-2;ce>=-1&&ce!==-1;ce--)if(Math.abs(s[ce])<=ue+ae*(Math.abs(this.s[ce])+Math.abs(this.s[ce+1]))){s[ce]=0;break}if(ce===R-2)te=4;else{var De=void 0;for(De=R-1;De>=ce&&De!==ce;De--){var oe=(De!==R?Math.abs(s[De]):0)+(De!==ce+1?Math.abs(s[De-1]):0);if(Math.abs(this.s[De])<=ue+ae*oe){this.s[De]=0;break}}De===ce?te=3:De===R-1?te=1:(te=2,ce=De)}switch(ce++,te){case 1:{var ke=s[R-2];s[R-2]=0;for(var Fe=R-2;Fe>=ce;Fe--){var Be=n.hypot(this.s[Fe],ke),Ve=this.s[Fe]/Be,Ge=ke/Be;if(this.s[Fe]=Be,Fe!==ce&&(ke=-Ge*s[Fe-1],s[Fe-1]=Ve*s[Fe-1]),h)for(var He=0;He=this.s[ce+1]);){var rt=this.s[ce];if(this.s[ce]=this.s[ce+1],this.s[ce+1]=rt,h&&ceMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof xb=="object"&&typeof fF=="object"?fF.exports=r(hF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof xb=="object"?xb.coseBase=r(hF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(xb,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,_=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,L=l(551).LGraph,C=l(551).Transform,A=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),S=this.nodesWithGravity.filter(function(P){return R.has(P)});this.graphManager.setAllNodesToApplyGravitation(S)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),S=this.nodesWithGravity.filter(function(O){return R.has(O)});this.graphManager.setAllNodesToApplyGravitation(S),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(N){return k.has(N)});this.graphManager.setAllNodesToApplyGravitation(R),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var S=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(S,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),R={},S=0;S0&&this.updateDisplacements();for(var S=0;S0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var F=new Map,B=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(ee){k.fixedNodesOnHorizontal.add(ee),k.fixedNodesOnVertical.add(ee)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var $=this.constraints.alignmentConstraint.vertical,S=0;S<$.length;S++)this.dummyToNodeForVerticalAlignment.set("dummy"+S,[]),$[S].forEach(function(J){F.set(J,"dummy"+S),k.dummyToNodeForVerticalAlignment.get("dummy"+S).push(J),k.fixedNodeSet.has(J)&&k.fixedNodesOnHorizontal.add("dummy"+S)});if(this.constraints.alignmentConstraint.horizontal)for(var z=this.constraints.alignmentConstraint.horizontal,S=0;S=2*ee.length/3;q--)J=Math.floor(Math.random()*(q+1)),H=ee[q],ee[q]=ee[J],ee[J]=H;return ee},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;k.nodesInRelativeHorizontal.includes(J)||(k.nodesInRelativeHorizontal.push(J),k.nodeToRelativeConstraintMapHorizontal.set(J,[]),k.dummyToNodeForVerticalAlignment.has(J)?k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(J).getCenterX())),k.nodesInRelativeHorizontal.includes(H)||(k.nodesInRelativeHorizontal.push(H),k.nodeToRelativeConstraintMapHorizontal.set(H,[]),k.dummyToNodeForVerticalAlignment.has(H)?k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(H).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(J).push({right:H,gap:ee.gap}),k.nodeToRelativeConstraintMapHorizontal.get(H).push({left:J,gap:ee.gap})}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Z=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;k.nodesInRelativeVertical.includes(q)||(k.nodesInRelativeVertical.push(q),k.nodeToRelativeConstraintMapVertical.set(q,[]),k.dummyToNodeForHorizontalAlignment.has(q)?k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(q).getCenterY())),k.nodesInRelativeVertical.includes(Z)||(k.nodesInRelativeVertical.push(Z),k.nodeToRelativeConstraintMapVertical.set(Z,[]),k.dummyToNodeForHorizontalAlignment.has(Z)?k.nodeToTempPositionMapVertical.set(Z,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(Z)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(Z,k.idToNodeMap.get(Z).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(q).push({bottom:Z,gap:ee.gap}),k.nodeToRelativeConstraintMapVertical.get(Z).push({top:q,gap:ee.gap})}});else{var W=new Map,j=new Map;this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;W.has(J)?W.get(J).push(H):W.set(J,[H]),W.has(H)?W.get(H).push(J):W.set(H,[J])}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Z=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;j.has(q)?j.get(q).push(Z):j.set(q,[Z]),j.has(Z)?j.get(Z).push(q):j.set(Z,[q])}});var K=o(function(J,H){var q=[],Z=[],ae=new A,ue=new Set,ce=0;return J.forEach(function(te,De){if(!ue.has(De)){q[ce]=[],Z[ce]=!1;var oe=De;for(ae.push(oe),ue.add(oe),q[ce].push(oe);ae.length!=0;){oe=ae.shift(),H.has(oe)&&(Z[ce]=!0);var ke=J.get(oe);ke.forEach(function(Fe){ue.has(Fe)||(ae.push(Fe),ue.add(Fe),q[ce].push(Fe))})}ce++}}),{components:q,isFixed:Z}},"constructComponents"),ie=K(W,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var Q=K(j,k.fixedNodesOnVertical);this.componentsOnVertical=Q.components,this.fixedComponentsOnVertical=Q.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(Q){var ee=k.idToNodeMap.get(Q.nodeId);ee.displacementX=0,ee.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var R=this.constraints.alignmentConstraint.vertical,S=0;S1){var B;for(B=0;BO&&(O=Math.floor(F.y)),P=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,R,S){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(R,null,0,359,0,O);var N=L.calculateBounds(k),P=new C;P.setDeviceOrgX(N.getMinX()),P.setDeviceOrgY(N.getMinY()),P.setWorldOrgX(S.x),P.setWorldOrgY(S.y);for(var F=0;F1;){var q=H[0];H.splice(0,1);var Z=K.indexOf(q);Z>=0&&K.splice(Z,1),ee--,ie--}R!=null?J=(K.indexOf(H[0])+1)%ee:J=0;for(var ae=Math.abs(O-S)/ie,ue=J;Q!=ie;ue=++ue%ee){var ce=K[ue].getOtherEnd(k);if(ce!=R){var te=(S+Q*ae)%360,De=(te+ae)%360;I.branchRadialLayout(ce,k,te,De,N+P,P),Q++}}},I.maxDiagonalInTree=function(k){for(var R=T.MIN_VALUE,S=0;SR&&(R=N)}return R},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,R={};this.memberGroups={},this.idToDummyNode={};for(var S=[],O=this.graphManager.getAllNodes(),N=0;N"u"&&(R[B]=[]),R[B]=R[B].concat(P)}Object.keys(R).forEach(function($){if(R[$].length>1){var z="DummyCompound_"+$;k.memberGroups[z]=R[$];var W=R[$][0].getParent(),j=new d(k.graphManager);j.id=z,j.paddingLeft=W.paddingLeft||0,j.paddingRight=W.paddingRight||0,j.paddingBottom=W.paddingBottom||0,j.paddingTop=W.paddingTop||0,k.idToDummyNode[z]=j;var K=k.getGraphManager().add(k.newGraph(),j),ie=W.getChild();ie.add(j);for(var Q=0;QN?(O.rect.x-=(O.labelWidth-N)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-N)/2):O.labelPosHorizontal=="right"&&O.setWidth(N+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var R=this.compoundOrder[k],S=R.id,O=R.paddingLeft,N=R.paddingTop,P=R.labelMarginLeft,F=R.labelMarginTop;this.adjustLocations(this.tiledMemberPack[S],R.rect.x,R.rect.y,O,N,P,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,R=this.tiledZeroDegreePack;Object.keys(R).forEach(function(S){var O=k.idToDummyNode[S],N=O.paddingLeft,P=O.paddingTop,F=O.labelMarginLeft,B=O.labelMarginTop;k.adjustLocations(R[S],O.rect.x,O.rect.y,N,P,F,B)})},I.prototype.getToBeTiled=function(k){var R=k.id;if(this.toBeTiled[R]!=null)return this.toBeTiled[R];var S=k.getChild();if(S==null)return this.toBeTiled[R]=!1,!1;for(var O=S.getNodes(),N=0;N0)return this.toBeTiled[R]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[R]=!1,!1}return this.toBeTiled[R]=!0,!0},I.prototype.getNodeDegree=function(k){for(var R=k.id,S=k.getEdges(),O=0,N=0;NW&&(W=K.rect.height)}S+=W+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,R){var S=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var N=R[O];if(S.tiledMemberPack[O]=S.tileNodes(k[O],N.paddingLeft+N.paddingRight),N.rect.width=S.tiledMemberPack[O].width,N.rect.height=S.tiledMemberPack[O].height,N.setCenter(S.tiledMemberPack[O].centerX,S.tiledMemberPack[O].centerY),N.labelMarginLeft=0,N.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=N.rect.width,F=N.rect.height;N.labelWidth&&(N.labelPosHorizontal=="left"?(N.rect.x-=N.labelWidth,N.setWidth(P+N.labelWidth),N.labelMarginLeft=N.labelWidth):N.labelPosHorizontal=="center"&&N.labelWidth>P?(N.rect.x-=(N.labelWidth-P)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-P)/2):N.labelPosHorizontal=="right"&&N.setWidth(P+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(F+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>F?(N.rect.y-=(N.labelHeight-F)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-F)/2):N.labelPosVertical=="bottom"&&N.setHeight(F+N.labelHeight))}})},I.prototype.tileNodes=function(k,R){var S=this.tileNodesByFavoringDim(k,R,!0),O=this.tileNodesByFavoringDim(k,R,!1),N=this.getOrgRatio(S),P=this.getOrgRatio(O),F;return PB&&(B=Q.getWidth())});var $=P/N,z=F/N,W=Math.pow(S-O,2)+4*($+O)*(z+S)*N,j=(O-S+Math.sqrt(W))/(2*($+O)),K;R?(K=Math.ceil(j),K==j&&K++):K=Math.floor(j);var ie=K*($+O)-O;return B>ie&&(ie=B),ie+=O*2,ie},I.prototype.tileNodesByFavoringDim=function(k,R,S){var O=m.TILING_PADDING_VERTICAL,N=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:R,verticalPadding:O,horizontalPadding:N,centerX:0,centerY:0};P&&(F.idealRowWidth=this.calcIdealRowWidth(k,S));var B=o(function(ee){return ee.rect.width*ee.rect.height},"getNodeArea"),$=o(function(ee,J){return B(J)-B(ee)},"areaCompareFcn");k.sort(function(Q,ee){var J=$;return F.idealRowWidth?(J=P,J(Q.id,ee.id)):J(Q,ee)});for(var z=0,W=0,j=0;j0&&(F+=k.horizontalPadding),k.rowWidth[S]=F,k.width0&&(B+=k.verticalPadding);var $=0;B>k.rowHeight[S]&&($=k.rowHeight[S],k.rowHeight[S]=B,$=k.rowHeight[S]-$),k.height+=$,k.rows[S].push(R)},I.prototype.getShortestRowIndex=function(k){for(var R=-1,S=Number.MAX_VALUE,O=0;OS&&(R=O,S=k.rowWidth[O]);return R},I.prototype.canAddHorizontal=function(k,R,S){if(k.idealRowWidth){var O=k.rows.length-1,N=k.rowWidth[O];return N+R+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var F=k.rowWidth[P];if(F+k.horizontalPadding+R<=k.width)return!0;var B=0;k.rowHeight[P]0&&(B=S+k.verticalPadding-k.rowHeight[P]);var $;k.width-F>=R+k.horizontalPadding?$=(k.height+B)/(F+R+k.horizontalPadding):$=(k.height+B)/k.width,B=S+k.verticalPadding;var z;return k.widthP&&R!=S){O.splice(-1,1),k.rows[S].push(N),k.rowWidth[R]=k.rowWidth[R]-P,k.rowWidth[S]=k.rowWidth[S]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,B=0;BF&&(F=O[B].height);R>0&&(F+=k.verticalPadding);var $=k.rowHeight[R]+k.rowHeight[S];k.rowHeight[R]=F,k.rowHeight[S]0)for(var ie=N;ie<=P;ie++)K[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(P0)for(var ie=F;ie<=B;ie++)K[3]+=this.grid[N-1][ie].length+this.grid[N][ie].length-1;for(var Q=T.MAX_VALUE,ee,J,H=0;H{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var Tt=0;Ye.forEach(function(rt){Te=="horizontal"?(me.set(rt,x.has(rt)?b[x.get(rt)]:Ee.get(rt)),Tt+=me.get(rt)):(me.set(rt,x.has(rt)?w[x.get(rt)]:Ee.get(rt)),Tt+=me.get(rt))}),Tt=Tt/Ye.length,vt.forEach(function(rt){se.has(rt)||me.set(rt,Tt)})}else{var $e=0;vt.forEach(function(rt){Te=="horizontal"?$e+=x.has(rt)?b[x.get(rt)]:Ee.get(rt):$e+=x.has(rt)?w[x.get(rt)]:Ee.get(rt)}),$e=$e/vt.length,vt.forEach(function(rt){me.set(rt,$e)})}});for(var tt=o(function(){var Ye=Re.shift(),Tt=U.get(Ye);Tt.forEach(function($e){if(me.get($e.id)rt&&(rt=Rt),zt<$e&&($e=zt),zt>ft&&(ft=zt)}}catch(yt){er=!0,dt=yt}finally{try{!kt&&Xe.return&&Xe.return()}finally{if(er)throw dt}}var Xn=(Tt+rt)/2-($e+ft)/2,or=!0,hn=!1,Tn=void 0;try{for(var Ur=vt[Symbol.iterator](),ri;!(or=(ri=Ur.next()).done);or=!0){var Mn=ri.value;me.set(Mn,me.get(Mn)+Xn)}}catch(yt){hn=!0,Tn=yt}finally{try{!or&&Ur.return&&Ur.return()}finally{if(hn)throw Tn}}})}return me},"findAppropriatePositionForRelativePlacement"),D=o(function(U){var Te=0,se=0,Ee=0,Ae=0;if(U.forEach(function(We){We.left?b[x.get(We.left)]-b[x.get(We.right)]>=0?Te++:se++:w[x.get(We.top)]-w[x.get(We.bottom)]>=0?Ee++:Ae++}),Te>se&&Ee>Ae)for(var Pe=0;Pese)for(var Me=0;MeAe)for(var me=0;me1)y.fixedNodeConstraint.forEach(function(ye,U){O[U]=[ye.position.x,ye.position.y],N[U]=[b[x.get(ye.nodeId)],w[x.get(ye.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var ye=0;if(y.alignmentConstraint.vertical){for(var U=y.alignmentConstraint.vertical,Te=o(function(me){var We=new Set;U[me].forEach(function(gt){We.add(gt)});var Re=new Set([].concat(u(We)).filter(function(gt){return B.has(gt)})),tt=void 0;Re.size>0?tt=b[x.get(Re.values().next().value)]:tt=A(We).x,U[me].forEach(function(gt){O[ye]=[tt,w[x.get(gt)]],N[ye]=[b[x.get(gt)],w[x.get(gt)]],ye++})},"_loop2"),se=0;se0?tt=b[x.get(Re.values().next().value)]:tt=A(We).y,Ee[me].forEach(function(gt){O[ye]=[b[x.get(gt)],tt],N[ye]=[b[x.get(gt)],w[x.get(gt)]],ye++})},"_loop3"),Pe=0;Pej&&(j=W[ie].length,K=ie);if(j0){var Ve={x:0,y:0};y.fixedNodeConstraint.forEach(function(ye,U){var Te={x:b[x.get(ye.nodeId)],y:w[x.get(ye.nodeId)]},se=ye.position,Ee=C(se,Te);Ve.x+=Ee.x,Ve.y+=Ee.y}),Ve.x/=y.fixedNodeConstraint.length,Ve.y/=y.fixedNodeConstraint.length,b.forEach(function(ye,U){b[U]+=Ve.x}),w.forEach(function(ye,U){w[U]+=Ve.y}),y.fixedNodeConstraint.forEach(function(ye){b[x.get(ye.nodeId)]=ye.position.x,w[x.get(ye.nodeId)]=ye.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Ge=y.alignmentConstraint.vertical,He=o(function(U){var Te=new Set;Ge[U].forEach(function(Ae){Te.add(Ae)});var se=new Set([].concat(u(Te)).filter(function(Ae){return B.has(Ae)})),Ee=void 0;se.size>0?Ee=b[x.get(se.values().next().value)]:Ee=A(Te).x,Te.forEach(function(Ae){B.has(Ae)||(b[x.get(Ae)]=Ee)})},"_loop4"),xe=0;xe0?Ee=w[x.get(se.values().next().value)]:Ee=A(Te).y,Te.forEach(function(Ae){B.has(Ae)||(w[x.get(Ae)]=Ee)})},"_loop5"),he=0;he{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var c2e=Ni((bb,pF)=>{"use strict";o(function(e,r){typeof bb=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof bb=="object"?bb.cytoscapeFcose=r(dF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(bb,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(_){v=!0,x=_}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge(z)});for(var F=0;F1){w=x[0],_=w.connectedEdges().length,x.forEach(function(N){N.connectedEdges().length<_&&(_=N.connectedEdges().length,w=N)}),L.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(N){O.merge(N)}),x=[],m=m.difference(O),E++}},"_loop");do A();while(!T);return g&&L.length>0&&g.set("dummy"+(g.size+1),L),C},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,_=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var L=E.value,C=u(L,2),A=C[0],I=C[1],D=m.cy.getElementById(A);if(D){var k=D.boundingBox(),R=p.xCoords[I]-k.w/2,S=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,N=p.yCoords[I]+k.h/2;Ry&&(y=S),Ox&&(x=N)}}}catch(z){w=!0,_=z}finally{try{!b&&T.return&&T.return()}finally{if(w)throw _}}var P=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(z){return z+P}),p.yCoords=p.yCoords.map(function(z){return z+F})}else{Object.keys(p).forEach(function(z){var W=p[z],j=W.getRect().x,K=W.getRect().x+W.getRect().width,ie=W.getRect().y,Q=W.getRect().y+W.getRect().height;jy&&(y=K),iex&&(x=Q)});var B=d.x-(y+g)/2,$=d.y-(x+v)/2;Object.keys(p).forEach(function(z){var W=p[z];W.setCenter(W.getCenterX()+B,W.getCenterY()+$)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,_=void 0,T=void 0,E=void 0,L=d.descendants().not(":parent"),C=L.length,A=0;Aw&&(y=w),v<_&&(v=_),x>T&&(x=T),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var _=b.cy,T=b.eles,E=T.nodes(),L=T.edges(),C=void 0,A=void 0,I=void 0,D={};b.randomize&&(C=w.nodeIndexes,A=w.xCoords,I=w.yCoords);var k=o(function(z){return typeof z=="function"},"isFn"),R=o(function(z,W){return k(z)?z(W):z},"optFn"),S=u.calcParentsWithoutChildren(_,T),O=o(function $(z,W,j,K){for(var ie=W.length,Q=0;Q0){var ae=void 0;ae=j.getGraphManager().add(j.newGraph(),H),$(ae,J,j,K)}}},"processChildrenList"),N=o(function(z,W,j){for(var K=0,ie=0,Q=0;Q0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=K/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function(z,W){W.fixedNodeConstraint&&(z.constraints.fixedNodeConstraint=W.fixedNodeConstraint),W.alignmentConstraint&&(z.constraints.alignmentConstraint=W.alignmentConstraint),W.relativePlacementConstraint&&(z.constraints.relativePlacementConstraint=W.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,B=F.newGraphManager();return O(B.addRoot(),u.getTopMostNodes(E),F,b),N(F,B,L),P(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,_){for(var T=0;T<_.length;T++){var E=_[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,_,T){return _&&b(w.prototype,_),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var _=this,T=this.options,E=T.cy,L=T.eles,C=[],A=void 0,I=void 0,D=[],k=void 0,R=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var S=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;S&&(T.tile=!1,T.packComponents=!1);var O=void 0,N=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),N=!0),L.nodes().length>0)if(N){var B=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,B),k.forEach(function(oe){var ke=oe.boundingBox();R.push({x:ke.x1+ke.w/2,y:ke.y1+ke.h/2})}),T.randomize&&k.forEach(function(oe){T.eles=oe,C.push(m(T))}),T.quality=="default"||T.quality=="proof"){var $=E.collection();if(T.tile){var z=new Map,W=[],j=[],K=0,ie={nodeIndexes:z,xCoords:W,yCoords:j},Q=[];if(k.forEach(function(oe,ke){oe.edges().length==0&&(oe.nodes().forEach(function(Fe,Be){$.merge(oe.nodes()[Be]),Fe.isParent()||(ie.nodeIndexes.set(oe.nodes()[Be].id(),K++),ie.xCoords.push(oe.nodes()[0].position().x),ie.yCoords.push(oe.nodes()[0].position().y))}),Q.push(ke))}),$.length>1){var ee=$.boundingBox();R.push({x:ee.x1+ee.w/2,y:ee.y1+ee.h/2}),k.push($),C.push(ie);for(var J=Q.length-1;J>=0;J--)k.splice(Q[J],1),C.splice(Q[J],1),R.splice(Q[J],1)}}k.forEach(function(oe,ke){T.eles=oe,D.push(y(T,C[ke])),d.relocateComponent(R[ke],D[ke],T)})}else k.forEach(function(oe,ke){d.relocateComponent(R[ke],C[ke],T)});var H=new Set;if(k.length>1){var q=[],Z=L.filter(function(oe){return oe.css("display")=="none"});k.forEach(function(oe,ke){var Fe=void 0;if(T.quality=="draft"&&(Fe=C[ke].nodeIndexes),oe.nodes().not(Z).length>0){var Be={};Be.edges=[],Be.nodes=[];var Ve=void 0;oe.nodes().not(Z).forEach(function(Ge){if(T.quality=="draft")if(!Ge.isParent())Ve=Fe.get(Ge.id()),Be.nodes.push({x:C[ke].xCoords[Ve]-Ge.boundingbox().w/2,y:C[ke].yCoords[Ve]-Ge.boundingbox().h/2,width:Ge.boundingbox().w,height:Ge.boundingbox().h});else{var He=d.calcBoundingBox(Ge,C[ke].xCoords,C[ke].yCoords,Fe);Be.nodes.push({x:He.topLeftX,y:He.topLeftY,width:He.width,height:He.height})}else D[ke][Ge.id()]&&Be.nodes.push({x:D[ke][Ge.id()].getLeft(),y:D[ke][Ge.id()].getTop(),width:D[ke][Ge.id()].getWidth(),height:D[ke][Ge.id()].getHeight()})}),oe.edges().forEach(function(Ge){var He=Ge.source(),xe=Ge.target();if(He.css("display")!="none"&&xe.css("display")!="none")if(T.quality=="draft"){var X=Fe.get(He.id()),fe=Fe.get(xe.id()),he=[],ge=[];if(He.isParent()){var ne=d.calcBoundingBox(He,C[ke].xCoords,C[ke].yCoords,Fe);he.push(ne.topLeftX+ne.width/2),he.push(ne.topLeftY+ne.height/2)}else he.push(C[ke].xCoords[X]),he.push(C[ke].yCoords[X]);if(xe.isParent()){var ye=d.calcBoundingBox(xe,C[ke].xCoords,C[ke].yCoords,Fe);ge.push(ye.topLeftX+ye.width/2),ge.push(ye.topLeftY+ye.height/2)}else ge.push(C[ke].xCoords[fe]),ge.push(C[ke].yCoords[fe]);Be.edges.push({startX:he[0],startY:he[1],endX:ge[0],endY:ge[1]})}else D[ke][He.id()]&&D[ke][xe.id()]&&Be.edges.push({startX:D[ke][He.id()].getCenterX(),startY:D[ke][He.id()].getCenterY(),endX:D[ke][xe.id()].getCenterX(),endY:D[ke][xe.id()].getCenterY()})}),Be.nodes.length>0&&(q.push(Be),H.add(ke))}});var ae=O.packComponents(q,T.randomize).shifts;if(T.quality=="draft")C.forEach(function(oe,ke){var Fe=oe.xCoords.map(function(Ve){return Ve+ae[ke].dx}),Be=oe.yCoords.map(function(Ve){return Ve+ae[ke].dy});oe.xCoords=Fe,oe.yCoords=Be});else{var ue=0;H.forEach(function(oe){Object.keys(D[oe]).forEach(function(ke){var Fe=D[oe][ke];Fe.setCenter(Fe.getCenterX()+ae[ue].dx,Fe.getCenterY()+ae[ue].dy)}),ue++})}}}else{var P=T.eles.boundingBox();if(R.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),T.randomize){var F=m(T);C.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,C[0])),d.relocateComponent(R[0],D[0],T)):d.relocateComponent(R[0],C[0],T)}var ce=o(function(ke,Fe){if(T.quality=="default"||T.quality=="proof"){typeof ke=="number"&&(ke=Fe);var Be=void 0,Ve=void 0,Ge=ke.data("id");return D.forEach(function(xe){Ge in xe&&(Be={x:xe[Ge].getRect().getCenterX(),y:xe[Ge].getRect().getCenterY()},Ve=xe[Ge])}),T.nodeDimensionsIncludeLabels&&(Ve.labelWidth&&(Ve.labelPosHorizontal=="left"?Be.x+=Ve.labelWidth/2:Ve.labelPosHorizontal=="right"&&(Be.x-=Ve.labelWidth/2)),Ve.labelHeight&&(Ve.labelPosVertical=="top"?Be.y+=Ve.labelHeight/2:Ve.labelPosVertical=="bottom"&&(Be.y-=Ve.labelHeight/2))),Be==null&&(Be={x:ke.position("x"),y:ke.position("y")}),{x:Be.x,y:Be.y}}else{var He=void 0;return C.forEach(function(xe){var X=xe.nodeIndexes.get(ke.id());X!=null&&(He={x:xe.xCoords[X],y:xe.yCoords[X]})}),He==null&&(He={x:ke.position("x"),y:ke.position("y")}),{x:He.x,y:He.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var te=d.calcParentsWithoutChildren(E,L),De=L.filter(function(oe){return oe.css("display")=="none"});T.eles=L.not(De),L.nodes().not(":parent").not(De).layoutPositions(_,T,ce),te.length>0&&te.forEach(function(oe){oe.position(ce(oe))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,_=new Map,T=[],E=[],L=[],C=[],A=[],I=[],D=[],k=[],R=void 0,S=void 0,O=1e8,N=1e-9,P=m.piTol,F=m.samplingType,B=m.nodeSeparation,$=void 0,z=o(function(){for(var Te=0,se=0,Ee=!1;se<$;){Te=Math.floor(Math.random()*S),Ee=!1;for(var Ae=0;Ae=Pe;){me=Ae[Pe++];for(var vt=T[me],Ye=0;Yett&&(tt=A[$e],gt=$e)}return gt},"BFS"),j=o(function(Te){var se=void 0;if(Te){se=Math.floor(Math.random()*S),R=se;for(var Ae=0;Ae=1)break;tt=Re}for(var vt=0;vt=1)break;tt=Re}for(var Tt=0;Tt0&&(se.isParent()?T[Te].push(_.get(se.id())):T[Te].push(se.id()))})});var te=o(function(Te){var se=w.get(Te),Ee=void 0;b.get(Te).forEach(function(Ae){g.getElementById(Ae).isParent()?Ee=_.get(Ae):Ee=Ae,T[se].push(Ee),T[w.get(Ee)].push(Te)})},"_loop"),De=!0,oe=!1,ke=void 0;try{for(var Fe=b.keys()[Symbol.iterator](),Be;!(De=(Be=Fe.next()).done);De=!0){var Ve=Be.value;te(Ve)}}catch(U){oe=!0,ke=U}finally{try{!De&&Fe.return&&Fe.return()}finally{if(oe)throw ke}}S=w.size;var Ge=void 0;if(S>2){$=S{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var S1,j0,mF=M(()=>{"use strict";Kc();S1=o(t=>`${t}`,"wrapIcon"),j0={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:S1('')},server:{body:S1('')},disk:{body:S1('')},internet:{body:S1('')},cloud:{body:S1('')},unknown:RS,blank:{body:S1("")}}}});var u2e,h2e,f2e,d2e,p2e=M(()=>{"use strict";Kc();Vt();Dl();yb();mF();iS();u2e=o(async function(t,e){let r=Li("padding"),n=Li("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=nS(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:_}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),L=r+4;if(d&&(us(h)?x+=h==="L"?-L:L:b+=h==="T"?-L:L+18),y&&(us(m)?T+=m==="L"?-L:L:E+=m==="T"?-L:L+18),!d&&X0.getNode(u)?.type==="junction"&&(us(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&X0.getNode(p)?.type==="junction"&&(us(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let C=t.insert("g");if(C.insert("path").attr("d",`M ${x},${b} L ${w},${_} L${T},${E} `).attr("class","edge"),f){let A=us(h)?mb[h](x,a):x-s,I=qc(h)?mb[h](b,a):b-s;C.insert("polygon").attr("points",lF[h](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(g){let A=us(m)?mb[m](T,a):T-s,I=qc(m)?mb[m](E,a):E-s;C.insert("polygon").attr("points",lF[m](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(v){let A=rS(h,m)?"XY":us(h)?"X":"Y",I=0;A==="X"?I=Math.abs(x-T):A==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=C.append("g");if(await Si(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},de()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),A==="X")D.attr("transform","translate("+w+", "+_+")");else if(A==="Y")D.attr("transform","translate("+w+", "+_+") rotate(-90)");else if(A==="XY"){let k=gb(h,m);if(k&&Jve(k)){let R=D.node().getBoundingClientRect(),[S,O]=t2e(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*S*O*45})`);let N=D.node().getBoundingClientRect();D.attr("transform",` + translate(${w}, ${_-R.height/2}) + translate(${S*N.width/2}, ${O*N.height/2}) + rotate(${-1*S*O*45}, 0, ${R.height/2}) + `)}}}}}))},"drawEdges"),h2e=o(async function(t,e){let n=Li("padding")*.75,i=Li("fontSize"),s=Li("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Mf(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await wo(u.icon,{height:n,width:n,fallbackPrefix:j0.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Si(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},de()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),f2e=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Li("iconSize");if(n.title){let h=i.append("g");await Si(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},de()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await wo(n.icon,{height:a,width:a,fallbackPrefix:j0.prefix})}`);else if(n.iconText){s.html(`${await wo("blank",{height:a,width:a,fallbackPrefix:j0.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),d2e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Li("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Lit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-service"})})}function Dit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-junction"})})}function Nit(t,e){e.nodes().map(r=>{let n=Mf(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function Rit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Mit(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=rS(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function Iit(t){let e=t.map(i=>{let a={},s={};return Object.entries(i).forEach(([l,[u,h]])=>{a[h]||(a[h]=[]),s[u]||(s[u]=[]),a[h].push(l),s[u].push(l)}),{horiz:Object.values(a).filter(l=>l.length>1),vert:Object.values(s).filter(l=>l.length>1)}}),[r,n]=e.reduce(([i,a],{horiz:s,vert:l})=>[[...i,...s],[...a,...l]],[[],[]]);return{horizontal:r,vertical:n}}function Oit(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[oF[p]]:y,[oF[Zve(p)]]:f,gap:1.5*Li("iconSize")}))})}}}}),e}function Pit(t,e,r,n,{spatialMaps:i}){return new Promise(a=>{let s=ze("body").append("div").attr("id","cy").attr("style","display:none"),l=sl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Li("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Li("padding")}px`}}]});s.remove(),Rit(r,l),Lit(t,l),Dit(e,l),Mit(n,l);let u=Iit(i),h=Oit(i),f=l.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(d){let[p,m]=d.connectedNodes(),{parent:g}=Mf(p),{parent:y}=Mf(m);return g===y?1.5*Li("iconSize"):.5*Li("iconSize")},edgeElasticity(d){let[p,m]=d.connectedNodes(),{parent:g}=Mf(p),{parent:y}=Mf(m);return g===y?.45:.001},alignmentConstraint:u,relativePlacementConstraint:h});f.one("layoutstop",()=>{function d(p,m,g,y){let v,x,{x:b,y:w}=p,{x:_,y:T}=m;x=(y-w+(b-g)*(w-T)/(b-_))/Math.sqrt(1+Math.pow((w-T)/(b-_),2)),v=Math.sqrt(Math.pow(y-w,2)+Math.pow(g-b,2)-Math.pow(x,2));let E=Math.sqrt(Math.pow(_-b,2)+Math.pow(T-w,2));v=v/E;let L=(_-b)*(y-w)-(T-w)*(g-b);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let C=(_-b)*(g-b)+(T-w)*(y-w);switch(!0){case C>=0:C=1;break;case C<0:C=-1;break}return x=Math.abs(x)*L,v=v*C,{distances:x,weights:v}}o(d,"getSegmentWeights"),l.startBatch();for(let p of Object.values(l.edges()))if(p.data?.()){let{x:m,y:g}=p.source().position(),{x:y,y:v}=p.target().position();if(m!==y&&g!==v){let x=p.sourceEndpoint(),b=p.targetEndpoint(),{sourceDir:w}=nS(p),[_,T]=qc(w)?[x.x,b.y]:[b.x,x.y],{weights:E,distances:L}=d(x,b,_,T);p.style("segment-distances",L),p.style("segment-weights",E)}}l.endBatch(),f.run()}),f.run(),l.ready(d=>{Y.info("Ready",d),a(l)})})}var m2e,Bit,g2e,y2e=M(()=>{"use strict";Kc();kB();m2e=ka(c2e(),1);mr();ht();Hu();ni();yb();mF();iS();p2e();Mb([{name:j0.prefix,icons:j0}]);sl.use(m2e.default);o(Lit,"addServices");o(Dit,"addJunctions");o(Nit,"positionNodes");o(Rit,"addGroups");o(Mit,"addEdges");o(Iit,"getAlignments");o(Oit,"getRelativeConstraints");o(Pit,"layoutArchitecture");Bit=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=Oa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await f2e(i,p,a),d2e(i,p,s);let g=await Pit(a,s,l,u,h);await u2e(d,g),await h2e(m,g),Nit(i,g),_o(void 0,f,Li("padding"),Li("useMaxWidth"))},"draw"),g2e={draw:Bit}});var v2e={};vr(v2e,{diagram:()=>Fit});var Fit,x2e=M(()=>{"use strict";s2e();yb();l2e();y2e();Fit={parser:a2e,db:X0,renderer:g2e,styles:o2e}});var Eat={};vr(Eat,{default:()=>kat});Kc();MS();$f();var WX="c4",s7e=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),o7e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(HX(),UX));return{id:WX,diagram:t}},"loader"),l7e={id:WX,detector:s7e,loader:o7e},YX=l7e;var jie="flowchart",dPe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),pPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fT(),hT));return{id:jie,diagram:t}},"loader"),mPe={id:jie,detector:dPe,loader:pPe},Kie=mPe;var Qie="flowchart-v2",gPe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),yPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fT(),hT));return{id:Qie,diagram:t}},"loader"),vPe={id:Qie,detector:gPe,loader:yPe},Zie=vPe;var Aae="er",qPe=o(t=>/^\s*erDiagram/.test(t),"detector"),XPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Cae(),Sae));return{id:Aae,diagram:t}},"loader"),jPe={id:Aae,detector:qPe,loader:XPe},_ae=jPe;var Fue="gitGraph",x$e=o(t=>/^\s*gitGraph/.test(t),"detector"),b$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bue(),Pue));return{id:Fue,diagram:t}},"loader"),w$e={id:Fue,detector:x$e,loader:b$e},zue=w$e;var mhe="gantt",lVe=o(t=>/^\s*gantt/.test(t),"detector"),cVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(phe(),dhe));return{id:mhe,diagram:t}},"loader"),uVe={id:mhe,detector:lVe,loader:cVe},ghe=uVe;var She="info",gVe=o(t=>/^\s*info/.test(t),"detector"),yVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ehe(),khe));return{id:She,diagram:t}},"loader"),Che={id:She,detector:gVe,loader:yVe};var Phe="pie",DVe=o(t=>/^\s*pie/.test(t),"detector"),NVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ohe(),Ihe));return{id:Phe,diagram:t}},"loader"),Bhe={id:Phe,detector:DVe,loader:NVe};var Khe="quadrantChart",jVe=o(t=>/^\s*quadrantChart/.test(t),"detector"),KVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jhe(),Xhe));return{id:Khe,diagram:t}},"loader"),QVe={id:Khe,detector:jVe,loader:KVe},Qhe=QVe;var Efe="xychart",dUe=o(t=>/^\s*xychart-beta/.test(t),"detector"),pUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kfe(),Tfe));return{id:Efe,diagram:t}},"loader"),mUe={id:Efe,detector:dUe,loader:pUe},Sfe=mUe;var $fe="requirement",UUe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),HUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Gfe(),zfe));return{id:$fe,diagram:t}},"loader"),WUe={id:$fe,detector:UUe,loader:HUe},Vfe=WUe;var mde="sequence",XHe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),jHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(pde(),dde));return{id:mde,diagram:t}},"loader"),KHe={id:mde,detector:XHe,loader:jHe},gde=KHe;var Lde="class",_We=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),LWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(_de(),Ade));return{id:Lde,diagram:t}},"loader"),DWe={id:Lde,detector:_We,loader:LWe},Dde=DWe;var Mde="classDiagram",RWe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),MWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Rde(),Nde));return{id:Mde,diagram:t}},"loader"),IWe={id:Mde,detector:RWe,loader:MWe},Ide=IWe;var S0e="state",LYe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),DYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(E0e(),k0e));return{id:S0e,diagram:t}},"loader"),NYe={id:S0e,detector:LYe,loader:DYe},C0e=NYe;var L0e="stateDiagram",MYe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),IYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(_0e(),A0e));return{id:L0e,diagram:t}},"loader"),OYe={id:L0e,detector:MYe,loader:IYe},D0e=OYe;var Y0e="journey",rqe=o(t=>/^\s*journey/.test(t),"detector"),nqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(W0e(),H0e));return{id:Y0e,diagram:t}},"loader"),iqe={id:Y0e,detector:rqe,loader:nqe},q0e=iqe;ht();Hu();ni();var aqe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error +`);let n=Oa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),Zr(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),yP={draw:aqe},X0e=yP;var sqe={db:{},renderer:yP,parser:{parse:o(()=>{},"parse")}},j0e=sqe;var K0e="flowchart-elk",oqe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),lqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fT(),hT));return{id:K0e,diagram:t}},"loader"),cqe={id:K0e,detector:oqe,loader:lqe},Q0e=cqe;var kpe="timeline",_qe=o(t=>/^\s*timeline/.test(t),"detector"),Lqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Tpe(),wpe));return{id:kpe,diagram:t}},"loader"),Dqe={id:kpe,detector:_qe,loader:Lqe},Epe=Dqe;var V1e="mindmap",Ftt=o(t=>/^\s*mindmap/.test(t),"detector"),ztt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>($1e(),G1e));return{id:V1e,diagram:t}},"loader"),Gtt={id:V1e,detector:Ftt,loader:ztt},U1e=Gtt;var tye="kanban",rrt=o(t=>/^\s*kanban/.test(t),"detector"),nrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(eye(),J1e));return{id:tye,diagram:t}},"loader"),irt={id:tye,detector:rrt,loader:nrt},rye=irt;var Oye="sankey",Crt=o(t=>/^\s*sankey-beta/.test(t),"detector"),Art=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Iye(),Mye));return{id:Oye,diagram:t}},"loader"),_rt={id:Oye,detector:Crt,loader:Art},Pye=_rt;var Yye="packet",$rt=o(t=>/^\s*packet-beta/.test(t),"detector"),Vrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Wye(),Hye));return{id:Yye,diagram:t}},"loader"),qye={id:Yye,detector:$rt,loader:Vrt};var Kve="block",cit=o(t=>/^\s*block-beta/.test(t),"detector"),uit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jve(),Xve));return{id:Kve,diagram:t}},"loader"),hit={id:Kve,detector:cit,loader:uit},Qve=hit;var b2e="architecture",zit=o(t=>/^\s*architecture/.test(t),"detector"),Git=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(x2e(),v2e));return{id:b2e,diagram:t}},"loader"),$it={id:b2e,detector:zit,loader:Git},w2e=$it;$f();Vt();var T2e=!1,C1=o(()=>{T2e||(T2e=!0,Qf("error",j0e,t=>t.toLowerCase().trim()==="error"),Qf("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Bb(YX,rye,Ide,Dde,_ae,ghe,Che,Bhe,Vfe,gde,Q0e,Zie,Kie,U1e,Epe,zue,D0e,C0e,q0e,Qhe,Pye,qye,Sfe,Qve,w2e))},"addDiagrams");ht();$f();Vt();var k2e=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Gf).map(async([r,{detector:n,loader:i}])=>{if(i)try{ay(r)}catch{try{let{diagram:a,id:s}=await i();Qf(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Gf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");ht();mr();var aS="comm",sS="rule",oS="decl";var E2e="@import";var S2e="@keyframes";var C2e="@layer";var gF=Math.abs,wb=String.fromCharCode;function lS(t){return t.trim()}o(lS,"trim");function Tb(t,e,r){return t.replace(e,r)}o(Tb,"replace");function A2e(t,e,r){return t.indexOf(e,r)}o(A2e,"indexof");function K0(t,e){return t.charCodeAt(e)|0}o(K0,"charat");function If(t,e,r){return t.slice(e,r)}o(If,"substr");function yo(t){return t.length}o(yo,"strlen");function _2e(t){return t.length}o(_2e,"sizeof");function A1(t,e){return e.push(t),t}o(A1,"append");var cS=1,_1=1,L2e=0,ll=0,Di=0,D1="";function uS(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:cS,column:_1,length:s,return:"",siblings:l}}o(uS,"node");function D2e(){return Di}o(D2e,"char");function N2e(){return Di=ll>0?K0(D1,--ll):0,_1--,Di===10&&(_1=1,cS--),Di}o(N2e,"prev");function cl(){return Di=ll2||L1(Di)>3?"":" "}o(I2e,"whitespace");function O2e(t,e){for(;--e&&cl()&&!(Di<48||Di>102||Di>57&&Di<65||Di>70&&Di<97););return hS(t,kb()+(e<6&&Ju()==32&&cl()==32))}o(O2e,"escaping");function yF(t){for(;cl();)switch(Di){case t:return ll;case 34:case 39:t!==34&&t!==39&&yF(Di);break;case 40:t===41&&yF(t);break;case 92:cl();break}return ll}o(yF,"delimiter");function P2e(t,e){for(;cl()&&t+Di!==57;)if(t+Di===84&&Ju()===47)break;return"/*"+hS(e,ll-1)+"*"+wb(t===47?t:cl())}o(P2e,"commenter");function B2e(t){for(;!L1(Ju());)cl();return hS(t,ll)}o(B2e,"identifier");function G2e(t){return M2e(dS("",null,null,null,[""],t=R2e(t),0,[0],t))}o(G2e,"compile");function dS(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",_=i,T=a,E=n,L=w;v;)switch(g=b,b=cl()){case 40:if(g!=108&&K0(L,d-1)==58){A2e(L+=Tb(fS(b),"&","&\f"),"&\f",gF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:L+=fS(b);break;case 9:case 10:case 13:case 32:L+=I2e(g);break;case 92:L+=O2e(kb()-1,7);continue;case 47:switch(Ju()){case 42:case 47:A1(Vit(P2e(cl(),kb()),e,r,u),u),(L1(g||1)==5||L1(Ju()||1)==5)&&yo(L)&&If(L,-1,void 0)!==" "&&(L+=" ");break;default:L+="/"}break;case 123*y:l[h++]=yo(L)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(L=Tb(L,/\f/g,"")),m>0&&(yo(L)-d||y===0&&g===47)&&A1(m>32?z2e(L+";",n,r,d-1,u):z2e(Tb(L," ","")+";",n,r,d-2,u),u);break;case 59:L+=";";default:if(A1(E=F2e(L,e,r,h,f,i,l,w,_=[],T=[],d,a),a),b===123)if(f===0)dS(L,e,E,E,_,a,d,l,T);else switch(p===99&&K0(L,3)===110?100:p){case 100:case 108:case 109:case 115:dS(t,E,E,n&&A1(F2e(t,E,E,0,0,i,l,w,i,_=[],d,T),T),i,T,d,l,n?_:T);break;default:dS(L,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=L="",d=s;break;case 58:d=1+yo(L),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&N2e()==125)continue}switch(L+=wb(b),b*y){case 38:x=f>0?1:(L+="\f",-1);break;case 44:l[h++]=(yo(L)-1)*x,x=1;break;case 64:Ju()===45&&(L+=fS(cl())),p=Ju(),f=d=yo(w=L+=B2e(kb())),b++;break;case 45:g===45&&yo(L)==2&&(y=0)}}return a}o(dS,"parse");function F2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=_2e(m),y=0,v=0,x=0;y0?m[b]+" "+w:Tb(w,/&\f/g,m[b])))&&(u[x++]=_);return uS(t,e,r,i===0?sS:l,u,h,f,d)}o(F2e,"ruleset");function Vit(t,e,r,n){return uS(t,e,r,aS,wb(D2e()),If(t,2,-2),0,n)}o(Vit,"comment");function z2e(t,e,r,n,i){return uS(t,e,r,oS,If(t,0,n),If(t,n+1,-1),n,i)}o(z2e,"declaration");function pS(t,e){for(var r="",n=0;n{H2e.forEach(t=>{t()}),H2e=[]},"attachFunctions");ht();var Y2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");Pb();V5();function q2e(t){let e=t.match(Ob);if(!e)return{text:t,metadata:{}};let r=fm(e[1],{schema:hm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(q2e,"extractFrontMatter");hr();var Hit=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Wit=o(t=>{let{text:e,metadata:r}=q2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Yit=o(t=>{let e=Ut.detectInit(t)??{},r=Ut.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:RX(t),directive:e}},"processDirectives");function vF(t){let e=Hit(t),r=Wit(e),n=Yit(r.text),i=ws(r.config,n.directive);return t=Y2e(n.text),{code:t,title:r.title,config:i}}o(vF,"preprocessDiagram");QC();Hb();hr();function X2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(X2e,"toBase64");var qit=5e4,Xit="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",jit="sandbox",Kit="loose",Qit="http://www.w3.org/2000/svg",Zit="http://www.w3.org/1999/xlink",Jit="http://www.w3.org/1999/xhtml",eat="100%",tat="100%",rat="border:0;margin:0;",nat="margin:0",iat="allow-top-navigation-by-user-activation allow-popups",aat='The "iframe" tag is not supported by your browser.',sat=["foreignobject"],oat=["dominant-baseline"];function Z2e(t){let e=vF(t);return V1(),Hz(e.config??{}),e}o(Z2e,"processAndSetConfigs");async function lat(t,e){C1();try{let{code:r,config:n}=Z2e(t);return{diagramType:(await J2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(lat,"parse");var j2e=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),cat=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{cr(l.styles)||s.forEach(u=>{r+=j2e(l.id,u,l.styles)}),cr(l.textStyles)||(r+=j2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),uat=o((t,e,r,n)=>{let i=cat(t,r),a=F$(e,i,t.themeVariables);return pS(G2e(`${n}{${a}}`),$2e)},"createUserStyles"),hat=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=Ca(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),fat=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":tat,n=X2e(`${t}`);return``},"putIntoIFrame"),K2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Qit);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function Q2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(Q2e,"sandboxedIframe");var dat=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),pat=o(async function(t,e,r){C1();let n=Z2e(e);e=n.code;let i=Sr();Y.debug(i),e.length>(i?.maxTextSize??qit)&&(e=Xit);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let R=ze(p?l:h).node();R&&"remove"in R&&R.remove()},"removeTempElements"),d=ze("body"),p=i.securityLevel===jit,m=i.securityLevel===Kit,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=Q2e(ze(r),s);d=ze(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=ze(r);K2e(d,t,u,`font-family: ${g}`,Zit)}else{if(dat(document,t,u,s),p){let k=Q2e(ze("body"),s);d=ze(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=ze("body");K2e(d,t,u)}let y,v;try{y=await N1.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await N1.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,_=w.firstChild,T=y.renderer.getClasses?.(e,y),E=uat(i,b,T,a),L=document.createElement("style");L.innerHTML=E,w.insertBefore(L,_);try{await y.renderer.draw(e,t,dx,y)}catch(k){throw i.suppressErrorRendering?f():X0e.draw(e,t,dx),k}let C=d.select(`${h} svg`),A=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();gat(b,C,A,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Jit);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=hat(D,p,xr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=fat(D,k)}else m||(D=ah.sanitize(D,{ADD_TAGS:sat,ADD_ATTR:oat,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(W2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function mat(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),$z(e),e?.theme&&e.theme in ko?e.themeVariables=ko[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=ko.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?QS(e):ZS();M1(r.logLevel),C1()}o(mat,"initialize");var J2e=o((t,e={})=>{let{code:r}=vF(t);return N1.fromText(r,e)},"getDiagramFromText");function gat(t,e,r,n){V2e(e,t),U2e(e,r,n,e.attr("id"))}o(gat,"addA11yInfo");var Of=Object.freeze({render:pat,parse:lat,getDiagramFromText:J2e,initialize:mat,getConfig:Sr,setConfig:Yb,getSiteConfig:ZS,updateSiteConfig:Vz,reset:o(()=>{V1()},"reset"),globalReset:o(()=>{V1(ih)},"globalReset"),defaultConfig:ih});M1(Sr().logLevel);V1(Sr());Fv();hr();var yat=o((t,e,r)=>{Y.warn(t),i9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),exe=o(async function(t={querySelector:".mermaid"}){try{await vat(t)}catch(e){if(i9(e)&&Y.error(e.str),eh.parseError&&eh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),vat=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Of.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Of.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Ut.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=Ib(Ut.entityDecode(s)).trim().replace(//gi,"
    ");let f=Ut.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await ixe(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){yat(d,l,eh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),txe=o(function(t){Of.initialize(t)},"initialize"),xat=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&txe(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await exe(n)},"init"),bat=o(async(t,{lazyLoad:e=!0}={})=>{C1(),Bb(...t),e===!1&&await k2e()},"registerExternalDiagrams"),rxe=o(function(){if(eh.startOnLoad){let{startOnLoad:t}=Of.getConfig();t&&eh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",rxe,!1)}var wat=o(function(t){eh.parseError=t},"setParseErrorHandler"),mS=[],xF=!1,nxe=o(async()=>{if(!xF){for(xF=!0;mS.length>0;){let t=mS.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}xF=!1}},"executeQueue"),Tat=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Of.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),eh.parseError?.(l),s(l),n(l)})}),"performCall");mS.push(i),nxe().catch(n)}),"parse"),ixe=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Of.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),eh.parseError?.(u),l(u),i(u)})}),"performCall");mS.push(a),nxe().catch(i)}),"render"),eh={startOnLoad:!0,mermaidAPI:Of,parse:Tat,render:ixe,init:xat,run:exe,registerExternalDiagrams:bat,registerLayoutLoaders:CD,initialize:txe,parseError:void 0,contentLoaded:rxe,setParseErrorHandler:wat,detectType:np,registerIconPacks:Mb},kat=eh;return pxe(Eat);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.es.mjs: + (*! @license DOMPurify 3.2.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.1/LICENSE *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) +*/ +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; diff --git a/assets/external/user-images.githubusercontent.com/159488/34072418-8f5ba396-e287-11e7-9de7-8bc7482ac23c.png b/assets/external/user-images.githubusercontent.com/159488/34072418-8f5ba396-e287-11e7-9de7-8bc7482ac23c.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8022f669eb879006d9bb660ca94d34a90f914d GIT binary patch literal 30561 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 literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.88dd0f4e.min.js b/assets/javascripts/bundle.88dd0f4e.min.js index fb8f31090..6f7aea018 100644 --- a/assets/javascripts/bundle.88dd0f4e.min.js +++ b/assets/javascripts/bundle.88dd0f4e.min.js @@ -11,6 +11,6 @@ * Licensed MIT © Zeno Rocha */(function(t,r){typeof It=="object"&&typeof Yr=="object"?Yr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof It=="object"?It.ClipboardJS=r():t.ClipboardJS=r()})(It,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return Ui}});var a=i(279),s=i.n(a),p=i(370),c=i.n(p),l=i(817),f=i.n(l);function u(V){try{return document.execCommand(V)}catch(A){return!1}}var d=function(A){var M=f()(A);return u("cut"),M},y=d;function L(V){var A=document.documentElement.getAttribute("dir")==="rtl",M=document.createElement("textarea");M.style.fontSize="12pt",M.style.border="0",M.style.padding="0",M.style.margin="0",M.style.position="absolute",M.style[A?"right":"left"]="-9999px";var F=window.pageYOffset||document.documentElement.scrollTop;return M.style.top="".concat(F,"px"),M.setAttribute("readonly",""),M.value=V,M}var X=function(A,M){var F=L(A);M.container.appendChild(F);var D=f()(F);return u("copy"),F.remove(),D},te=function(A){var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},F="";return typeof A=="string"?F=X(A,M):A instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(A==null?void 0:A.type)?F=X(A.value,M):(F=f()(A),u("copy")),F},J=te;function k(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?k=function(M){return typeof M}:k=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},k(V)}var ft=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=A.action,F=M===void 0?"copy":M,D=A.container,Y=A.target,$e=A.text;if(F!=="copy"&&F!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Y!==void 0)if(Y&&k(Y)==="object"&&Y.nodeType===1){if(F==="copy"&&Y.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(F==="cut"&&(Y.hasAttribute("readonly")||Y.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if($e)return J($e,{container:D});if(Y)return F==="cut"?y(Y):J(Y,{container:D})},qe=ft;function Fe(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Fe=function(M){return typeof M}:Fe=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},Fe(V)}function ki(V,A){if(!(V instanceof A))throw new TypeError("Cannot call a class as a function")}function no(V,A){for(var M=0;M0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof D.action=="function"?D.action:this.defaultAction,this.target=typeof D.target=="function"?D.target:this.defaultTarget,this.text=typeof D.text=="function"?D.text:this.defaultText,this.container=Fe(D.container)==="object"?D.container:document.body}},{key:"listenClick",value:function(D){var Y=this;this.listener=c()(D,"click",function($e){return Y.onClick($e)})}},{key:"onClick",value:function(D){var Y=D.delegateTarget||D.currentTarget,$e=this.action(Y)||"copy",Dt=qe({action:$e,container:this.container,target:this.target(Y),text:this.text(Y)});this.emit(Dt?"success":"error",{action:$e,text:Dt,trigger:Y,clearSelection:function(){Y&&Y.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(D){return vr("action",D)}},{key:"defaultTarget",value:function(D){var Y=vr("target",D);if(Y)return document.querySelector(Y)}},{key:"defaultText",value:function(D){return vr("text",D)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(D){var Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return J(D,Y)}},{key:"cut",value:function(D){return y(D)}},{key:"isSupported",value:function(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Y=typeof D=="string"?[D]:D,$e=!!document.queryCommandSupported;return Y.forEach(function(Dt){$e=$e&&!!document.queryCommandSupported(Dt)}),$e}}]),M}(s()),Ui=Fi},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,p){for(;s&&s.nodeType!==n;){if(typeof s.matches=="function"&&s.matches(p))return s;s=s.parentNode}}o.exports=a},438:function(o,n,i){var a=i(828);function s(l,f,u,d,y){var L=c.apply(this,arguments);return l.addEventListener(u,L,y),{destroy:function(){l.removeEventListener(u,L,y)}}}function p(l,f,u,d,y){return typeof l.addEventListener=="function"?s.apply(null,arguments):typeof u=="function"?s.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(L){return s(L,f,u,d,y)}))}function c(l,f,u,d){return function(y){y.delegateTarget=a(y.target,f),y.delegateTarget&&d.call(l,y)}}o.exports=p},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(o,n,i){var a=i(879),s=i(438);function p(u,d,y){if(!u&&!d&&!y)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(y))throw new TypeError("Third argument must be a Function");if(a.node(u))return c(u,d,y);if(a.nodeList(u))return l(u,d,y);if(a.string(u))return f(u,d,y);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(u,d,y){return u.addEventListener(d,y),{destroy:function(){u.removeEventListener(d,y)}}}function l(u,d,y){return Array.prototype.forEach.call(u,function(L){L.addEventListener(d,y)}),{destroy:function(){Array.prototype.forEach.call(u,function(L){L.removeEventListener(d,y)})}}}function f(u,d,y){return s(document.body,u,d,y)}o.exports=p},817:function(o){function n(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var p=window.getSelection(),c=document.createRange();c.selectNodeContents(i),p.removeAllRanges(),p.addRange(c),a=p.toString()}return a}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,a,s){var p=this.e||(this.e={});return(p[i]||(p[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var p=this;function c(){p.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),p=0,c=s.length;for(p;p0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function N(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],a;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(s){a={error:s}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i}function q(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||p(d,L)})},y&&(n[d]=y(n[d])))}function p(d,y){try{c(o[d](y))}catch(L){u(i[0][3],L)}}function c(d){d.value instanceof nt?Promise.resolve(d.value.v).then(l,f):u(i[0][2],d)}function l(d){p("next",d)}function f(d){p("throw",d)}function u(d,y){d(y),i.shift(),i.length&&p(i[0][0],i[0][1])}}function uo(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof he=="function"?he(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(a){return new Promise(function(s,p){a=e[i](a),n(s,p,a.done,a.value)})}}function n(i,a,s,p){Promise.resolve(p).then(function(c){i({value:c,done:s})},a)}}function H(e){return typeof e=="function"}function ut(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var zt=ut(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: `+r.map(function(o,n){return n+1+") "+o.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=r}});function Qe(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ue=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=he(a),p=s.next();!p.done;p=s.next()){var c=p.value;c.remove(this)}}catch(L){t={error:L}}finally{try{p&&!p.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(H(l))try{l()}catch(L){i=L instanceof zt?L.errors:[L]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=he(f),d=u.next();!d.done;d=u.next()){var y=d.value;try{ho(y)}catch(L){i=i!=null?i:[],L instanceof zt?i=q(q([],N(i)),N(L.errors)):i.push(L)}}}catch(L){o={error:L}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new zt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ho(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Qe(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Qe(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=Ue.EMPTY;function qt(e){return e instanceof Ue||e&&"closed"in e&&H(e.remove)&&H(e.add)&&H(e.unsubscribe)}function ho(e){H(e)?e():e.unsubscribe()}var Pe={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var dt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,a=n.isStopped,s=n.observers;return i||a?Tr:(this.currentObservers=null,s.push(r),new Ue(function(){o.currentObservers=null,Qe(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,a=o.isStopped;n?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new j;return r.source=this,r},t.create=function(r,o){return new To(r,o)},t}(j);var To=function(e){oe(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:Tr},t}(g);var _r=function(e){oe(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t}(g);var At={now:function(){return(At.delegate||Date).now()},delegate:void 0};var Ct=function(e){oe(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=At);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,a=o._infiniteTimeWindow,s=o._timestampProvider,p=o._windowTime;n||(i.push(r),!a&&i.push(s.now()+p)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,a=n._buffer,s=a.slice(),p=0;p0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t}(gt);var Lo=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(yt);var kr=new Lo(Oo);var Mo=function(e){oe(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=vt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var a=r.actions;o!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==o&&(vt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(gt);var _o=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(yt);var me=new _o(Mo);var S=new j(function(e){return e.complete()});function Yt(e){return e&&H(e.schedule)}function Hr(e){return e[e.length-1]}function Xe(e){return H(Hr(e))?e.pop():void 0}function ke(e){return Yt(Hr(e))?e.pop():void 0}function Bt(e,t){return typeof Hr(e)=="number"?e.pop():t}var xt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Gt(e){return H(e==null?void 0:e.then)}function Jt(e){return H(e[bt])}function Xt(e){return Symbol.asyncIterator&&H(e==null?void 0:e[Symbol.asyncIterator])}function Zt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var er=Zi();function tr(e){return H(e==null?void 0:e[er])}function rr(e){return fo(this,arguments,function(){var r,o,n,i;return Nt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,nt(r.read())];case 3:return o=a.sent(),n=o.value,i=o.done,i?[4,nt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,nt(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function or(e){return H(e==null?void 0:e.getReader)}function U(e){if(e instanceof j)return e;if(e!=null){if(Jt(e))return ea(e);if(xt(e))return ta(e);if(Gt(e))return ra(e);if(Xt(e))return Ao(e);if(tr(e))return oa(e);if(or(e))return na(e)}throw Zt(e)}function ea(e){return new j(function(t){var r=e[bt]();if(H(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function ta(e){return new j(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?b(function(n,i){return e(n,i,o)}):le,Te(1),r?De(t):Qo(function(){return new ir}))}}function jr(e){return e<=0?function(){return S}:E(function(t,r){var o=[];t.subscribe(T(r,function(n){o.push(n),e=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new g}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,p=s===void 0?!0:s;return function(c){var l,f,u,d=0,y=!1,L=!1,X=function(){f==null||f.unsubscribe(),f=void 0},te=function(){X(),l=u=void 0,y=L=!1},J=function(){var k=l;te(),k==null||k.unsubscribe()};return E(function(k,ft){d++,!L&&!y&&X();var qe=u=u!=null?u:r();ft.add(function(){d--,d===0&&!L&&!y&&(f=Ur(J,p))}),qe.subscribe(ft),!l&&d>0&&(l=new at({next:function(Fe){return qe.next(Fe)},error:function(Fe){L=!0,X(),f=Ur(te,n,Fe),qe.error(Fe)},complete:function(){y=!0,X(),f=Ur(te,a),qe.complete()}}),U(k).subscribe(l))})(c)}}function Ur(e,t){for(var r=[],o=2;oe.next(document)),e}function P(e,t=document){return Array.from(t.querySelectorAll(e))}function R(e,t=document){let r=fe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function fe(e,t=document){return t.querySelector(e)||void 0}function Ie(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var wa=O(h(document.body,"focusin"),h(document.body,"focusout")).pipe(_e(1),Q(void 0),m(()=>Ie()||document.body),G(1));function et(e){return wa.pipe(m(t=>e.contains(t)),K())}function $t(e,t){return C(()=>O(h(e,"mouseenter").pipe(m(()=>!0)),h(e,"mouseleave").pipe(m(()=>!1))).pipe(t?Ht(r=>Le(+!r*t)):le,Q(e.matches(":hover"))))}function Jo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Jo(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)Jo(o,n);return o}function sr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Tt(e){let t=x("script",{src:e});return C(()=>(document.head.appendChild(t),O(h(t,"load"),h(t,"error").pipe(v(()=>$r(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),_(()=>document.head.removeChild(t)),Te(1))))}var Xo=new g,Ta=C(()=>typeof ResizeObserver=="undefined"?Tt("https://unpkg.com/resize-observer-polyfill"):I(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>Xo.next(t)))),v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function ce(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return Ta.pipe(w(r=>r.observe(t)),v(r=>Xo.pipe(b(o=>o.target===t),_(()=>r.unobserve(t)))),m(()=>ce(e)),Q(ce(e)))}function St(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Zo(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Ve(e){return{x:e.offsetLeft,y:e.offsetTop}}function en(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function tn(e){return O(h(window,"load"),h(window,"resize")).pipe(Me(0,me),m(()=>Ve(e)),Q(Ve(e)))}function pr(e){return{x:e.scrollLeft,y:e.scrollTop}}function Ne(e){return O(h(e,"scroll"),h(window,"scroll"),h(window,"resize")).pipe(Me(0,me),m(()=>pr(e)),Q(pr(e)))}var rn=new g,Sa=C(()=>I(new IntersectionObserver(e=>{for(let t of e)rn.next(t)},{threshold:0}))).pipe(v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function tt(e){return Sa.pipe(w(t=>t.observe(e)),v(t=>rn.pipe(b(({target:r})=>r===e),_(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function on(e,t=16){return Ne(e).pipe(m(({y:r})=>{let o=ce(e),n=St(e);return r>=n.height-o.height-t}),K())}var lr={drawer:R("[data-md-toggle=drawer]"),search:R("[data-md-toggle=search]")};function nn(e){return lr[e].checked}function Je(e,t){lr[e].checked!==t&&lr[e].click()}function ze(e){let t=lr[e];return h(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function Oa(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function La(){return O(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function an(){let e=h(window,"keydown").pipe(b(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:nn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),b(({mode:t,type:r})=>{if(t==="global"){let o=Ie();if(typeof o!="undefined")return!Oa(o,r)}return!0}),pe());return La().pipe(v(t=>t?S:e))}function ye(){return new URL(location.href)}function lt(e,t=!1){if(B("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function sn(){return new g}function cn(){return location.hash.slice(1)}function pn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Ma(e){return O(h(window,"hashchange"),e).pipe(m(cn),Q(cn()),b(t=>t.length>0),G(1))}function ln(e){return Ma(e).pipe(m(t=>fe(`[id="${t}"]`)),b(t=>typeof t!="undefined"))}function Pt(e){let t=matchMedia(e);return ar(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function mn(){let e=matchMedia("print");return O(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function Nr(e,t){return e.pipe(v(r=>r?t():S))}function zr(e,t){return new j(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let a=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+a*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function je(e,t){return zr(e,t).pipe(v(r=>r.text()),m(r=>JSON.parse(r)),G(1))}function fn(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),G(1))}function un(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),G(1))}function dn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function hn(){return O(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(dn),Q(dn()))}function bn(){return{width:innerWidth,height:innerHeight}}function vn(){return h(window,"resize",{passive:!0}).pipe(m(bn),Q(bn()))}function gn(){return z([hn(),vn()]).pipe(m(([e,t])=>({offset:e,size:t})),G(1))}function mr(e,{viewport$:t,header$:r}){let o=t.pipe(ee("size")),n=z([o,r]).pipe(m(()=>Ve(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:a,size:s},{x:p,y:c}])=>({offset:{x:a.x-p,y:a.y-c+i},size:s})))}function _a(e){return h(e,"message",t=>t.data)}function Aa(e){let t=new g;return t.subscribe(r=>e.postMessage(r)),t}function yn(e,t=new Worker(e)){let r=_a(t),o=Aa(t),n=new g;n.subscribe(o);let i=o.pipe(Z(),ie(!0));return n.pipe(Z(),Re(r.pipe(W(i))),pe())}var Ca=R("#__config"),Ot=JSON.parse(Ca.textContent);Ot.base=`${new URL(Ot.base,ye())}`;function xe(){return Ot}function B(e){return Ot.features.includes(e)}function Ee(e,t){return typeof t!="undefined"?Ot.translations[e].replace("#",t.toString()):Ot.translations[e]}function Se(e,t=document){return R(`[data-md-component=${e}]`,t)}function ae(e,t=document){return P(`[data-md-component=${e}]`,t)}function ka(e){let t=R(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>R(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function xn(e){if(!B("announce.dismiss")||!e.childElementCount)return S;if(!e.hidden){let t=R(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return C(()=>{let t=new g;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),ka(e).pipe(w(r=>t.next(r)),_(()=>t.complete()),m(r=>$({ref:e},r)))})}function Ha(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function En(e,t){let r=new g;return r.subscribe(({hidden:o})=>{e.hidden=o}),Ha(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))}function Rt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function wn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function Tn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function Sn(e){return x("button",{class:"md-clipboard md-icon",title:Ee("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}var Ln=Mt(qr());function Qr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(p=>!e.terms[p]).reduce((p,c)=>[...p,x("del",null,(0,Ln.default)(c))," "],[]).slice(0,-1),i=xe(),a=new URL(e.location,i.base);B("search.highlight")&&a.searchParams.set("h",Object.entries(e.terms).filter(([,p])=>p).reduce((p,[c])=>`${p} ${c}`.trim(),""));let{tags:s}=xe();return x("a",{href:`${a}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&x("nav",{class:"md-tags"},e.tags.map(p=>{let c=s?p in s?`md-tag-icon md-tag--${s[p]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${c}`},p)})),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Ee("search.result.term.missing"),": ",...n)))}function Mn(e){let t=e[0].score,r=[...e],o=xe(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),a=r.findIndex(l=>l.scoreQr(l,1)),...p.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,p.length>0&&p.length===1?Ee("search.result.more.one"):Ee("search.result.more.other",p.length))),...p.map(l=>Qr(l,1)))]:[]];return x("li",{class:"md-search-result__item"},c)}function _n(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?sr(r):r)))}function Kr(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function An(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Ra(e){var o;let t=xe(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Cn(e,t){var o;let r=xe();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Ee("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Ra)))}var Ia=0;function ja(e){let t=z([et(e),$t(e)]).pipe(m(([o,n])=>o||n),K()),r=C(()=>Zo(e)).pipe(ne(Ne),pt(1),He(t),m(()=>en(e)));return t.pipe(Ae(o=>o),v(()=>z([t,r])),m(([o,n])=>({active:o,offset:n})),pe())}function Fa(e,t){let{content$:r,viewport$:o}=t,n=`__tooltip2_${Ia++}`;return C(()=>{let i=new g,a=new _r(!1);i.pipe(Z(),ie(!1)).subscribe(a);let s=a.pipe(Ht(c=>Le(+!c*250,kr)),K(),v(c=>c?r:S),w(c=>c.id=n),pe());z([i.pipe(m(({active:c})=>c)),s.pipe(v(c=>$t(c,250)),Q(!1))]).pipe(m(c=>c.some(l=>l))).subscribe(a);let p=a.pipe(b(c=>c),re(s,o),m(([c,l,{size:f}])=>{let u=e.getBoundingClientRect(),d=u.width/2;if(l.role==="tooltip")return{x:d,y:8+u.height};if(u.y>=f.height/2){let{height:y}=ce(l);return{x:d,y:-16-y}}else return{x:d,y:16+u.height}}));return z([s,i,p]).subscribe(([c,{offset:l},f])=>{c.style.setProperty("--md-tooltip-host-x",`${l.x}px`),c.style.setProperty("--md-tooltip-host-y",`${l.y}px`),c.style.setProperty("--md-tooltip-x",`${f.x}px`),c.style.setProperty("--md-tooltip-y",`${f.y}px`),c.classList.toggle("md-tooltip2--top",f.y<0),c.classList.toggle("md-tooltip2--bottom",f.y>=0)}),a.pipe(b(c=>c),re(s,(c,l)=>l),b(c=>c.role==="tooltip")).subscribe(c=>{let l=ce(R(":scope > *",c));c.style.setProperty("--md-tooltip-width",`${l.width}px`),c.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(K(),ve(me),re(s)).subscribe(([c,l])=>{l.classList.toggle("md-tooltip2--active",c)}),z([a.pipe(b(c=>c)),s]).subscribe(([c,l])=>{l.role==="dialog"?(e.setAttribute("aria-controls",n),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",n)}),a.pipe(b(c=>!c)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),ja(e).pipe(w(c=>i.next(c)),_(()=>i.complete()),m(c=>$({ref:e},c)))})}function mt(e,{viewport$:t},r=document.body){return Fa(e,{content$:new j(o=>{let n=e.title,i=wn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t})}function Ua(e,t){let r=C(()=>z([tn(e),Ne(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:a,height:s}=ce(e);return{x:o-i.x+a/2,y:n-i.y+s/2}}));return et(e).pipe(v(o=>r.pipe(m(n=>({active:o,offset:n})),Te(+!o||1/0))))}function kn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return C(()=>{let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),tt(e).pipe(W(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),O(i.pipe(b(({active:s})=>s)),i.pipe(_e(250),b(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Me(16,me)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(W(a),b(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),h(n,"mousedown").pipe(W(a),re(i)).subscribe(([s,{active:p}])=>{var c;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(p){s.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(c=Ie())==null||c.blur()}}),r.pipe(W(a),b(s=>s===o),Ge(125)).subscribe(()=>e.focus()),Ua(e,t).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function Wa(e){return e.tagName==="CODE"?P(".c, .c1, .cm",e):[e]}function Da(e){let t=[];for(let r of Wa(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,p]=a;if(typeof p=="undefined"){let c=i.splitText(a.index);i=c.splitText(s.length),t.push(c)}else{i.textContent=s,t.push(i);break}}}}return t}function Hn(e,t){t.append(...Array.from(e.childNodes))}function fr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,a=new Map;for(let s of Da(t)){let[,p]=s.textContent.match(/\((\d+)\)/);fe(`:scope > li:nth-child(${p})`,e)&&(a.set(p,Tn(p,i)),s.replaceWith(a.get(p)))}return a.size===0?S:C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=[];for(let[l,f]of a)c.push([R(".md-typeset",f),R(`:scope > li:nth-child(${l})`,e)]);return o.pipe(W(p)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of c)l?Hn(f,u):Hn(u,f)}),O(...[...a].map(([,l])=>kn(l,t,{target$:r}))).pipe(_(()=>s.complete()),pe())})}function $n(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return $n(t)}}function Pn(e,t){return C(()=>{let r=$n(e);return typeof r!="undefined"?fr(r,e,t):S})}var Rn=Mt(Br());var Va=0;function In(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return In(t)}}function Na(e){return ge(e).pipe(m(({width:t})=>({scrollable:St(e).width>t})),ee("scrollable"))}function jn(e,t){let{matches:r}=matchMedia("(hover)"),o=C(()=>{let n=new g,i=n.pipe(jr(1));n.subscribe(({scrollable:c})=>{c&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[];if(Rn.default.isSupported()&&(e.closest(".copy")||B("content.code.copy")&&!e.closest(".no-copy"))){let c=e.closest("pre");c.id=`__code_${Va++}`;let l=Sn(c.id);c.insertBefore(l,e),B("content.tooltips")&&a.push(mt(l,{viewport$}))}let s=e.closest(".highlight");if(s instanceof HTMLElement){let c=In(s);if(typeof c!="undefined"&&(s.classList.contains("annotate")||B("content.code.annotate"))){let l=fr(c,e,t);a.push(ge(s).pipe(W(i),m(({width:f,height:u})=>f&&u),K(),v(f=>f?l:S)))}}return P(":scope > span[id]",e).length&&e.classList.add("md-code__content"),Na(e).pipe(w(c=>n.next(c)),_(()=>n.complete()),m(c=>$({ref:e},c)),Re(...a))});return B("content.lazy")?tt(e).pipe(b(n=>n),Te(1),v(()=>o)):o}function za(e,{target$:t,print$:r}){let o=!0;return O(t.pipe(m(n=>n.closest("details:not([open])")),b(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(b(n=>n||!o),w(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Fn(e,t){return C(()=>{let r=new g;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),za(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}var Un=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityTitleText{fill:var(--md-mermaid-label-fg-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var Gr,Qa=0;function Ka(){return typeof mermaid=="undefined"||mermaid instanceof Element?Tt("https://unpkg.com/mermaid@11/dist/mermaid.min.js"):I(void 0)}function Wn(e){return e.classList.remove("mermaid"),Gr||(Gr=Ka().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Un,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),G(1))),Gr.subscribe(()=>co(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Qa++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),a=r.attachShadow({mode:"closed"});a.innerHTML=n,e.replaceWith(r),i==null||i(a)})),Gr.pipe(m(()=>({ref:e})))}var Dn=x("table");function Vn(e){return e.replaceWith(Dn),Dn.replaceWith(An(e)),I({ref:e})}function Ya(e){let t=e.find(r=>r.checked)||e[0];return O(...e.map(r=>h(r,"change").pipe(m(()=>R(`label[for="${r.id}"]`))))).pipe(Q(R(`label[for="${t.id}"]`)),m(r=>({active:r})))}function Nn(e,{viewport$:t,target$:r}){let o=R(".tabbed-labels",e),n=P(":scope > input",e),i=Kr("prev");e.append(i);let a=Kr("next");return e.append(a),C(()=>{let s=new g,p=s.pipe(Z(),ie(!0));z([s,ge(e),tt(e)]).pipe(W(p),Me(1,me)).subscribe({next([{active:c},l]){let f=Ve(c),{width:u}=ce(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let d=pr(o);(f.xd.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([Ne(o),ge(o)]).pipe(W(p)).subscribe(([c,l])=>{let f=St(o);i.hidden=c.x<16,a.hidden=c.x>f.width-l.width-16}),O(h(i,"click").pipe(m(()=>-1)),h(a,"click").pipe(m(()=>1))).pipe(W(p)).subscribe(c=>{let{width:l}=ce(o);o.scrollBy({left:l*c,behavior:"smooth"})}),r.pipe(W(p),b(c=>n.includes(c))).subscribe(c=>c.click()),o.classList.add("tabbed-labels--linked");for(let c of n){let l=R(`label[for="${c.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),h(l.firstElementChild,"click").pipe(W(p),b(f=>!(f.metaKey||f.ctrlKey)),w(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return B("content.tabs.link")&&s.pipe(Ce(1),re(t)).subscribe(([{active:c},{offset:l}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let y of P("[data-tabs]"))for(let L of P(":scope > input",y)){let X=R(`label[for="${L.id}"]`);if(X!==c&&X.innerText.trim()===f){X.setAttribute("data-md-switching",""),L.click();break}}window.scrollTo({top:e.offsetTop-u});let d=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...d])])}}),s.pipe(W(p)).subscribe(()=>{for(let c of P("audio, video",e))c.pause()}),Ya(n).pipe(w(c=>s.next(c)),_(()=>s.complete()),m(c=>$({ref:e},c)))}).pipe(Ke(se))}function zn(e,{viewport$:t,target$:r,print$:o}){return O(...P(".annotate:not(.highlight)",e).map(n=>Pn(n,{target$:r,print$:o})),...P("pre:not(.mermaid) > code",e).map(n=>jn(n,{target$:r,print$:o})),...P("pre.mermaid",e).map(n=>Wn(n)),...P("table:not([class])",e).map(n=>Vn(n)),...P("details",e).map(n=>Fn(n,{target$:r,print$:o})),...P("[data-tabs]",e).map(n=>Nn(n,{viewport$:t,target$:r})),...P("[title]",e).filter(()=>B("content.tooltips")).map(n=>mt(n,{viewport$:t})))}function Ba(e,{alert$:t}){return t.pipe(v(r=>O(I(!0),I(!1).pipe(Ge(2e3))).pipe(m(o=>({message:r,active:o})))))}function qn(e,t){let r=R(".md-typeset",e);return C(()=>{let o=new g;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),Ba(e,t).pipe(w(n=>o.next(n)),_(()=>o.complete()),m(n=>$({ref:e},n)))})}var Ga=0;function Ja(e,t){document.body.append(e);let{width:r}=ce(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=cr(t),n=typeof o!="undefined"?Ne(o):I({x:0,y:0}),i=O(et(t),$t(t)).pipe(K());return z([i,n]).pipe(m(([a,s])=>{let{x:p,y:c}=Ve(t),l=ce(t),f=t.closest("table");return f&&t.parentElement&&(p+=f.offsetLeft+t.parentElement.offsetLeft,c+=f.offsetTop+t.parentElement.offsetTop),{active:a,offset:{x:p-s.x+l.width/2-r/2,y:c-s.y+l.height+8}}}))}function Qn(e){let t=e.title;if(!t.length)return S;let r=`__tooltip_${Ga++}`,o=Rt(r,"inline"),n=R(".md-typeset",o);return n.innerHTML=t,C(()=>{let i=new g;return i.subscribe({next({offset:a}){o.style.setProperty("--md-tooltip-x",`${a.x}px`),o.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),O(i.pipe(b(({active:a})=>a)),i.pipe(_e(250),b(({active:a})=>!a))).subscribe({next({active:a}){a?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe(Me(16,me)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?o.style.setProperty("--md-tooltip-0",`${-a}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),Ja(o,e).pipe(w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))}).pipe(Ke(se))}function Xa({viewport$:e}){if(!B("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Be(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),K()),o=ze("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),K(),v(n=>n?r:I(!1)),Q(!1))}function Kn(e,t){return C(()=>z([ge(e),Xa(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),K((r,o)=>r.height===o.height&&r.hidden===o.hidden),G(1))}function Yn(e,{header$:t,main$:r}){return C(()=>{let o=new g,n=o.pipe(Z(),ie(!0));o.pipe(ee("active"),He(t)).subscribe(([{active:a},{hidden:s}])=>{e.classList.toggle("md-header--shadow",a&&!s),e.hidden=s});let i=ue(P("[title]",e)).pipe(b(()=>B("content.tooltips")),ne(a=>Qn(a)));return r.subscribe(o),t.pipe(W(n),m(a=>$({ref:e},a)),Re(i.pipe(W(n))))})}function Za(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=ce(e);return{active:o>=n}}),ee("active"))}function Bn(e,t){return C(()=>{let r=new g;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=fe(".md-content h1");return typeof o=="undefined"?S:Za(o,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))})}function Gn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),K()),n=o.pipe(v(()=>ge(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ee("bottom"))));return z([o,n,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:p},size:{height:c}}])=>(c=Math.max(0,c-Math.max(0,a-p,i)-Math.max(0,c+p-s)),{offset:a-i,height:c,active:a-i<=p})),K((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function es(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return I(...e).pipe(ne(o=>h(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),G(1))}function Jn(e){let t=P("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=Pt("(prefers-color-scheme: light)");return C(()=>{let i=new g;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),p=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=p.getAttribute("data-md-color-scheme"),a.color.primary=p.getAttribute("data-md-color-primary"),a.color.accent=p.getAttribute("data-md-color-accent")}for(let[s,p]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,p);for(let s=0;sa.key==="Enter"),re(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(m(()=>{let a=Se("header"),s=window.getComputedStyle(a);return o.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(p=>(+p).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(ve(se)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),es(t).pipe(W(n.pipe(Ce(1))),ct(),w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))})}function Xn(e,{progress$:t}){return C(()=>{let r=new g;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(w(o=>r.next({value:o})),_(()=>r.complete()),m(o=>({ref:e,value:o})))})}var Jr=Mt(Br());function ts(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function Zn({alert$:e}){Jr.default.isSupported()&&new j(t=>{new Jr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||ts(R(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>Ee("clipboard.copied"))).subscribe(e)}function ei(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function rs(e,t){let r=new Map;for(let o of P("url",e)){let n=R("loc",o),i=[ei(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let a of P("[rel=alternate]",o)){let s=a.getAttribute("href");s!=null&&i.push(ei(new URL(s),t))}}return r}function ur(e){return un(new URL("sitemap.xml",e)).pipe(m(t=>rs(t,new URL(e))),de(()=>I(new Map)))}function os(e,t){if(!(e.target instanceof Element))return S;let r=e.target.closest("a");if(r===null)return S;if(r.target||e.metaKey||e.ctrlKey)return S;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),I(new URL(r.href))):S}function ti(e){let t=new Map;for(let r of P(":scope > *",e.head))t.set(r.outerHTML,r);return t}function ri(e){for(let t of P("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return I(e)}function ns(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...B("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=fe(o),i=fe(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=ti(document);for(let[o,n]of ti(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Se("container");return We(P("script",r)).pipe(v(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new j(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),S}),Z(),ie(document))}function oi({location$:e,viewport$:t,progress$:r}){let o=xe();if(location.protocol==="file:")return S;let n=ur(o.base);I(document).subscribe(ri);let i=h(document.body,"click").pipe(He(n),v(([p,c])=>os(p,c)),pe()),a=h(window,"popstate").pipe(m(ye),pe());i.pipe(re(t)).subscribe(([p,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",p)}),O(i,a).subscribe(e);let s=e.pipe(ee("pathname"),v(p=>fn(p,{progress$:r}).pipe(de(()=>(lt(p,!0),S)))),v(ri),v(ns),pe());return O(s.pipe(re(e,(p,c)=>c)),s.pipe(v(()=>e),ee("pathname"),v(()=>e),ee("hash")),e.pipe(K((p,c)=>p.pathname===c.pathname&&p.hash===c.hash),v(()=>i),w(()=>history.back()))).subscribe(p=>{var c,l;history.state!==null||!p.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",pn(p.hash),history.scrollRestoration="manual")}),e.subscribe(()=>{history.scrollRestoration="manual"}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),t.pipe(ee("offset"),_e(100)).subscribe(({offset:p})=>{history.replaceState(p,"")}),s}var ni=Mt(qr());function ii(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,a)=>`${i}${a}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(0,ni.default)(a).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function jt(e){return e.type===1}function dr(e){return e.type===3}function ai(e,t){let r=yn(e);return O(I(location.protocol!=="file:"),ze("search")).pipe(Ae(o=>o),v(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:B("search.suggest")}}})),r}function si(e){var l;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:o,currentBaseURL:n}=e,i=(l=Xr(n))==null?void 0:l.pathname;if(i===void 0)return;let a=ss(o.pathname,i);if(a===void 0)return;let s=ps(t.keys());if(!t.has(s))return;let p=Xr(a,s);if(!p||!t.has(p.href))return;let c=Xr(a,r);if(c)return c.hash=o.hash,c.search=o.search,c}function Xr(e,t){try{return new URL(e,t)}catch(r){return}}function ss(e,t){if(e.startsWith(t))return e.slice(t.length)}function cs(e,t){let r=Math.min(e.length,t.length),o;for(o=0;oS)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:a,aliases:s})=>a===i||s.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),v(n=>h(document.body,"click").pipe(b(i=>!i.metaKey&&!i.ctrlKey),re(o),v(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&n.has(s.href)){let p=s.href;return!i.target.closest(".md-version")&&n.get(p)===a?S:(i.preventDefault(),I(new URL(p)))}}return S}),v(i=>ur(i).pipe(m(a=>{var s;return(s=si({selectedVersionSitemap:a,selectedVersionBaseURL:i,currentLocation:ye(),currentBaseURL:t.base}))!=null?s:i})))))).subscribe(n=>lt(n,!0)),z([r,o]).subscribe(([n,i])=>{R(".md-header__topic").appendChild(Cn(n,i))}),e.pipe(v(()=>o)).subscribe(n=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let s=((a=t.version)==null?void 0:a.default)||"latest";Array.isArray(s)||(s=[s]);e:for(let p of s)for(let c of n.aliases.concat(n.version))if(new RegExp(p,"i").test(c)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ae("outdated"))s.hidden=!1})}function ls(e,{worker$:t}){let{searchParams:r}=ye();r.has("q")&&(Je("search",!0),e.value=r.get("q"),e.focus(),ze("search").pipe(Ae(i=>!i)).subscribe(()=>{let i=ye();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=et(e),n=O(t.pipe(Ae(jt)),h(e,"keyup"),o).pipe(m(()=>e.value),K());return z([n,o]).pipe(m(([i,a])=>({value:i,focus:a})),G(1))}function pi(e,{worker$:t}){let r=new g,o=r.pipe(Z(),ie(!0));z([t.pipe(Ae(jt)),r],(i,a)=>a).pipe(ee("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ee("focus")).subscribe(({focus:i})=>{i&&Je("search",i)}),h(e.form,"reset").pipe(W(o)).subscribe(()=>e.focus());let n=R("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),ls(e,{worker$:t}).pipe(w(i=>r.next(i)),_(()=>r.complete()),m(i=>$({ref:e},i)),G(1))}function li(e,{worker$:t,query$:r}){let o=new g,n=on(e.parentElement).pipe(b(Boolean)),i=e.parentElement,a=R(":scope > :first-child",e),s=R(":scope > :last-child",e);ze("search").subscribe(l=>s.setAttribute("role",l?"list":"presentation")),o.pipe(re(r),Wr(t.pipe(Ae(jt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:a.textContent=f.length?Ee("search.result.none"):Ee("search.result.placeholder");break;case 1:a.textContent=Ee("search.result.one");break;default:let u=sr(l.length);a.textContent=Ee("search.result.other",u)}});let p=o.pipe(w(()=>s.innerHTML=""),v(({items:l})=>O(I(...l.slice(0,10)),I(...l.slice(10)).pipe(Be(4),Vr(n),v(([f])=>f)))),m(Mn),pe());return p.subscribe(l=>s.appendChild(l)),p.pipe(ne(l=>{let f=fe("details",l);return typeof f=="undefined"?S:h(f,"toggle").pipe(W(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(b(dr),m(({data:l})=>l)).pipe(w(l=>o.next(l)),_(()=>o.complete()),m(l=>$({ref:e},l)))}function ms(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=ye();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function mi(e,t){let r=new g,o=r.pipe(Z(),ie(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(W(o)).subscribe(n=>n.preventDefault()),ms(e,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))}function fi(e,{worker$:t,keyboard$:r}){let o=new g,n=Se("search-query"),i=O(h(n,"keydown"),h(n,"focus")).pipe(ve(se),m(()=>n.value),K());return o.pipe(He(i),m(([{suggest:s},p])=>{let c=p.split(/([\s-]+)/);if(s!=null&&s.length&&c[c.length-1]){let l=s[s.length-1];l.startsWith(c[c.length-1])&&(c[c.length-1]=l)}else c.length=0;return c})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(b(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(b(dr),m(({data:s})=>s)).pipe(w(s=>o.next(s)),_(()=>o.complete()),m(()=>({ref:e})))}function ui(e,{index$:t,keyboard$:r}){let o=xe();try{let n=ai(o.search,t),i=Se("search-query",e),a=Se("search-result",e);h(e,"click").pipe(b(({target:p})=>p instanceof Element&&!!p.closest("a"))).subscribe(()=>Je("search",!1)),r.pipe(b(({mode:p})=>p==="search")).subscribe(p=>{let c=Ie();switch(p.type){case"Enter":if(c===i){let l=new Map;for(let f of P(":first-child [href]",a)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}p.claim()}break;case"Escape":case"Tab":Je("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")i.focus();else{let l=[i,...P(":not(details) > [href], summary, details[open] [href]",a)],f=Math.max(0,(Math.max(0,l.indexOf(c))+l.length+(p.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}p.claim();break;default:i!==Ie()&&i.focus()}}),r.pipe(b(({mode:p})=>p==="global")).subscribe(p=>{switch(p.type){case"f":case"s":case"/":i.focus(),i.select(),p.claim();break}});let s=pi(i,{worker$:n});return O(s,li(a,{worker$:n,query$:s})).pipe(Re(...ae("search-share",e).map(p=>mi(p,{query$:s})),...ae("search-suggest",e).map(p=>fi(p,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,Ye}}function di(e,{index$:t,location$:r}){return z([t,r.pipe(Q(ye()),b(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>ii(o.config)(n.searchParams.get("h"))),m(o=>{var a;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let p=s.textContent,c=o(p);c.length>p.length&&n.set(s,c)}for(let[s,p]of n){let{childNodes:c}=x("span",null,p);s.replaceWith(...Array.from(c))}return{ref:e,nodes:n}}))}function fs(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(n,Math.max(0,s-i))-n,{height:a,locked:s>=i+n})),K((i,a)=>i.height===a.height&&i.locked===a.locked))}function Zr(e,o){var n=o,{header$:t}=n,r=so(n,["header$"]);let i=R(".md-sidebar__scrollwrap",e),{y:a}=Ve(i);return C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=s.pipe(Me(0,me));return c.pipe(re(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ae()).subscribe(()=>{for(let l of P(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2})}}}),ue(P("label[tabindex]",e)).pipe(ne(l=>h(l,"click").pipe(ve(se),m(()=>l),W(p)))).subscribe(l=>{let f=R(`[id="${l.htmlFor}"]`);R(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),fs(e,r).pipe(w(l=>s.next(l)),_(()=>s.complete()),m(l=>$({ref:e},l)))})}function hi(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return st(je(`${r}/releases/latest`).pipe(de(()=>S),m(o=>({version:o.tag_name})),De({})),je(r).pipe(de(()=>S),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(o=>({repositories:o.public_repos})),De({}))}}function bi(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return st(je(`${r}/releases/permalink/latest`).pipe(de(()=>S),m(({tag_name:o})=>({version:o})),De({})),je(r).pipe(de(()=>S),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}function vi(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return hi(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return bi(r,o)}return S}var us;function ds(e){return us||(us=C(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(ae("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return S}return vi(e.href).pipe(w(o=>__md_set("__source",o,sessionStorage)))}).pipe(de(()=>S),b(t=>Object.keys(t).length>0),m(t=>({facts:t})),G(1)))}function gi(e){let t=R(":scope > :last-child",e);return C(()=>{let r=new g;return r.subscribe(({facts:o})=>{t.appendChild(_n(o)),t.classList.add("md-source__repository--active")}),ds(e).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function hs(e,{viewport$:t,header$:r}){return ge(document.body).pipe(v(()=>mr(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ee("hidden"))}function yi(e,t){return C(()=>{let r=new g;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(B("navigation.tabs.sticky")?I({hidden:!1}):hs(e,t)).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function bs(e,{viewport$:t,header$:r}){let o=new Map,n=P(".md-nav__link",e);for(let s of n){let p=decodeURIComponent(s.hash.substring(1)),c=fe(`[id="${p}"]`);typeof c!="undefined"&&o.set(s,c)}let i=r.pipe(ee("height"),m(({height:s})=>{let p=Se("main"),c=R(":scope > :first-child",p);return s+.8*(c.offsetTop-p.offsetTop)}),pe());return ge(document.body).pipe(ee("height"),v(s=>C(()=>{let p=[];return I([...o].reduce((c,[l,f])=>{for(;p.length&&o.get(p[p.length-1]).tagName>=f.tagName;)p.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return c.set([...p=[...p,l]].reverse(),u)},new Map))}).pipe(m(p=>new Map([...p].sort(([,c],[,l])=>c-l))),He(i),v(([p,c])=>t.pipe(Fr(([l,f],{offset:{y:u},size:d})=>{let y=u+d.height>=Math.floor(s.height);for(;f.length;){let[,L]=f[0];if(L-c=u&&!y)f=[l.pop(),...f];else break}return[l,f]},[[],[...p]]),K((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([s,p])=>({prev:s.map(([c])=>c),next:p.map(([c])=>c)})),Q({prev:[],next:[]}),Be(2,1),m(([s,p])=>s.prev.length{let i=new g,a=i.pipe(Z(),ie(!0));if(i.subscribe(({prev:s,next:p})=>{for(let[c]of p)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",c===s.length-1)}),B("toc.follow")){let s=O(t.pipe(_e(1),m(()=>{})),t.pipe(_e(250),m(()=>"smooth")));i.pipe(b(({prev:p})=>p.length>0),He(o.pipe(ve(se))),re(s)).subscribe(([[{prev:p}],c])=>{let[l]=p[p.length-1];if(l.offsetHeight){let f=cr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2,behavior:c})}}})}return B("navigation.tracking")&&t.pipe(W(a),ee("offset"),_e(250),Ce(1),W(n.pipe(Ce(1))),ct({delay:250}),re(i)).subscribe(([,{prev:s}])=>{let p=ye(),c=s[s.length-1];if(c&&c.length){let[l]=c,{hash:f}=new URL(l.href);p.hash!==f&&(p.hash=f,history.replaceState({},"",`${p}`))}else p.hash="",history.replaceState({},"",`${p}`)}),bs(e,{viewport$:t,header$:r}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function vs(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:a}})=>a),Be(2,1),m(([a,s])=>a>s&&s>0),K()),i=r.pipe(m(({active:a})=>a));return z([i,n]).pipe(m(([a,s])=>!(a&&s)),K(),W(o.pipe(Ce(1))),ie(!0),ct({delay:250}),m(a=>({hidden:a})))}function Ei(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(W(a),ee("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),h(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),vs(e,{viewport$:t,main$:o,target$:n}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))}function wi({document$:e,viewport$:t}){e.pipe(v(()=>P(".md-ellipsis")),ne(r=>tt(r).pipe(W(e.pipe(Ce(1))),b(o=>o),m(()=>r),Te(1))),b(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,B("content.tooltips")?mt(n,{viewport$:t}).pipe(W(e.pipe(Ce(1))),_(()=>n.removeAttribute("title"))):S})).subscribe(),B("content.tooltips")&&e.pipe(v(()=>P(".md-status")),ne(r=>mt(r,{viewport$:t}))).subscribe()}function Ti({document$:e,tablet$:t}){e.pipe(v(()=>P(".md-toggle--indeterminate")),w(r=>{r.indeterminate=!0,r.checked=!1}),ne(r=>h(r,"change").pipe(Dr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),re(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function gs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Si({document$:e}){e.pipe(v(()=>P("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),b(gs),ne(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Oi({viewport$:e,tablet$:t}){z([ze("search"),t]).pipe(m(([r,o])=>r&&!o),v(r=>I(r).pipe(Ge(r?400:100))),re(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ys(){return location.protocol==="file:"?Tt(`${new URL("search/search_index.js",eo.base)}`).pipe(m(()=>__index),G(1)):je(new URL("search/search_index.json",eo.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ot=Go(),Ut=sn(),Lt=ln(Ut),to=an(),Oe=gn(),hr=Pt("(min-width: 960px)"),Mi=Pt("(min-width: 1220px)"),_i=mn(),eo=xe(),Ai=document.forms.namedItem("search")?ys():Ye,ro=new g;Zn({alert$:ro});var oo=new g;B("navigation.instant")&&oi({location$:Ut,viewport$:Oe,progress$:oo}).subscribe(ot);var Li;((Li=eo.version)==null?void 0:Li.provider)==="mike"&&ci({document$:ot});O(Ut,Lt).pipe(Ge(125)).subscribe(()=>{Je("drawer",!1),Je("search",!1)});to.pipe(b(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=fe("link[rel=prev]");typeof t!="undefined"&<(t);break;case"n":case".":let r=fe("link[rel=next]");typeof r!="undefined"&<(r);break;case"Enter":let o=Ie();o instanceof HTMLLabelElement&&o.click()}});wi({viewport$:Oe,document$:ot});Ti({document$:ot,tablet$:hr});Si({document$:ot});Oi({viewport$:Oe,tablet$:hr});var rt=Kn(Se("header"),{viewport$:Oe}),Ft=ot.pipe(m(()=>Se("main")),v(e=>Gn(e,{viewport$:Oe,header$:rt})),G(1)),xs=O(...ae("consent").map(e=>En(e,{target$:Lt})),...ae("dialog").map(e=>qn(e,{alert$:ro})),...ae("palette").map(e=>Jn(e)),...ae("progress").map(e=>Xn(e,{progress$:oo})),...ae("search").map(e=>ui(e,{index$:Ai,keyboard$:to})),...ae("source").map(e=>gi(e))),Es=C(()=>O(...ae("announce").map(e=>xn(e)),...ae("content").map(e=>zn(e,{viewport$:Oe,target$:Lt,print$:_i})),...ae("content").map(e=>B("search.highlight")?di(e,{index$:Ai,location$:Ut}):S),...ae("header").map(e=>Yn(e,{viewport$:Oe,header$:rt,main$:Ft})),...ae("header-title").map(e=>Bn(e,{viewport$:Oe,header$:rt})),...ae("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Nr(Mi,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft})):Nr(hr,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft}))),...ae("tabs").map(e=>yi(e,{viewport$:Oe,header$:rt})),...ae("toc").map(e=>xi(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})),...ae("top").map(e=>Ei(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})))),Ci=ot.pipe(v(()=>Es),Re(xs),G(1));Ci.subscribe();window.document$=ot;window.location$=Ut;window.target$=Lt;window.keyboard$=to;window.viewport$=Oe;window.tablet$=hr;window.screen$=Mi;window.print$=_i;window.alert$=ro;window.progress$=oo;window.component$=Ci;})(); + `):"",this.name="UnsubscriptionError",this.errors=r}});function Qe(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ue=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=he(a),p=s.next();!p.done;p=s.next()){var c=p.value;c.remove(this)}}catch(L){t={error:L}}finally{try{p&&!p.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(H(l))try{l()}catch(L){i=L instanceof zt?L.errors:[L]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=he(f),d=u.next();!d.done;d=u.next()){var y=d.value;try{ho(y)}catch(L){i=i!=null?i:[],L instanceof zt?i=q(q([],N(i)),N(L.errors)):i.push(L)}}}catch(L){o={error:L}}finally{try{d&&!d.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new zt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ho(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Qe(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Qe(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=Ue.EMPTY;function qt(e){return e instanceof Ue||e&&"closed"in e&&H(e.remove)&&H(e.add)&&H(e.unsubscribe)}function ho(e){H(e)?e():e.unsubscribe()}var Pe={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var dt={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,a=n.isStopped,s=n.observers;return i||a?Tr:(this.currentObservers=null,s.push(r),new Ue(function(){o.currentObservers=null,Qe(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,a=o.isStopped;n?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new j;return r.source=this,r},t.create=function(r,o){return new To(r,o)},t}(j);var To=function(e){oe(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:Tr},t}(g);var _r=function(e){oe(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t}(g);var At={now:function(){return(At.delegate||Date).now()},delegate:void 0};var Ct=function(e){oe(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=At);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,a=o._infiniteTimeWindow,s=o._timestampProvider,p=o._windowTime;n||(i.push(r),!a&&i.push(s.now()+p)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,a=n._buffer,s=a.slice(),p=0;p0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t}(gt);var Lo=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(yt);var kr=new Lo(Oo);var Mo=function(e){oe(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=vt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var a=r.actions;o!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==o&&(vt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(gt);var _o=function(e){oe(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(yt);var me=new _o(Mo);var S=new j(function(e){return e.complete()});function Yt(e){return e&&H(e.schedule)}function Hr(e){return e[e.length-1]}function Xe(e){return H(Hr(e))?e.pop():void 0}function ke(e){return Yt(Hr(e))?e.pop():void 0}function Bt(e,t){return typeof Hr(e)=="number"?e.pop():t}var xt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Gt(e){return H(e==null?void 0:e.then)}function Jt(e){return H(e[bt])}function Xt(e){return Symbol.asyncIterator&&H(e==null?void 0:e[Symbol.asyncIterator])}function Zt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var er=Zi();function tr(e){return H(e==null?void 0:e[er])}function rr(e){return fo(this,arguments,function(){var r,o,n,i;return Nt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,nt(r.read())];case 3:return o=a.sent(),n=o.value,i=o.done,i?[4,nt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,nt(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function or(e){return H(e==null?void 0:e.getReader)}function U(e){if(e instanceof j)return e;if(e!=null){if(Jt(e))return ea(e);if(xt(e))return ta(e);if(Gt(e))return ra(e);if(Xt(e))return Ao(e);if(tr(e))return oa(e);if(or(e))return na(e)}throw Zt(e)}function ea(e){return new j(function(t){var r=e[bt]();if(H(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function ta(e){return new j(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?b(function(n,i){return e(n,i,o)}):le,Te(1),r?De(t):Qo(function(){return new ir}))}}function jr(e){return e<=0?function(){return S}:E(function(t,r){var o=[];t.subscribe(T(r,function(n){o.push(n),e=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new g}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,p=s===void 0?!0:s;return function(c){var l,f,u,d=0,y=!1,L=!1,X=function(){f==null||f.unsubscribe(),f=void 0},te=function(){X(),l=u=void 0,y=L=!1},J=function(){var k=l;te(),k==null||k.unsubscribe()};return E(function(k,ft){d++,!L&&!y&&X();var qe=u=u!=null?u:r();ft.add(function(){d--,d===0&&!L&&!y&&(f=Ur(J,p))}),qe.subscribe(ft),!l&&d>0&&(l=new at({next:function(Fe){return qe.next(Fe)},error:function(Fe){L=!0,X(),f=Ur(te,n,Fe),qe.error(Fe)},complete:function(){y=!0,X(),f=Ur(te,a),qe.complete()}}),U(k).subscribe(l))})(c)}}function Ur(e,t){for(var r=[],o=2;oe.next(document)),e}function P(e,t=document){return Array.from(t.querySelectorAll(e))}function R(e,t=document){let r=fe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function fe(e,t=document){return t.querySelector(e)||void 0}function Ie(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var wa=O(h(document.body,"focusin"),h(document.body,"focusout")).pipe(_e(1),Q(void 0),m(()=>Ie()||document.body),G(1));function et(e){return wa.pipe(m(t=>e.contains(t)),K())}function $t(e,t){return C(()=>O(h(e,"mouseenter").pipe(m(()=>!0)),h(e,"mouseleave").pipe(m(()=>!1))).pipe(t?Ht(r=>Le(+!r*t)):le,Q(e.matches(":hover"))))}function Jo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Jo(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)Jo(o,n);return o}function sr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Tt(e){let t=x("script",{src:e});return C(()=>(document.head.appendChild(t),O(h(t,"load"),h(t,"error").pipe(v(()=>$r(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),_(()=>document.head.removeChild(t)),Te(1))))}var Xo=new g,Ta=C(()=>typeof ResizeObserver=="undefined"?Tt("https://unpkg.com/resize-observer-polyfill"):I(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>Xo.next(t)))),v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function ce(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return Ta.pipe(w(r=>r.observe(t)),v(r=>Xo.pipe(b(o=>o.target===t),_(()=>r.unobserve(t)))),m(()=>ce(e)),Q(ce(e)))}function St(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Zo(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Ve(e){return{x:e.offsetLeft,y:e.offsetTop}}function en(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function tn(e){return O(h(window,"load"),h(window,"resize")).pipe(Me(0,me),m(()=>Ve(e)),Q(Ve(e)))}function pr(e){return{x:e.scrollLeft,y:e.scrollTop}}function Ne(e){return O(h(e,"scroll"),h(window,"scroll"),h(window,"resize")).pipe(Me(0,me),m(()=>pr(e)),Q(pr(e)))}var rn=new g,Sa=C(()=>I(new IntersectionObserver(e=>{for(let t of e)rn.next(t)},{threshold:0}))).pipe(v(e=>O(Ye,I(e)).pipe(_(()=>e.disconnect()))),G(1));function tt(e){return Sa.pipe(w(t=>t.observe(e)),v(t=>rn.pipe(b(({target:r})=>r===e),_(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function on(e,t=16){return Ne(e).pipe(m(({y:r})=>{let o=ce(e),n=St(e);return r>=n.height-o.height-t}),K())}var lr={drawer:R("[data-md-toggle=drawer]"),search:R("[data-md-toggle=search]")};function nn(e){return lr[e].checked}function Je(e,t){lr[e].checked!==t&&lr[e].click()}function ze(e){let t=lr[e];return h(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function Oa(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function La(){return O(h(window,"compositionstart").pipe(m(()=>!0)),h(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function an(){let e=h(window,"keydown").pipe(b(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:nn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),b(({mode:t,type:r})=>{if(t==="global"){let o=Ie();if(typeof o!="undefined")return!Oa(o,r)}return!0}),pe());return La().pipe(v(t=>t?S:e))}function ye(){return new URL(location.href)}function lt(e,t=!1){if(B("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function sn(){return new g}function cn(){return location.hash.slice(1)}function pn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Ma(e){return O(h(window,"hashchange"),e).pipe(m(cn),Q(cn()),b(t=>t.length>0),G(1))}function ln(e){return Ma(e).pipe(m(t=>fe(`[id="${t}"]`)),b(t=>typeof t!="undefined"))}function Pt(e){let t=matchMedia(e);return ar(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function mn(){let e=matchMedia("print");return O(h(window,"beforeprint").pipe(m(()=>!0)),h(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function Nr(e,t){return e.pipe(v(r=>r?t():S))}function zr(e,t){return new j(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let a=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+a*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function je(e,t){return zr(e,t).pipe(v(r=>r.text()),m(r=>JSON.parse(r)),G(1))}function fn(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),G(1))}function un(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),G(1))}function dn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function hn(){return O(h(window,"scroll",{passive:!0}),h(window,"resize",{passive:!0})).pipe(m(dn),Q(dn()))}function bn(){return{width:innerWidth,height:innerHeight}}function vn(){return h(window,"resize",{passive:!0}).pipe(m(bn),Q(bn()))}function gn(){return z([hn(),vn()]).pipe(m(([e,t])=>({offset:e,size:t})),G(1))}function mr(e,{viewport$:t,header$:r}){let o=t.pipe(ee("size")),n=z([o,r]).pipe(m(()=>Ve(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:a,size:s},{x:p,y:c}])=>({offset:{x:a.x-p,y:a.y-c+i},size:s})))}function _a(e){return h(e,"message",t=>t.data)}function Aa(e){let t=new g;return t.subscribe(r=>e.postMessage(r)),t}function yn(e,t=new Worker(e)){let r=_a(t),o=Aa(t),n=new g;n.subscribe(o);let i=o.pipe(Z(),ie(!0));return n.pipe(Z(),Re(r.pipe(W(i))),pe())}var Ca=R("#__config"),Ot=JSON.parse(Ca.textContent);Ot.base=`${new URL(Ot.base,ye())}`;function xe(){return Ot}function B(e){return Ot.features.includes(e)}function Ee(e,t){return typeof t!="undefined"?Ot.translations[e].replace("#",t.toString()):Ot.translations[e]}function Se(e,t=document){return R(`[data-md-component=${e}]`,t)}function ae(e,t=document){return P(`[data-md-component=${e}]`,t)}function ka(e){let t=R(".md-typeset > :first-child",e);return h(t,"click",{once:!0}).pipe(m(()=>R(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function xn(e){if(!B("announce.dismiss")||!e.childElementCount)return S;if(!e.hidden){let t=R(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return C(()=>{let t=new g;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),ka(e).pipe(w(r=>t.next(r)),_(()=>t.complete()),m(r=>$({ref:e},r)))})}function Ha(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function En(e,t){let r=new g;return r.subscribe(({hidden:o})=>{e.hidden=o}),Ha(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))}function Rt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function wn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function Tn(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Rt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function Sn(e){return x("button",{class:"md-clipboard md-icon",title:Ee("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}var Ln=Mt(qr());function Qr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(p=>!e.terms[p]).reduce((p,c)=>[...p,x("del",null,(0,Ln.default)(c))," "],[]).slice(0,-1),i=xe(),a=new URL(e.location,i.base);B("search.highlight")&&a.searchParams.set("h",Object.entries(e.terms).filter(([,p])=>p).reduce((p,[c])=>`${p} ${c}`.trim(),""));let{tags:s}=xe();return x("a",{href:`${a}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&x("nav",{class:"md-tags"},e.tags.map(p=>{let c=s?p in s?`md-tag-icon md-tag--${s[p]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${c}`},p)})),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Ee("search.result.term.missing"),": ",...n)))}function Mn(e){let t=e[0].score,r=[...e],o=xe(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),a=r.findIndex(l=>l.scoreQr(l,1)),...p.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,p.length>0&&p.length===1?Ee("search.result.more.one"):Ee("search.result.more.other",p.length))),...p.map(l=>Qr(l,1)))]:[]];return x("li",{class:"md-search-result__item"},c)}function _n(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?sr(r):r)))}function Kr(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function An(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Ra(e){var o;let t=xe(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Cn(e,t){var o;let r=xe();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Ee("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Ra)))}var Ia=0;function ja(e){let t=z([et(e),$t(e)]).pipe(m(([o,n])=>o||n),K()),r=C(()=>Zo(e)).pipe(ne(Ne),pt(1),He(t),m(()=>en(e)));return t.pipe(Ae(o=>o),v(()=>z([t,r])),m(([o,n])=>({active:o,offset:n})),pe())}function Fa(e,t){let{content$:r,viewport$:o}=t,n=`__tooltip2_${Ia++}`;return C(()=>{let i=new g,a=new _r(!1);i.pipe(Z(),ie(!1)).subscribe(a);let s=a.pipe(Ht(c=>Le(+!c*250,kr)),K(),v(c=>c?r:S),w(c=>c.id=n),pe());z([i.pipe(m(({active:c})=>c)),s.pipe(v(c=>$t(c,250)),Q(!1))]).pipe(m(c=>c.some(l=>l))).subscribe(a);let p=a.pipe(b(c=>c),re(s,o),m(([c,l,{size:f}])=>{let u=e.getBoundingClientRect(),d=u.width/2;if(l.role==="tooltip")return{x:d,y:8+u.height};if(u.y>=f.height/2){let{height:y}=ce(l);return{x:d,y:-16-y}}else return{x:d,y:16+u.height}}));return z([s,i,p]).subscribe(([c,{offset:l},f])=>{c.style.setProperty("--md-tooltip-host-x",`${l.x}px`),c.style.setProperty("--md-tooltip-host-y",`${l.y}px`),c.style.setProperty("--md-tooltip-x",`${f.x}px`),c.style.setProperty("--md-tooltip-y",`${f.y}px`),c.classList.toggle("md-tooltip2--top",f.y<0),c.classList.toggle("md-tooltip2--bottom",f.y>=0)}),a.pipe(b(c=>c),re(s,(c,l)=>l),b(c=>c.role==="tooltip")).subscribe(c=>{let l=ce(R(":scope > *",c));c.style.setProperty("--md-tooltip-width",`${l.width}px`),c.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(K(),ve(me),re(s)).subscribe(([c,l])=>{l.classList.toggle("md-tooltip2--active",c)}),z([a.pipe(b(c=>c)),s]).subscribe(([c,l])=>{l.role==="dialog"?(e.setAttribute("aria-controls",n),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",n)}),a.pipe(b(c=>!c)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),ja(e).pipe(w(c=>i.next(c)),_(()=>i.complete()),m(c=>$({ref:e},c)))})}function mt(e,{viewport$:t},r=document.body){return Fa(e,{content$:new j(o=>{let n=e.title,i=wn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t})}function Ua(e,t){let r=C(()=>z([tn(e),Ne(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:a,height:s}=ce(e);return{x:o-i.x+a/2,y:n-i.y+s/2}}));return et(e).pipe(v(o=>r.pipe(m(n=>({active:o,offset:n})),Te(+!o||1/0))))}function kn(e,t,{target$:r}){let[o,n]=Array.from(e.children);return C(()=>{let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),tt(e).pipe(W(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),O(i.pipe(b(({active:s})=>s)),i.pipe(_e(250),b(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Me(16,me)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),h(n,"click").pipe(W(a),b(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),h(n,"mousedown").pipe(W(a),re(i)).subscribe(([s,{active:p}])=>{var c;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(p){s.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(c=Ie())==null||c.blur()}}),r.pipe(W(a),b(s=>s===o),Ge(125)).subscribe(()=>e.focus()),Ua(e,t).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function Wa(e){return e.tagName==="CODE"?P(".c, .c1, .cm",e):[e]}function Da(e){let t=[];for(let r of Wa(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,p]=a;if(typeof p=="undefined"){let c=i.splitText(a.index);i=c.splitText(s.length),t.push(c)}else{i.textContent=s,t.push(i);break}}}}return t}function Hn(e,t){t.append(...Array.from(e.childNodes))}function fr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,a=new Map;for(let s of Da(t)){let[,p]=s.textContent.match(/\((\d+)\)/);fe(`:scope > li:nth-child(${p})`,e)&&(a.set(p,Tn(p,i)),s.replaceWith(a.get(p)))}return a.size===0?S:C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=[];for(let[l,f]of a)c.push([R(".md-typeset",f),R(`:scope > li:nth-child(${l})`,e)]);return o.pipe(W(p)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of c)l?Hn(f,u):Hn(u,f)}),O(...[...a].map(([,l])=>kn(l,t,{target$:r}))).pipe(_(()=>s.complete()),pe())})}function $n(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return $n(t)}}function Pn(e,t){return C(()=>{let r=$n(e);return typeof r!="undefined"?fr(r,e,t):S})}var Rn=Mt(Br());var Va=0;function In(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return In(t)}}function Na(e){return ge(e).pipe(m(({width:t})=>({scrollable:St(e).width>t})),ee("scrollable"))}function jn(e,t){let{matches:r}=matchMedia("(hover)"),o=C(()=>{let n=new g,i=n.pipe(jr(1));n.subscribe(({scrollable:c})=>{c&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[];if(Rn.default.isSupported()&&(e.closest(".copy")||B("content.code.copy")&&!e.closest(".no-copy"))){let c=e.closest("pre");c.id=`__code_${Va++}`;let l=Sn(c.id);c.insertBefore(l,e),B("content.tooltips")&&a.push(mt(l,{viewport$}))}let s=e.closest(".highlight");if(s instanceof HTMLElement){let c=In(s);if(typeof c!="undefined"&&(s.classList.contains("annotate")||B("content.code.annotate"))){let l=fr(c,e,t);a.push(ge(s).pipe(W(i),m(({width:f,height:u})=>f&&u),K(),v(f=>f?l:S)))}}return P(":scope > span[id]",e).length&&e.classList.add("md-code__content"),Na(e).pipe(w(c=>n.next(c)),_(()=>n.complete()),m(c=>$({ref:e},c)),Re(...a))});return B("content.lazy")?tt(e).pipe(b(n=>n),Te(1),v(()=>o)):o}function za(e,{target$:t,print$:r}){let o=!0;return O(t.pipe(m(n=>n.closest("details:not([open])")),b(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(b(n=>n||!o),w(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Fn(e,t){return C(()=>{let r=new g;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),za(e,t).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}var Un=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.flowchartTitleText{fill:var(--md-mermaid-label-fg-color)}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel p,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel p{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}.classDiagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}.statediagramTitleText{fill:var(--md-mermaid-label-fg-color)}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityTitleText{fill:var(--md-mermaid-label-fg-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}text:not([class]):last-child{fill:var(--md-mermaid-label-fg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var Gr,Qa=0;function Ka(){return typeof mermaid=="undefined"||mermaid instanceof Element?Tt("https://json.nlohmann.me/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js"):I(void 0)}function Wn(e){return e.classList.remove("mermaid"),Gr||(Gr=Ka().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Un,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),G(1))),Gr.subscribe(()=>co(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Qa++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),a=r.attachShadow({mode:"closed"});a.innerHTML=n,e.replaceWith(r),i==null||i(a)})),Gr.pipe(m(()=>({ref:e})))}var Dn=x("table");function Vn(e){return e.replaceWith(Dn),Dn.replaceWith(An(e)),I({ref:e})}function Ya(e){let t=e.find(r=>r.checked)||e[0];return O(...e.map(r=>h(r,"change").pipe(m(()=>R(`label[for="${r.id}"]`))))).pipe(Q(R(`label[for="${t.id}"]`)),m(r=>({active:r})))}function Nn(e,{viewport$:t,target$:r}){let o=R(".tabbed-labels",e),n=P(":scope > input",e),i=Kr("prev");e.append(i);let a=Kr("next");return e.append(a),C(()=>{let s=new g,p=s.pipe(Z(),ie(!0));z([s,ge(e),tt(e)]).pipe(W(p),Me(1,me)).subscribe({next([{active:c},l]){let f=Ve(c),{width:u}=ce(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let d=pr(o);(f.xd.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([Ne(o),ge(o)]).pipe(W(p)).subscribe(([c,l])=>{let f=St(o);i.hidden=c.x<16,a.hidden=c.x>f.width-l.width-16}),O(h(i,"click").pipe(m(()=>-1)),h(a,"click").pipe(m(()=>1))).pipe(W(p)).subscribe(c=>{let{width:l}=ce(o);o.scrollBy({left:l*c,behavior:"smooth"})}),r.pipe(W(p),b(c=>n.includes(c))).subscribe(c=>c.click()),o.classList.add("tabbed-labels--linked");for(let c of n){let l=R(`label[for="${c.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),h(l.firstElementChild,"click").pipe(W(p),b(f=>!(f.metaKey||f.ctrlKey)),w(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return B("content.tabs.link")&&s.pipe(Ce(1),re(t)).subscribe(([{active:c},{offset:l}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let y of P("[data-tabs]"))for(let L of P(":scope > input",y)){let X=R(`label[for="${L.id}"]`);if(X!==c&&X.innerText.trim()===f){X.setAttribute("data-md-switching",""),L.click();break}}window.scrollTo({top:e.offsetTop-u});let d=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...d])])}}),s.pipe(W(p)).subscribe(()=>{for(let c of P("audio, video",e))c.pause()}),Ya(n).pipe(w(c=>s.next(c)),_(()=>s.complete()),m(c=>$({ref:e},c)))}).pipe(Ke(se))}function zn(e,{viewport$:t,target$:r,print$:o}){return O(...P(".annotate:not(.highlight)",e).map(n=>Pn(n,{target$:r,print$:o})),...P("pre:not(.mermaid) > code",e).map(n=>jn(n,{target$:r,print$:o})),...P("pre.mermaid",e).map(n=>Wn(n)),...P("table:not([class])",e).map(n=>Vn(n)),...P("details",e).map(n=>Fn(n,{target$:r,print$:o})),...P("[data-tabs]",e).map(n=>Nn(n,{viewport$:t,target$:r})),...P("[title]",e).filter(()=>B("content.tooltips")).map(n=>mt(n,{viewport$:t})))}function Ba(e,{alert$:t}){return t.pipe(v(r=>O(I(!0),I(!1).pipe(Ge(2e3))).pipe(m(o=>({message:r,active:o})))))}function qn(e,t){let r=R(".md-typeset",e);return C(()=>{let o=new g;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),Ba(e,t).pipe(w(n=>o.next(n)),_(()=>o.complete()),m(n=>$({ref:e},n)))})}var Ga=0;function Ja(e,t){document.body.append(e);let{width:r}=ce(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=cr(t),n=typeof o!="undefined"?Ne(o):I({x:0,y:0}),i=O(et(t),$t(t)).pipe(K());return z([i,n]).pipe(m(([a,s])=>{let{x:p,y:c}=Ve(t),l=ce(t),f=t.closest("table");return f&&t.parentElement&&(p+=f.offsetLeft+t.parentElement.offsetLeft,c+=f.offsetTop+t.parentElement.offsetTop),{active:a,offset:{x:p-s.x+l.width/2-r/2,y:c-s.y+l.height+8}}}))}function Qn(e){let t=e.title;if(!t.length)return S;let r=`__tooltip_${Ga++}`,o=Rt(r,"inline"),n=R(".md-typeset",o);return n.innerHTML=t,C(()=>{let i=new g;return i.subscribe({next({offset:a}){o.style.setProperty("--md-tooltip-x",`${a.x}px`),o.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),O(i.pipe(b(({active:a})=>a)),i.pipe(_e(250),b(({active:a})=>!a))).subscribe({next({active:a}){a?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe(Me(16,me)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(pt(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?o.style.setProperty("--md-tooltip-0",`${-a}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),Ja(o,e).pipe(w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))}).pipe(Ke(se))}function Xa({viewport$:e}){if(!B("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Be(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),K()),o=ze("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),K(),v(n=>n?r:I(!1)),Q(!1))}function Kn(e,t){return C(()=>z([ge(e),Xa(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),K((r,o)=>r.height===o.height&&r.hidden===o.hidden),G(1))}function Yn(e,{header$:t,main$:r}){return C(()=>{let o=new g,n=o.pipe(Z(),ie(!0));o.pipe(ee("active"),He(t)).subscribe(([{active:a},{hidden:s}])=>{e.classList.toggle("md-header--shadow",a&&!s),e.hidden=s});let i=ue(P("[title]",e)).pipe(b(()=>B("content.tooltips")),ne(a=>Qn(a)));return r.subscribe(o),t.pipe(W(n),m(a=>$({ref:e},a)),Re(i.pipe(W(n))))})}function Za(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=ce(e);return{active:o>=n}}),ee("active"))}function Bn(e,t){return C(()=>{let r=new g;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=fe(".md-content h1");return typeof o=="undefined"?S:Za(o,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))})}function Gn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),K()),n=o.pipe(v(()=>ge(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),ee("bottom"))));return z([o,n,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:p},size:{height:c}}])=>(c=Math.max(0,c-Math.max(0,a-p,i)-Math.max(0,c+p-s)),{offset:a-i,height:c,active:a-i<=p})),K((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function es(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return I(...e).pipe(ne(o=>h(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),G(1))}function Jn(e){let t=P("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=Pt("(prefers-color-scheme: light)");return C(()=>{let i=new g;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),p=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=p.getAttribute("data-md-color-scheme"),a.color.primary=p.getAttribute("data-md-color-primary"),a.color.accent=p.getAttribute("data-md-color-accent")}for(let[s,p]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,p);for(let s=0;sa.key==="Enter"),re(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(m(()=>{let a=Se("header"),s=window.getComputedStyle(a);return o.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(p=>(+p).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(ve(se)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),es(t).pipe(W(n.pipe(Ce(1))),ct(),w(a=>i.next(a)),_(()=>i.complete()),m(a=>$({ref:e},a)))})}function Xn(e,{progress$:t}){return C(()=>{let r=new g;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(w(o=>r.next({value:o})),_(()=>r.complete()),m(o=>({ref:e,value:o})))})}var Jr=Mt(Br());function ts(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function Zn({alert$:e}){Jr.default.isSupported()&&new j(t=>{new Jr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||ts(R(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>Ee("clipboard.copied"))).subscribe(e)}function ei(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function rs(e,t){let r=new Map;for(let o of P("url",e)){let n=R("loc",o),i=[ei(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let a of P("[rel=alternate]",o)){let s=a.getAttribute("href");s!=null&&i.push(ei(new URL(s),t))}}return r}function ur(e){return un(new URL("sitemap.xml",e)).pipe(m(t=>rs(t,new URL(e))),de(()=>I(new Map)))}function os(e,t){if(!(e.target instanceof Element))return S;let r=e.target.closest("a");if(r===null)return S;if(r.target||e.metaKey||e.ctrlKey)return S;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),I(new URL(r.href))):S}function ti(e){let t=new Map;for(let r of P(":scope > *",e.head))t.set(r.outerHTML,r);return t}function ri(e){for(let t of P("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return I(e)}function ns(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...B("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=fe(o),i=fe(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=ti(document);for(let[o,n]of ti(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Se("container");return We(P("script",r)).pipe(v(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new j(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),S}),Z(),ie(document))}function oi({location$:e,viewport$:t,progress$:r}){let o=xe();if(location.protocol==="file:")return S;let n=ur(o.base);I(document).subscribe(ri);let i=h(document.body,"click").pipe(He(n),v(([p,c])=>os(p,c)),pe()),a=h(window,"popstate").pipe(m(ye),pe());i.pipe(re(t)).subscribe(([p,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",p)}),O(i,a).subscribe(e);let s=e.pipe(ee("pathname"),v(p=>fn(p,{progress$:r}).pipe(de(()=>(lt(p,!0),S)))),v(ri),v(ns),pe());return O(s.pipe(re(e,(p,c)=>c)),s.pipe(v(()=>e),ee("pathname"),v(()=>e),ee("hash")),e.pipe(K((p,c)=>p.pathname===c.pathname&&p.hash===c.hash),v(()=>i),w(()=>history.back()))).subscribe(p=>{var c,l;history.state!==null||!p.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",pn(p.hash),history.scrollRestoration="manual")}),e.subscribe(()=>{history.scrollRestoration="manual"}),h(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),t.pipe(ee("offset"),_e(100)).subscribe(({offset:p})=>{history.replaceState(p,"")}),s}var ni=Mt(qr());function ii(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,a)=>`${i}${a}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(0,ni.default)(a).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function jt(e){return e.type===1}function dr(e){return e.type===3}function ai(e,t){let r=yn(e);return O(I(location.protocol!=="file:"),ze("search")).pipe(Ae(o=>o),v(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:B("search.suggest")}}})),r}function si(e){var l;let{selectedVersionSitemap:t,selectedVersionBaseURL:r,currentLocation:o,currentBaseURL:n}=e,i=(l=Xr(n))==null?void 0:l.pathname;if(i===void 0)return;let a=ss(o.pathname,i);if(a===void 0)return;let s=ps(t.keys());if(!t.has(s))return;let p=Xr(a,s);if(!p||!t.has(p.href))return;let c=Xr(a,r);if(c)return c.hash=o.hash,c.search=o.search,c}function Xr(e,t){try{return new URL(e,t)}catch(r){return}}function ss(e,t){if(e.startsWith(t))return e.slice(t.length)}function cs(e,t){let r=Math.min(e.length,t.length),o;for(o=0;oS)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:a,aliases:s})=>a===i||s.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),v(n=>h(document.body,"click").pipe(b(i=>!i.metaKey&&!i.ctrlKey),re(o),v(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&n.has(s.href)){let p=s.href;return!i.target.closest(".md-version")&&n.get(p)===a?S:(i.preventDefault(),I(new URL(p)))}}return S}),v(i=>ur(i).pipe(m(a=>{var s;return(s=si({selectedVersionSitemap:a,selectedVersionBaseURL:i,currentLocation:ye(),currentBaseURL:t.base}))!=null?s:i})))))).subscribe(n=>lt(n,!0)),z([r,o]).subscribe(([n,i])=>{R(".md-header__topic").appendChild(Cn(n,i))}),e.pipe(v(()=>o)).subscribe(n=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let s=((a=t.version)==null?void 0:a.default)||"latest";Array.isArray(s)||(s=[s]);e:for(let p of s)for(let c of n.aliases.concat(n.version))if(new RegExp(p,"i").test(c)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ae("outdated"))s.hidden=!1})}function ls(e,{worker$:t}){let{searchParams:r}=ye();r.has("q")&&(Je("search",!0),e.value=r.get("q"),e.focus(),ze("search").pipe(Ae(i=>!i)).subscribe(()=>{let i=ye();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=et(e),n=O(t.pipe(Ae(jt)),h(e,"keyup"),o).pipe(m(()=>e.value),K());return z([n,o]).pipe(m(([i,a])=>({value:i,focus:a})),G(1))}function pi(e,{worker$:t}){let r=new g,o=r.pipe(Z(),ie(!0));z([t.pipe(Ae(jt)),r],(i,a)=>a).pipe(ee("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(ee("focus")).subscribe(({focus:i})=>{i&&Je("search",i)}),h(e.form,"reset").pipe(W(o)).subscribe(()=>e.focus());let n=R("header [for=__search]");return h(n,"click").subscribe(()=>e.focus()),ls(e,{worker$:t}).pipe(w(i=>r.next(i)),_(()=>r.complete()),m(i=>$({ref:e},i)),G(1))}function li(e,{worker$:t,query$:r}){let o=new g,n=on(e.parentElement).pipe(b(Boolean)),i=e.parentElement,a=R(":scope > :first-child",e),s=R(":scope > :last-child",e);ze("search").subscribe(l=>s.setAttribute("role",l?"list":"presentation")),o.pipe(re(r),Wr(t.pipe(Ae(jt)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:a.textContent=f.length?Ee("search.result.none"):Ee("search.result.placeholder");break;case 1:a.textContent=Ee("search.result.one");break;default:let u=sr(l.length);a.textContent=Ee("search.result.other",u)}});let p=o.pipe(w(()=>s.innerHTML=""),v(({items:l})=>O(I(...l.slice(0,10)),I(...l.slice(10)).pipe(Be(4),Vr(n),v(([f])=>f)))),m(Mn),pe());return p.subscribe(l=>s.appendChild(l)),p.pipe(ne(l=>{let f=fe("details",l);return typeof f=="undefined"?S:h(f,"toggle").pipe(W(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(b(dr),m(({data:l})=>l)).pipe(w(l=>o.next(l)),_(()=>o.complete()),m(l=>$({ref:e},l)))}function ms(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=ye();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function mi(e,t){let r=new g,o=r.pipe(Z(),ie(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),h(e,"click").pipe(W(o)).subscribe(n=>n.preventDefault()),ms(e,t).pipe(w(n=>r.next(n)),_(()=>r.complete()),m(n=>$({ref:e},n)))}function fi(e,{worker$:t,keyboard$:r}){let o=new g,n=Se("search-query"),i=O(h(n,"keydown"),h(n,"focus")).pipe(ve(se),m(()=>n.value),K());return o.pipe(He(i),m(([{suggest:s},p])=>{let c=p.split(/([\s-]+)/);if(s!=null&&s.length&&c[c.length-1]){let l=s[s.length-1];l.startsWith(c[c.length-1])&&(c[c.length-1]=l)}else c.length=0;return c})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(b(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(b(dr),m(({data:s})=>s)).pipe(w(s=>o.next(s)),_(()=>o.complete()),m(()=>({ref:e})))}function ui(e,{index$:t,keyboard$:r}){let o=xe();try{let n=ai(o.search,t),i=Se("search-query",e),a=Se("search-result",e);h(e,"click").pipe(b(({target:p})=>p instanceof Element&&!!p.closest("a"))).subscribe(()=>Je("search",!1)),r.pipe(b(({mode:p})=>p==="search")).subscribe(p=>{let c=Ie();switch(p.type){case"Enter":if(c===i){let l=new Map;for(let f of P(":first-child [href]",a)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,d])=>d-u);f.click()}p.claim()}break;case"Escape":case"Tab":Je("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")i.focus();else{let l=[i,...P(":not(details) > [href], summary, details[open] [href]",a)],f=Math.max(0,(Math.max(0,l.indexOf(c))+l.length+(p.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}p.claim();break;default:i!==Ie()&&i.focus()}}),r.pipe(b(({mode:p})=>p==="global")).subscribe(p=>{switch(p.type){case"f":case"s":case"/":i.focus(),i.select(),p.claim();break}});let s=pi(i,{worker$:n});return O(s,li(a,{worker$:n,query$:s})).pipe(Re(...ae("search-share",e).map(p=>mi(p,{query$:s})),...ae("search-suggest",e).map(p=>fi(p,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,Ye}}function di(e,{index$:t,location$:r}){return z([t,r.pipe(Q(ye()),b(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>ii(o.config)(n.searchParams.get("h"))),m(o=>{var a;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let p=s.textContent,c=o(p);c.length>p.length&&n.set(s,c)}for(let[s,p]of n){let{childNodes:c}=x("span",null,p);s.replaceWith(...Array.from(c))}return{ref:e,nodes:n}}))}function fs(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(n,Math.max(0,s-i))-n,{height:a,locked:s>=i+n})),K((i,a)=>i.height===a.height&&i.locked===a.locked))}function Zr(e,o){var n=o,{header$:t}=n,r=so(n,["header$"]);let i=R(".md-sidebar__scrollwrap",e),{y:a}=Ve(i);return C(()=>{let s=new g,p=s.pipe(Z(),ie(!0)),c=s.pipe(Me(0,me));return c.pipe(re(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ae()).subscribe(()=>{for(let l of P(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2})}}}),ue(P("label[tabindex]",e)).pipe(ne(l=>h(l,"click").pipe(ve(se),m(()=>l),W(p)))).subscribe(l=>{let f=R(`[id="${l.htmlFor}"]`);R(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),fs(e,r).pipe(w(l=>s.next(l)),_(()=>s.complete()),m(l=>$({ref:e},l)))})}function hi(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return st(je(`${r}/releases/latest`).pipe(de(()=>S),m(o=>({version:o.tag_name})),De({})),je(r).pipe(de(()=>S),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(o=>({repositories:o.public_repos})),De({}))}}function bi(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return st(je(`${r}/releases/permalink/latest`).pipe(de(()=>S),m(({tag_name:o})=>({version:o})),De({})),je(r).pipe(de(()=>S),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),De({}))).pipe(m(([o,n])=>$($({},o),n)))}function vi(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return hi(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return bi(r,o)}return S}var us;function ds(e){return us||(us=C(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(ae("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return S}return vi(e.href).pipe(w(o=>__md_set("__source",o,sessionStorage)))}).pipe(de(()=>S),b(t=>Object.keys(t).length>0),m(t=>({facts:t})),G(1)))}function gi(e){let t=R(":scope > :last-child",e);return C(()=>{let r=new g;return r.subscribe(({facts:o})=>{t.appendChild(_n(o)),t.classList.add("md-source__repository--active")}),ds(e).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function hs(e,{viewport$:t,header$:r}){return ge(document.body).pipe(v(()=>mr(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),ee("hidden"))}function yi(e,t){return C(()=>{let r=new g;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(B("navigation.tabs.sticky")?I({hidden:!1}):hs(e,t)).pipe(w(o=>r.next(o)),_(()=>r.complete()),m(o=>$({ref:e},o)))})}function bs(e,{viewport$:t,header$:r}){let o=new Map,n=P(".md-nav__link",e);for(let s of n){let p=decodeURIComponent(s.hash.substring(1)),c=fe(`[id="${p}"]`);typeof c!="undefined"&&o.set(s,c)}let i=r.pipe(ee("height"),m(({height:s})=>{let p=Se("main"),c=R(":scope > :first-child",p);return s+.8*(c.offsetTop-p.offsetTop)}),pe());return ge(document.body).pipe(ee("height"),v(s=>C(()=>{let p=[];return I([...o].reduce((c,[l,f])=>{for(;p.length&&o.get(p[p.length-1]).tagName>=f.tagName;)p.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let d=f.offsetParent;for(;d;d=d.offsetParent)u+=d.offsetTop;return c.set([...p=[...p,l]].reverse(),u)},new Map))}).pipe(m(p=>new Map([...p].sort(([,c],[,l])=>c-l))),He(i),v(([p,c])=>t.pipe(Fr(([l,f],{offset:{y:u},size:d})=>{let y=u+d.height>=Math.floor(s.height);for(;f.length;){let[,L]=f[0];if(L-c=u&&!y)f=[l.pop(),...f];else break}return[l,f]},[[],[...p]]),K((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([s,p])=>({prev:s.map(([c])=>c),next:p.map(([c])=>c)})),Q({prev:[],next:[]}),Be(2,1),m(([s,p])=>s.prev.length{let i=new g,a=i.pipe(Z(),ie(!0));if(i.subscribe(({prev:s,next:p})=>{for(let[c]of p)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",c===s.length-1)}),B("toc.follow")){let s=O(t.pipe(_e(1),m(()=>{})),t.pipe(_e(250),m(()=>"smooth")));i.pipe(b(({prev:p})=>p.length>0),He(o.pipe(ve(se))),re(s)).subscribe(([[{prev:p}],c])=>{let[l]=p[p.length-1];if(l.offsetHeight){let f=cr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:d}=ce(f);f.scrollTo({top:u-d/2,behavior:c})}}})}return B("navigation.tracking")&&t.pipe(W(a),ee("offset"),_e(250),Ce(1),W(n.pipe(Ce(1))),ct({delay:250}),re(i)).subscribe(([,{prev:s}])=>{let p=ye(),c=s[s.length-1];if(c&&c.length){let[l]=c,{hash:f}=new URL(l.href);p.hash!==f&&(p.hash=f,history.replaceState({},"",`${p}`))}else p.hash="",history.replaceState({},"",`${p}`)}),bs(e,{viewport$:t,header$:r}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))})}function vs(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:a}})=>a),Be(2,1),m(([a,s])=>a>s&&s>0),K()),i=r.pipe(m(({active:a})=>a));return z([i,n]).pipe(m(([a,s])=>!(a&&s)),K(),W(o.pipe(Ce(1))),ie(!0),ct({delay:250}),m(a=>({hidden:a})))}function Ei(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new g,a=i.pipe(Z(),ie(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(W(a),ee("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),h(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),vs(e,{viewport$:t,main$:o,target$:n}).pipe(w(s=>i.next(s)),_(()=>i.complete()),m(s=>$({ref:e},s)))}function wi({document$:e,viewport$:t}){e.pipe(v(()=>P(".md-ellipsis")),ne(r=>tt(r).pipe(W(e.pipe(Ce(1))),b(o=>o),m(()=>r),Te(1))),b(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,B("content.tooltips")?mt(n,{viewport$:t}).pipe(W(e.pipe(Ce(1))),_(()=>n.removeAttribute("title"))):S})).subscribe(),B("content.tooltips")&&e.pipe(v(()=>P(".md-status")),ne(r=>mt(r,{viewport$:t}))).subscribe()}function Ti({document$:e,tablet$:t}){e.pipe(v(()=>P(".md-toggle--indeterminate")),w(r=>{r.indeterminate=!0,r.checked=!1}),ne(r=>h(r,"change").pipe(Dr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),re(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function gs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Si({document$:e}){e.pipe(v(()=>P("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),b(gs),ne(t=>h(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Oi({viewport$:e,tablet$:t}){z([ze("search"),t]).pipe(m(([r,o])=>r&&!o),v(r=>I(r).pipe(Ge(r?400:100))),re(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function ys(){return location.protocol==="file:"?Tt(`${new URL("search/search_index.js",eo.base)}`).pipe(m(()=>__index),G(1)):je(new URL("search/search_index.json",eo.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ot=Go(),Ut=sn(),Lt=ln(Ut),to=an(),Oe=gn(),hr=Pt("(min-width: 960px)"),Mi=Pt("(min-width: 1220px)"),_i=mn(),eo=xe(),Ai=document.forms.namedItem("search")?ys():Ye,ro=new g;Zn({alert$:ro});var oo=new g;B("navigation.instant")&&oi({location$:Ut,viewport$:Oe,progress$:oo}).subscribe(ot);var Li;((Li=eo.version)==null?void 0:Li.provider)==="mike"&&ci({document$:ot});O(Ut,Lt).pipe(Ge(125)).subscribe(()=>{Je("drawer",!1),Je("search",!1)});to.pipe(b(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=fe("link[rel=prev]");typeof t!="undefined"&<(t);break;case"n":case".":let r=fe("link[rel=next]");typeof r!="undefined"&<(r);break;case"Enter":let o=Ie();o instanceof HTMLLabelElement&&o.click()}});wi({viewport$:Oe,document$:ot});Ti({document$:ot,tablet$:hr});Si({document$:ot});Oi({viewport$:Oe,tablet$:hr});var rt=Kn(Se("header"),{viewport$:Oe}),Ft=ot.pipe(m(()=>Se("main")),v(e=>Gn(e,{viewport$:Oe,header$:rt})),G(1)),xs=O(...ae("consent").map(e=>En(e,{target$:Lt})),...ae("dialog").map(e=>qn(e,{alert$:ro})),...ae("palette").map(e=>Jn(e)),...ae("progress").map(e=>Xn(e,{progress$:oo})),...ae("search").map(e=>ui(e,{index$:Ai,keyboard$:to})),...ae("source").map(e=>gi(e))),Es=C(()=>O(...ae("announce").map(e=>xn(e)),...ae("content").map(e=>zn(e,{viewport$:Oe,target$:Lt,print$:_i})),...ae("content").map(e=>B("search.highlight")?di(e,{index$:Ai,location$:Ut}):S),...ae("header").map(e=>Yn(e,{viewport$:Oe,header$:rt,main$:Ft})),...ae("header-title").map(e=>Bn(e,{viewport$:Oe,header$:rt})),...ae("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Nr(Mi,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft})):Nr(hr,()=>Zr(e,{viewport$:Oe,header$:rt,main$:Ft}))),...ae("tabs").map(e=>yi(e,{viewport$:Oe,header$:rt})),...ae("toc").map(e=>xi(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})),...ae("top").map(e=>Ei(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Lt})))),Ci=ot.pipe(v(()=>Es),Re(xs),G(1));Ci.subscribe();window.document$=ot;window.location$=Ut;window.target$=Lt;window.keyboard$=to;window.viewport$=Oe;window.tablet$=hr;window.screen$=Mi;window.print$=_i;window.alert$=ro;window.progress$=oo;window.component$=Ci;})(); //# sourceMappingURL=bundle.88dd0f4e.min.js.map diff --git a/community/code_of_conduct/index.html b/community/code_of_conduct/index.html new file mode 100644 index 000000000..9953b2fd7 --- /dev/null +++ b/community/code_of_conduct/index.html @@ -0,0 +1 @@ + Code of Conduct - JSON for Modern C++

    Contributor Covenant Code of Conduct

    Our Pledge

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    Our Standards

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Enforcement Responsibilities

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    Scope

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    Enforcement Guidelines

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    1. Correction

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    2. Warning

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    3. Temporary Ban

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    4. Permanent Ban

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    \ No newline at end of file diff --git a/community/contribution_guidelines/index.html b/community/contribution_guidelines/index.html new file mode 100644 index 000000000..6259a7136 --- /dev/null +++ b/community/contribution_guidelines/index.html @@ -0,0 +1,8 @@ + Contribution Guidelines - JSON for Modern C++

    Contribution Guidelines

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely-used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    Ways to Contribute

    There are multiple ways to contribute.

    Reporting an issue

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example how the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    Reporting a security vulnerability

    You can report a security vulnerability according to our security policy.

    Discussing a new feature

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the "Mark as answer" button to make it easier for readers to see what helped and for the community to filter for open questions.

    Proposing a fix or an improvement

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    How to...

    Describe your changes

    This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    Reference existing issues

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos) don’t require prior discussions.

    Write tests

    The library has an extensive test suite that currently covers 100 % of the library's code. These test are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    Run the tests

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build
    +$ cmake --build build -j 10
    +$ ctest --test-dir build -j 10
    +

    The test suite should report:

    100% tests passed, 0 tests failed out of 98
    +

    Add tests

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    Exceptions

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    Coverage

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the “Ubuntu” workflow.

    Update the documentation

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and an extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs
    +make serve -C docs/mkdocs
    +

    The documentation will then available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    Amalgamate the source code

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate
    +
    • The library’s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.

    Please don't...

    Certain contributions are not helpful.

    Break the public API

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    Break C++11 language conformance

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    Break JSON conformance

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    Wanted

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    \ No newline at end of file diff --git a/community/governance/index.html b/community/governance/index.html new file mode 100644 index 000000000..a85b6493b --- /dev/null +++ b/community/governance/index.html @@ -0,0 +1 @@ + Governance - JSON for Modern C++

    Governance

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    Overview

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    Roles and responsibilities

    Benevolent dictator (project lead)

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire.

    Committers

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    Contributors

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    Users

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user’s perspective
    • providing moral support (a ‘thank you’ goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    Support

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    Contribution Process

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    Decision-Making Process

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.


    \ No newline at end of file diff --git a/community/index.html b/community/index.html new file mode 100644 index 000000000..f3ccacae0 --- /dev/null +++ b/community/index.html @@ -0,0 +1 @@ + Community - JSON for Modern C++
    \ No newline at end of file diff --git a/community/quality_assurance/index.html b/community/quality_assurance/index.html new file mode 100644 index 000000000..6b0ff2bd1 --- /dev/null +++ b/community/quality_assurance/index.html @@ -0,0 +1,525 @@ + Quality assurance - JSON for Modern C++

    Quality assurance

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    C++ language compliance and compiler compatibility

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    • The library is compiled library with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

      Compilers used in continuous integration
      Compiler Architecture Operating System CI
      AppleClang 14.0.0.14000029; Xcode 14.1 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 14.0.0.14000029; Xcode 14.2 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 14.0.3.14030022; Xcode 14.3.1 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub
      AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub
      AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub
      AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub
      AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub
      AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub
      Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 11.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 12.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 12.0.0 with MSVC-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 13.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 14.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 15.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub
      Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 19.1.6 x86_64 Ubuntu 22.04.1 LTS GitHub
      Clang 20.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows 10 (Build 17763) GitHub
      GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows 10 (Build 17763) GitHub
      GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub
      GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI
      MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor
      MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor
      MSVC 19.29.30157.0 x86 Windows 10 (Build 17763) GitHub
      MSVC 19.29.30157.0 x86_64 Windows 10 (Build 17763) GitHub
      MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor
      MSVC 19.42.34435.0 x86 Windows 10 (Build 20348) GitHub
      MSVC 19.42.34435.0 x86_64 Windows 10 (Build 20348) GitHub
    • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

    • The library is checked for compiler warnings:
    • On Clang, -Weverything is used with 7 exceptions.

      Clang warnings
      # Ignored Clang warnings:
      +# -Wno-c++98-compat               The library targets C++11.
      +# -Wno-c++98-compat-pedantic      The library targets C++11.
      +# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.
      +# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.
      +# -Wno-padded                     We do not care about padding warnings.
      +# -Wno-covered-switch-default     All switches list all cases and a default case.
      +# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.
      +
      +set(CLANG_CXXFLAGS
      +    -Werror
      +    -Weverything
      +    -Wno-c++98-compat
      +    -Wno-c++98-compat-pedantic
      +    -Wno-deprecated-declarations
      +    -Wno-extra-semi-stmt
      +    -Wno-padded
      +    -Wno-covered-switch-default
      +    -Wno-unsafe-buffer-usage
      +)
      +
    • On GCC, 300+ warnings are enabled with 8 exceptions.

      GCC warnings
      # Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags:
      +# Ignored GCC warnings:
      +# -Wno-abi-tag                    We do not care about ABI tags.
      +# -Wno-aggregate-return           The library uses aggregate returns.
      +# -Wno-long-long                  The library uses the long long type to interface with system functions.
      +# -Wno-namespaces                 The library uses namespaces.
      +# -Wno-nrvo                       Doctest triggers this warning.
      +# -Wno-padded                     We do not care about padding warnings.
      +# -Wno-system-headers             We do not care about warnings in system headers.
      +# -Wno-templates                  The library uses templates.
      +
      +set(GCC_CXXFLAGS
      +    -pedantic
      +    -Werror
      +    --all-warnings
      +    --extra-warnings
      +    -W
      +    -WNSObject-attribute
      +    -Wno-abi-tag
      +    -Waddress
      +    -Waddress-of-packed-member
      +    -Wno-aggregate-return
      +    -Waggressive-loop-optimizations
      +    -Waligned-new=all
      +    -Wall
      +    -Walloc-size
      +    -Walloc-zero
      +    -Walloca
      +    -Wanalyzer-allocation-size
      +    -Wanalyzer-deref-before-check
      +    -Wanalyzer-double-fclose
      +    -Wanalyzer-double-free
      +    -Wanalyzer-exposure-through-output-file
      +    -Wanalyzer-exposure-through-uninit-copy
      +    -Wanalyzer-fd-access-mode-mismatch
      +    -Wanalyzer-fd-double-close
      +    -Wanalyzer-fd-leak
      +    -Wanalyzer-fd-phase-mismatch
      +    -Wanalyzer-fd-type-mismatch
      +    -Wanalyzer-fd-use-after-close
      +    -Wanalyzer-fd-use-without-check
      +    -Wanalyzer-file-leak
      +    -Wanalyzer-free-of-non-heap
      +    -Wanalyzer-imprecise-fp-arithmetic
      +    -Wanalyzer-infinite-loop
      +    -Wanalyzer-infinite-recursion
      +    -Wanalyzer-jump-through-null
      +    -Wanalyzer-malloc-leak
      +    -Wanalyzer-mismatching-deallocation
      +    -Wanalyzer-null-argument
      +    -Wanalyzer-null-dereference
      +    -Wanalyzer-out-of-bounds
      +    -Wanalyzer-overlapping-buffers
      +    -Wanalyzer-possible-null-argument
      +    -Wanalyzer-possible-null-dereference
      +    -Wanalyzer-putenv-of-auto-var
      +    -Wanalyzer-shift-count-negative
      +    -Wanalyzer-shift-count-overflow
      +    -Wanalyzer-stale-setjmp-buffer
      +    -Wanalyzer-symbol-too-complex
      +    -Wanalyzer-tainted-allocation-size
      +    -Wanalyzer-tainted-array-index
      +    -Wanalyzer-tainted-assertion
      +    -Wanalyzer-tainted-divisor
      +    -Wanalyzer-tainted-offset
      +    -Wanalyzer-tainted-size
      +    -Wanalyzer-too-complex
      +    -Wanalyzer-undefined-behavior-strtok
      +    -Wanalyzer-unsafe-call-within-signal-handler
      +    -Wanalyzer-use-after-free
      +    -Wanalyzer-use-of-pointer-in-stale-stack-frame
      +    -Wanalyzer-use-of-uninitialized-value
      +    -Wanalyzer-va-arg-type-mismatch
      +    -Wanalyzer-va-list-exhausted
      +    -Wanalyzer-va-list-leak
      +    -Wanalyzer-va-list-use-after-va-end
      +    -Wanalyzer-write-to-const
      +    -Wanalyzer-write-to-string-literal
      +    -Warith-conversion
      +    -Warray-bounds=2
      +    -Warray-compare
      +    -Warray-parameter=2
      +    -Wattribute-alias=2
      +    -Wattribute-warning
      +    -Wattributes
      +    -Wbool-compare
      +    -Wbool-operation
      +    -Wbuiltin-declaration-mismatch
      +    -Wbuiltin-macro-redefined
      +    -Wc++0x-compat
      +    -Wc++11-compat
      +    -Wc++11-extensions
      +    -Wc++14-compat
      +    -Wc++14-extensions
      +    -Wc++17-compat
      +    -Wc++17-extensions
      +    -Wc++1z-compat
      +    -Wc++20-compat
      +    -Wc++20-extensions
      +    -Wc++23-extensions
      +    -Wc++26-extensions
      +    -Wc++2a-compat
      +    -Wcalloc-transposed-args
      +    -Wcannot-profile
      +    -Wcast-align
      +    -Wcast-align=strict
      +    -Wcast-function-type
      +    -Wcast-qual
      +    -Wcast-user-defined
      +    -Wcatch-value=3
      +    -Wchanges-meaning
      +    -Wchar-subscripts
      +    -Wclass-conversion
      +    -Wclass-memaccess
      +    -Wclobbered
      +    -Wcomma-subscript
      +    -Wcomment
      +    -Wcomments
      +    -Wcomplain-wrong-lang
      +    -Wconditionally-supported
      +    -Wconversion
      +    -Wconversion-null
      +    -Wcoverage-invalid-line-number
      +    -Wcoverage-mismatch
      +    -Wcoverage-too-many-conditions
      +    -Wcpp
      +    -Wctad-maybe-unsupported
      +    -Wctor-dtor-privacy
      +    -Wdangling-else
      +    -Wdangling-pointer=2
      +    -Wdangling-reference
      +    -Wdate-time
      +    -Wdelete-incomplete
      +    -Wdelete-non-virtual-dtor
      +    -Wdeprecated
      +    -Wdeprecated-copy
      +    -Wdeprecated-copy-dtor
      +    -Wdeprecated-declarations
      +    -Wdeprecated-enum-enum-conversion
      +    -Wdeprecated-enum-float-conversion
      +    -Wdisabled-optimization
      +    -Wdiv-by-zero
      +    -Wdouble-promotion
      +    -Wduplicated-branches
      +    -Wduplicated-cond
      +    -Weffc++
      +    -Welaborated-enum-base
      +    -Wempty-body
      +    -Wendif-labels
      +    -Wenum-compare
      +    -Wenum-conversion
      +    -Wexceptions
      +    -Wexpansion-to-defined
      +    -Wextra
      +    -Wextra-semi
      +    -Wflex-array-member-not-at-end
      +    -Wfloat-conversion
      +    -Wfloat-equal
      +    -Wformat -Wformat-contains-nul
      +    -Wformat -Wformat-extra-args
      +    -Wformat -Wformat-nonliteral
      +    -Wformat -Wformat-security
      +    -Wformat -Wformat-y2k
      +    -Wformat -Wformat-zero-length
      +    -Wformat-diag
      +    -Wformat-overflow=2
      +    -Wformat-signedness
      +    -Wformat-truncation=2
      +    -Wformat=2
      +    -Wframe-address
      +    -Wfree-nonheap-object
      +    -Wglobal-module
      +    -Whardened
      +    -Whsa
      +    -Wif-not-aligned
      +    -Wignored-attributes
      +    -Wignored-qualifiers
      +    -Wimplicit-fallthrough=5
      +    -Winaccessible-base
      +    -Winfinite-recursion
      +    -Winherited-variadic-ctor
      +    -Winit-list-lifetime
      +    -Winit-self
      +    -Winline
      +    -Wint-in-bool-context
      +    -Wint-to-pointer-cast
      +    -Winterference-size
      +    -Winvalid-constexpr
      +    -Winvalid-imported-macros
      +    -Winvalid-memory-model
      +    -Winvalid-offsetof
      +    -Winvalid-pch
      +    -Winvalid-utf8
      +    -Wliteral-suffix
      +    -Wlogical-not-parentheses
      +    -Wlogical-op
      +    -Wno-long-long
      +    -Wlto-type-mismatch
      +    -Wmain
      +    -Wmaybe-uninitialized
      +    -Wmemset-elt-size
      +    -Wmemset-transposed-args
      +    -Wmisleading-indentation
      +    -Wmismatched-dealloc
      +    -Wmismatched-new-delete
      +    -Wmismatched-tags
      +    -Wmissing-attributes
      +    -Wmissing-braces
      +    -Wmissing-declarations
      +    -Wmissing-field-initializers
      +    -Wmissing-include-dirs
      +    -Wmissing-profile
      +    -Wmissing-requires
      +    -Wmissing-template-keyword
      +    -Wmultichar
      +    -Wmultiple-inheritance
      +    -Wmultistatement-macros
      +    -Wno-namespaces
      +    -Wnarrowing
      +    -Wnoexcept
      +    -Wnoexcept-type
      +    -Wnon-template-friend
      +    -Wnon-virtual-dtor
      +    -Wnonnull
      +    -Wnonnull-compare
      +    -Wnormalized=nfkc
      +    -Wno-nrvo
      +    -Wnull-dereference
      +    -Wodr
      +    -Wold-style-cast
      +    -Wopenacc-parallelism
      +    -Wopenmp
      +    -Wopenmp-simd
      +    -Woverflow
      +    -Woverlength-strings
      +    -Woverloaded-virtual=2
      +    -Wpacked
      +    -Wpacked-bitfield-compat
      +    -Wpacked-not-aligned
      +    -Wno-padded
      +    -Wparentheses
      +    -Wpedantic
      +    -Wpessimizing-move
      +    -Wplacement-new=2
      +    -Wpmf-conversions
      +    -Wpointer-arith
      +    -Wpointer-compare
      +    -Wpragmas
      +    -Wprio-ctor-dtor
      +    -Wpsabi
      +    -Wrange-loop-construct
      +    -Wredundant-decls
      +    -Wredundant-move
      +    -Wredundant-tags
      +    -Wregister
      +    -Wreorder
      +    -Wrestrict
      +    -Wreturn-local-addr
      +    -Wreturn-type
      +    -Wscalar-storage-order
      +    -Wself-move
      +    -Wsequence-point
      +    -Wshadow=compatible-local
      +    -Wshadow=global
      +    -Wshadow=local
      +    -Wshift-count-negative
      +    -Wshift-count-overflow
      +    -Wshift-negative-value
      +    -Wshift-overflow=2
      +    -Wsign-compare
      +    -Wsign-conversion
      +    -Wsign-promo
      +    -Wsized-deallocation
      +    -Wsizeof-array-argument
      +    -Wsizeof-array-div
      +    -Wsizeof-pointer-div
      +    -Wsizeof-pointer-memaccess
      +    -Wstack-protector
      +    -Wstrict-aliasing=3
      +    -Wstrict-null-sentinel
      +    -Wstrict-overflow
      +    -Wstring-compare
      +    -Wstringop-overflow=4
      +    -Wstringop-overread
      +    -Wstringop-truncation
      +    -Wsubobject-linkage
      +    -Wsuggest-attribute=cold
      +    -Wsuggest-attribute=const
      +    -Wsuggest-attribute=format
      +    -Wsuggest-attribute=malloc
      +    -Wsuggest-attribute=noreturn
      +    -Wsuggest-attribute=pure
      +    -Wsuggest-attribute=returns_nonnull
      +    -Wsuggest-final-methods
      +    -Wsuggest-final-types
      +    -Wsuggest-override
      +    -Wswitch
      +    -Wswitch-bool
      +    -Wswitch-default
      +    -Wswitch-enum
      +    -Wswitch-outside-range
      +    -Wswitch-unreachable
      +    -Wsync-nand
      +    -Wsynth
      +    -Wno-system-headers
      +    -Wtautological-compare
      +    -Wno-templates
      +    -Wterminate
      +    -Wtrampolines
      +    -Wtrigraphs
      +    -Wtrivial-auto-var-init
      +    -Wtsan
      +    -Wtype-limits
      +    -Wundef
      +    -Wunicode
      +    -Wuninitialized
      +    -Wunknown-pragmas
      +    -Wunreachable-code
      +    -Wunsafe-loop-optimizations
      +    -Wunused
      +    -Wunused-but-set-parameter
      +    -Wunused-but-set-variable
      +    -Wunused-const-variable=2
      +    -Wunused-function
      +    -Wunused-label
      +    -Wunused-local-typedefs
      +    -Wunused-macros
      +    -Wunused-parameter
      +    -Wunused-result
      +    -Wunused-value
      +    -Wunused-variable
      +    -Wuse-after-free=3
      +    -Wuseless-cast
      +    -Wvarargs
      +    -Wvariadic-macros
      +    -Wvector-operation-performance
      +    -Wvexing-parse
      +    -Wvirtual-inheritance
      +    -Wvirtual-move-assign
      +    -Wvla
      +    -Wvla-parameter
      +    -Wvolatile
      +    -Wvolatile-register-var
      +    -Wwrite-strings
      +    -Wxor-used-as-pow
      +    -Wzero-as-null-pointer-constant
      +    -Wzero-length-bounds
      +)
      +

    C++ standard library compliance

    Requirement: No prerequisites

    The library has no prerequisites other than the Standard Template Library (STL).

    • The library compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
    • The code checked with Include What You Use (IWYU) that all required standard headers are included.
    • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
    • The library is compiled with exceptions disabled to support alternative means of error handling.

    Stable public API

    Requirement: Stable public API

    Any change to the library does not break the public API.

    • All public API functions are tested with a variety of arguments.
    • The library is compiled and tested with different template arguments for number, string, array, and object types.
    • All lines of the code base are covered by unit tests.
    • Every exception of the library is thrown in the test suite and the error messages and exception ids are checked.

    Requirement: Complete documentation

    The public API is extensively documented.

    • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
    • All examples in the documentation are tested and changes in their output is treated as an error.

    Robust input processing

    Requirement: Standards compliance

    The library is compliant to JSON as defined in RFC 8259.

    • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
    • The parser is tested against extensive correctness suites for JSON compliance.
    • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.

    Static analysis

    Requirement: State-of-the-art code analysis

    The code is checked with state-of-the-art static code analysis tools.

    • The code is checked with the latest Clang-Tidy.

      Clang-Tidy configuration (.clang-tidy)
      # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.
      +
      +Checks: '*,
      +
      +         -portability-template-virtual-member-function,
      +         -bugprone-use-after-move,
      +         -hicpp-invalid-access-moved,
      +
      +         -altera-id-dependent-backward-branch,
      +         -altera-struct-pack-align,
      +         -altera-unroll-loops,
      +         -android-cloexec-fopen,
      +         -boost-use-ranges,
      +         -bugprone-easily-swappable-parameters,
      +         -cert-err58-cpp,
      +         -concurrency-mt-unsafe,
      +         -cppcoreguidelines-avoid-const-or-ref-data-members,
      +         -cppcoreguidelines-avoid-do-while,
      +         -cppcoreguidelines-avoid-goto,
      +         -cppcoreguidelines-avoid-magic-numbers,
      +         -cppcoreguidelines-avoid-non-const-global-variables,
      +         -cppcoreguidelines-macro-usage,
      +         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
      +         -cppcoreguidelines-pro-bounds-constant-array-index,
      +         -cppcoreguidelines-pro-bounds-pointer-arithmetic,
      +         -cppcoreguidelines-pro-type-reinterpret-cast,
      +         -cppcoreguidelines-pro-type-union-access,
      +         -cppcoreguidelines-rvalue-reference-param-not-moved,
      +         -cppcoreguidelines-virtual-class-destructor,
      +         -fuchsia-default-arguments-calls,
      +         -fuchsia-default-arguments-declarations,
      +         -fuchsia-overloaded-operator,
      +         -google-explicit-constructor,
      +         -google-readability-function-size,
      +         -google-runtime-int,
      +         -google-runtime-references,
      +         -hicpp-avoid-goto,
      +         -hicpp-explicit-conversions,
      +         -hicpp-function-size,
      +         -hicpp-no-array-decay,
      +         -hicpp-no-assembler,
      +         -hicpp-signed-bitwise,
      +         -hicpp-uppercase-literal-suffix,
      +         -llvm-header-guard,
      +         -llvm-include-order,
      +         -llvmlibc-*,
      +         -misc-use-anonymous-namespace,
      +         -misc-confusable-identifiers,
      +         -misc-include-cleaner,
      +         -misc-no-recursion,
      +         -misc-non-private-member-variables-in-classes,
      +         -modernize-concat-nested-namespaces,
      +         -modernize-type-traits,
      +         -modernize-use-constraints,
      +         -modernize-use-designated-initializers,
      +         -modernize-use-nodiscard,
      +         -modernize-use-ranges,
      +         -modernize-use-std-numbers,
      +         -modernize-use-trailing-return-type,
      +         -performance-enum-size,
      +         -readability-function-cognitive-complexity,
      +         -readability-function-size,
      +         -readability-identifier-length,
      +         -readability-magic-numbers,
      +         -readability-redundant-access-specifiers,
      +         -readability-simplify-boolean-expr,
      +         -readability-uppercase-literal-suffix'
      +
      +CheckOptions:
      +  - key: hicpp-special-member-functions.AllowSoleDefaultDtor
      +    value: 1
      +
      +WarningsAsErrors: '*'
      +
      +#HeaderFilterRegex: '.*nlohmann.*'
      +HeaderFilterRegex: '.*hpp$'
      +
    • The code is checked with the latest Cppcheck with all warnings enabled.

    • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
    • The code is checked with Infer.
    • The code is checked with Codacy.

    Dynamic analysis

    Requirement: Correctness

    The library is checked for memory correctness and absence of undefined behavior.

    • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
    • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
    • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).

    Style check

    Requirement: Common code style

    A common code style is used throughout all code files of the library.

    • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

      Astyle configuration (tools/astyle/.astylerc)
      # Configuration for Artistic Style
      +# see https://astyle.sourceforge.net/astyle.html
      +
      +#######################
      +# Brace Style Options #
      +#######################
      +
      +# use Allman style for braces
      +--style=allman
      +
      +###############
      +# Tab Options #
      +###############
      +
      +# indent using 4 spaces
      +--indent=spaces=4
      +
      +#######################
      +# Indentation Options #
      +#######################
      +
      +# indent access modifiers one half indent
      +--indent-modifiers
      +
      +# indent switch cases to the switch block
      +--indent-switches
      +
      +# indent preprocessor blocks
      +--indent-preproc-block
      +
      +# indent preprocessor defines
      +--indent-preproc-define
      +
      +# indent C++ comments
      +--indent-col1-comments
      +
      +###################
      +# Padding Options #
      +###################
      +
      +# insert space padding around operators
      +--pad-oper
      +
      +# insert space between if/for/while... and the following parentheses
      +--pad-header
      +
      +# attach the pointer to the variable type (left)
      +--align-pointer=type
      +
      +# attach the reference to the variable type (left)
      +--align-reference=type
      +
      +######################
      +# Formatting Options #
      +######################
      +
      +# add braces to unbraced one line conditional statements
      +--add-braces
      +
      +# convert tabs to spaces
      +--convert-tabs
      +
      +# closes whitespace between the ending angle brackets of template definitions
      +--close-templates
      +
      +#################
      +# Other Options #
      +#################
      +
      +# do not create backup files
      +--suffix=none
      +
      +# preserve the original file date
      +--preserve-date
      +
      +# display only the files that have been formatted
      +--formatted
      +
      +# for the linux (LF) line end style
      +--lineend=linux
      +
    • The code style is checked with cpplint with 61 enabled rules.

    Simple integration

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against the earliest supported CMake version.
    \ No newline at end of file diff --git a/community/security_policy/index.html b/community/security_policy/index.html new file mode 100644 index 000000000..e21c07038 --- /dev/null +++ b/community/security_policy/index.html @@ -0,0 +1 @@ + Security Policy - JSON for Modern C++

    Security Policy

    Reporting a Vulnerability

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory "Report a Vulnerability" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    Additional Resources

    We sincerely thank you for contributing to the security and integrity of this project!

    \ No newline at end of file diff --git a/css/custom.css b/css/custom.css index 7a1008b0b..8940a782e 100644 --- a/css/custom.css +++ b/css/custom.css @@ -1,4 +1,4 @@ -/* disable ligatures in code and preformatted blocks */ -code, pre { - font-variant-ligatures: none; +/* enable ligatures in code and preformatted blocks */ +.md-typeset code, .md-typeset pre { + font-variant-ligatures: common-ligatures; } diff --git a/examples/nlohmann_define_derived_type_intrusive_macro.cpp b/examples/nlohmann_define_derived_type_intrusive_macro.cpp new file mode 100644 index 000000000..0dca78162 --- /dev/null +++ b/examples/nlohmann_define_derived_type_intrusive_macro.cpp @@ -0,0 +1,37 @@ +#include +#include +#include + +using nlohmann::json; + +class A +{ + private: + double Aa = 0.0; + double Ab = 0.0; + + public: + A() = default; + A(double a, double b) : Aa(a), Ab(b) {} + NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab) +}; + +class B : public A +{ + private: + int Ba = 0; + int Bb = 0; + + public: + B() = default; + B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {} + NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb) +}; + +int main() +{ + B example(23, 42, 3.142, 1.777); + json example_json = example; + + std::cout << std::setw(4) << example_json << std::endl; +} \ No newline at end of file diff --git a/examples/nlohmann_define_derived_type_intrusive_macro.output b/examples/nlohmann_define_derived_type_intrusive_macro.output new file mode 100644 index 000000000..0f97be4a0 --- /dev/null +++ b/examples/nlohmann_define_derived_type_intrusive_macro.output @@ -0,0 +1,6 @@ +{ + "Aa": 3.142, + "Ab": 1.777, + "Ba": 23, + "Bb": 42 +} diff --git a/examples/parse__iterator_pair.link b/examples/parse__iterator_pair.link new file mode 100644 index 000000000..f464e54c8 --- /dev/null +++ b/examples/parse__iterator_pair.link @@ -0,0 +1 @@ +online \ No newline at end of file diff --git a/examples/parse__pointers.link b/examples/parse__pointers.link new file mode 100644 index 000000000..9a93ef1c5 --- /dev/null +++ b/examples/parse__pointers.link @@ -0,0 +1 @@ +online \ No newline at end of file diff --git a/features/arbitrary_types/index.html b/features/arbitrary_types/index.html index 5ac74d24a..a82806b05 100644 --- a/features/arbitrary_types/index.html +++ b/features/arbitrary_types/index.html @@ -1,4 +1,4 @@ - Arbitrary Type Conversions - JSON for Modern C++

    Arbitrary Type Conversions

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {
    + Arbitrary Type Conversions - JSON for Modern C++      

    Arbitrary Type Conversions

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {
         // a simple struct to model a person
         struct person {
             std::string name;
    @@ -50,7 +50,7 @@
             j.at("age").get_to(p.age);
         }
     } // namespace ns
    -

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.

    Simplify your life with macros

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are four macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    In all macros, the first parameter is the name of the class/struct, and all remaining parameters name the members. You can read more docs about them starting from here.

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {
    +

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.

    Simplify your life with macros

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    Furthermore, there exist versions to use in case of derived classes:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro
    NLOHMANN_DEFINE_TYPE_INTRUSIVE
    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    For derived classes and structs, use the following macros

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT
    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {
         NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)
     }
     

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {
    @@ -64,7 +64,7 @@
             NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)
         };
     }
    -

    How do I convert third-party types?

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>
    +

    How do I convert third-party types?

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>
     struct adl_serializer {
         static void to_json(json& j, const T& value) {
             // calls the "to_json" method in T's namespace
    @@ -97,7 +97,7 @@
         }
     };
     NLOHMANN_JSON_NAMESPACE_END
    -

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    How can I use get() for non-default constructible/non-copyable types?

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {
    +

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    How can I use get() for non-default constructible/non-copyable types?

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {
         move_only_type() = delete;
         move_only_type(int ii): i(ii) {}
         move_only_type(const move_only_type&) = delete;
    @@ -123,7 +123,7 @@
             }
         };
     }
    -

    Can I write my own serializer? (Advanced use)

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument
    +

    Can I write my own serializer? (Advanced use)

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument
     // if you don't need compile-time checks on T
     template<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>
     struct less_than_32_serializer {
    @@ -159,4 +159,4 @@
           value = j.template template get<T>(); // oops!
         }
     };
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/assertions/index.html b/features/assertions/index.html index 59f8663f5..a4aa6e787 100644 --- a/features/assertions/index.html +++ b/features/assertions/index.html @@ -1,4 +1,4 @@ - Runtime Assertions - JSON for Modern C++

    Runtime Assertions

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    Switch off runtime assertions

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    Change assertion behavior

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    Function with runtime assertions

    Unchecked object access to a const value

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
    + Runtime Assertions - JSON for Modern C++      

    Runtime Assertions

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    Switch off runtime assertions

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    Change assertion behavior

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    Function with runtime assertions

    Unchecked object access to a const value

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
     
    @@ -8,7 +8,7 @@
         auto v = j["missing"];
     }
     

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.
    -

    Constructing from an uninitialized iterator range

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
    +

    Constructing from an uninitialized iterator range

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
     
    @@ -18,7 +18,7 @@
         json j(it1, it2);
     }
     

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.
    -

    Operations on uninitialized iterators

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
    +

    Operations on uninitialized iterators

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
     
    @@ -43,4 +43,4 @@
         }
     }
     

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/bjdata/index.html b/features/binary_formats/bjdata/index.html index 113301cea..af433e44b 100644 --- a/features/binary_formats/bjdata/index.html +++ b/features/binary_formats/bjdata/index.html @@ -1,9 +1,9 @@ - BJData - JSON for Modern C++

    BJData

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    Serialization

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..65535 uint16 u
    number_integer 65536..2147483647 int32 l
    number_integer 2147483648..4294967295 uint32 m
    number_integer 4294967296..9223372036854775807 int64 L
    number_integer 9223372036854775808..18446744073709551615 uint64 M
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..65535 uint16 u
    number_unsigned 65536..2147483647 int32 l
    number_unsigned 2147483648..4294967295 uint32 m
    number_unsigned 4294967296..9223372036854775807 int64 L
    number_unsigned 9223372036854775808..18446744073709551615 uint64 M
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format/ND-array array [
    object see notes on optimized format map {
    binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {
    + BJData - JSON for Modern C++      

    BJData

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    Serialization

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..65535 uint16 u
    number_integer 65536..2147483647 int32 l
    number_integer 2147483648..4294967295 uint32 m
    number_integer 4294967296..9223372036854775807 int64 L
    number_integer 9223372036854775808..18446744073709551615 uint64 M
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..65535 uint16 u
    number_unsigned 65536..2147483647 int32 l
    number_unsigned 2147483648..4294967295 uint32 m
    number_unsigned 4294967296..9223372036854775807 int64 L
    number_unsigned 9223372036854775808..18446744073709551615 uint64 M
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format/ND-array array [
    object see notes on optimized format map {
    binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {
         "_ArrayType_": "uint8",
         "_ArraySize_": [2,3],
         "_ArrayData_": [1,2,3,4,5,6]
     }
    -

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in "_ArraySize_" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>
    +

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in "_ArraySize_" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -71,7 +71,7 @@
     [i1i2i3i4i5i6i7i8]
     [#i8i1i2i3i4i5i6i7i8
     [$i#i812345678
    -

    Deserialization

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker
    no-op no value, next value is read N
    null null Z
    false false F
    true true T
    float16 number_float h
    float32 number_float d
    float64 number_float D
    uint8 number_unsigned U
    int8 number_integer i
    uint16 number_unsigned u
    int16 number_integer I
    uint32 number_unsigned m
    int32 number_integer l
    uint64 number_unsigned M
    int64 number_integer L
    byte number_unsigned B
    string string S
    char string C
    array array (optimized values are supported) [
    ND-array object (in JData annotated array format) [$.#[.
    object object (optimized values are supported) {
    binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>
    +

    Deserialization

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker
    no-op no value, next value is read N
    null null Z
    false false F
    true true T
    float16 number_float h
    float32 number_float d
    float64 number_float D
    uint8 number_unsigned U
    int8 number_integer i
    uint16 number_unsigned u
    int16 number_integer I
    uint32 number_unsigned m
    int32 number_integer l
    uint64 number_unsigned M
    int64 number_integer L
    byte number_unsigned B
    string string S
    char string C
    array array (optimized values are supported) [
    ND-array object (in JData annotated array format) [$.#[.
    object object (optimized values are supported) {
    binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -95,4 +95,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/bson/index.html b/features/binary_formats/bson/index.html index 51406cb8e..93f9fec69 100644 --- a/features/binary_formats/bson/index.html +++ b/features/binary_formats/bson/index.html @@ -1,4 +1,4 @@ - BSON - JSON for Modern C++

    BSON

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    Serialization

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker
    null null null 0x0A
    boolean true, false boolean 0x08
    number_integer -9223372036854775808..-2147483649 int64 0x12
    number_integer -2147483648..2147483647 int32 0x10
    number_integer 2147483648..9223372036854775807 int64 0x12
    number_unsigned 0..2147483647 int32 0x10
    number_unsigned 2147483648..9223372036854775807 int64 0x12
    number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11
    number_float any value double 0x01
    string any value string 0x02
    array any value document 0x04
    object any value document 0x03
    binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, integers larger than 9223372036854775807 cannot be serialized to BSON, and the keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>
    + BSON - JSON for Modern C++      

    BSON

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    Serialization

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker
    null null null 0x0A
    boolean true, false boolean 0x08
    number_integer -9223372036854775808..-2147483649 int64 0x12
    number_integer -2147483648..2147483647 int32 0x10
    number_integer 2147483648..9223372036854775807 int64 0x12
    number_unsigned 0..2147483647 int32 0x10
    number_unsigned 2147483648..9223372036854775807 int64 0x12
    number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11
    number_float any value double 0x01
    string any value string 0x02
    array any value document 0x04
    object any value document 0x03
    binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -21,7 +21,7 @@
         std::cout << std::endl;
     }
     

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 
    -

    Deserialization

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type
    double 0x01 number_float
    string 0x02 string
    document 0x03 object
    array 0x04 array
    binary 0x05 binary
    undefined 0x06 unsupported
    ObjectId 0x07 unsupported
    boolean 0x08 boolean
    UTC Date-Time 0x09 unsupported
    null 0x0A null
    Regular Expr. 0x0B unsupported
    DB Pointer 0x0C unsupported
    JavaScript Code 0x0D unsupported
    Symbol 0x0E unsupported
    JavaScript Code 0x0F unsupported
    int32 0x10 number_integer
    uint64(Timestamp) 0x11 number_unsigned
    128-bit decimal float 0x13 unsupported
    Max Key 0x7F unsupported
    Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Example
    #include <iostream>
    +

    Deserialization

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type
    double 0x01 number_float
    string 0x02 string
    document 0x03 object
    array 0x04 array
    binary 0x05 binary
    undefined 0x06 unsupported
    ObjectId 0x07 unsupported
    boolean 0x08 boolean
    UTC Date-Time 0x09 unsupported
    null 0x0A null
    Regular Expr. 0x0B unsupported
    DB Pointer 0x0C unsupported
    JavaScript Code 0x0D unsupported
    Symbol 0x0E unsupported
    JavaScript Code 0x0F unsupported
    int32 0x10 number_integer
    uint64(Timestamp) 0x11 number_unsigned
    128-bit decimal float 0x13 unsupported
    Max Key 0x7F unsupported
    Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -46,4 +46,4 @@
       "compact": true,
       "schema": 0
     }
    -

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/cbor/index.html b/features/binary_formats/cbor/index.html index 1f4555c87..310f6d412 100644 --- a/features/binary_formats/cbor/index.html +++ b/features/binary_formats/cbor/index.html @@ -1,4 +1,4 @@ - CBOR - JSON for Modern C++

    CBOR

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    Serialization

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte
    null null Null 0xF6
    boolean true True 0xF5
    boolean false False 0xF4
    number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B
    number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A
    number_integer -32768..-129 Negative integer (2 bytes follow) 0x39
    number_integer -128..-25 Negative integer (1 byte follow) 0x38
    number_integer -24..-1 Negative integer 0x20..0x37
    number_integer 0..23 Integer 0x00..0x17
    number_integer 24..255 Unsigned integer (1 byte follow) 0x18
    number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_unsigned 0..23 Integer 0x00..0x17
    number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18
    number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_float any value representable by a float Single-Precision Float 0xFA
    number_float any value NOT representable by a float Double-Precision Float 0xFB
    string length: 0..23 UTF-8 string 0x60..0x77
    string length: 23..255 UTF-8 string (1 byte follow) 0x78
    string length: 256..65535 UTF-8 string (2 bytes follow) 0x79
    string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A
    string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B
    array size: 0..23 array 0x80..0x97
    array size: 23..255 array (1 byte follow) 0x98
    array size: 256..65535 array (2 bytes follow) 0x99
    array size: 65536..4294967295 array (4 bytes follow) 0x9A
    array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B
    object size: 0..23 map 0xA0..0xB7
    object size: 23..255 map (1 byte follow) 0xB8
    object size: 256..65535 map (2 bytes follow) 0xB9
    object size: 65536..4294967295 map (4 bytes follow) 0xBA
    object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB
    binary size: 0..23 byte string 0x40..0x57
    binary size: 23..255 byte string (1 byte follow) 0x58
    binary size: 256..65535 byte string (2 bytes follow) 0x59
    binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A
    binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see "binary" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by "break" (0x7F)
    • arrays terminated by "break" (0x9F)
    • maps terminated by "break" (0xBF)
    • byte strings terminated by "break" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>
    + CBOR - JSON for Modern C++      

    CBOR

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    Serialization

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte
    null null Null 0xF6
    boolean true True 0xF5
    boolean false False 0xF4
    number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B
    number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A
    number_integer -32768..-129 Negative integer (2 bytes follow) 0x39
    number_integer -128..-25 Negative integer (1 byte follow) 0x38
    number_integer -24..-1 Negative integer 0x20..0x37
    number_integer 0..23 Integer 0x00..0x17
    number_integer 24..255 Unsigned integer (1 byte follow) 0x18
    number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_unsigned 0..23 Integer 0x00..0x17
    number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18
    number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19
    number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A
    number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B
    number_float any value representable by a float Single-Precision Float 0xFA
    number_float any value NOT representable by a float Double-Precision Float 0xFB
    string length: 0..23 UTF-8 string 0x60..0x77
    string length: 23..255 UTF-8 string (1 byte follow) 0x78
    string length: 256..65535 UTF-8 string (2 bytes follow) 0x79
    string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A
    string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B
    array size: 0..23 array 0x80..0x97
    array size: 23..255 array (1 byte follow) 0x98
    array size: 256..65535 array (2 bytes follow) 0x99
    array size: 65536..4294967295 array (4 bytes follow) 0x9A
    array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B
    object size: 0..23 map 0xA0..0xB7
    object size: 23..255 map (1 byte follow) 0xB8
    object size: 256..65535 map (2 bytes follow) 0xB9
    object size: 65536..4294967295 map (4 bytes follow) 0xBA
    object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB
    binary size: 0..23 byte string 0x40..0x57
    binary size: 23..255 byte string (1 byte follow) 0x58
    binary size: 256..65535 byte string (2 bytes follow) 0x59
    binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A
    binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see "binary" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by "break" (0x7F)
    • arrays terminated by "break" (0x9F)
    • maps terminated by "break" (0xBF)
    • byte strings terminated by "break" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -21,7 +21,7 @@
         std::cout << std::endl;
     }
     

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
    -

    Deserialization

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte
    Integer number_unsigned 0x00..0x17
    Unsigned integer number_unsigned 0x18
    Unsigned integer number_unsigned 0x19
    Unsigned integer number_unsigned 0x1A
    Unsigned integer number_unsigned 0x1B
    Negative integer number_integer 0x20..0x37
    Negative integer number_integer 0x38
    Negative integer number_integer 0x39
    Negative integer number_integer 0x3A
    Negative integer number_integer 0x3B
    Byte string binary 0x40..0x57
    Byte string binary 0x58
    Byte string binary 0x59
    Byte string binary 0x5A
    Byte string binary 0x5B
    UTF-8 string string 0x60..0x77
    UTF-8 string string 0x78
    UTF-8 string string 0x79
    UTF-8 string string 0x7A
    UTF-8 string string 0x7B
    UTF-8 string string 0x7F
    array array 0x80..0x97
    array array 0x98
    array array 0x99
    array array 0x9A
    array array 0x9B
    array array 0x9F
    map object 0xA0..0xB7
    map object 0xB8
    map object 0xB9
    map object 0xBA
    map object 0xBB
    map object 0xBF
    False false 0xF4
    True true 0xF5
    Null null 0xF6
    Half-Precision Float number_float 0xF9
    Single-Precision Float number_float 0xFA
    Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>
    +

    Deserialization

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte
    Integer number_unsigned 0x00..0x17
    Unsigned integer number_unsigned 0x18
    Unsigned integer number_unsigned 0x19
    Unsigned integer number_unsigned 0x1A
    Unsigned integer number_unsigned 0x1B
    Negative integer number_integer 0x20..0x37
    Negative integer number_integer 0x38
    Negative integer number_integer 0x39
    Negative integer number_integer 0x3A
    Negative integer number_integer 0x3B
    Byte string binary 0x40..0x57
    Byte string binary 0x58
    Byte string binary 0x59
    Byte string binary 0x5A
    Byte string binary 0x5B
    UTF-8 string string 0x60..0x77
    UTF-8 string string 0x78
    UTF-8 string string 0x79
    UTF-8 string string 0x7A
    UTF-8 string string 0x7B
    UTF-8 string string 0x7F
    array array 0x80..0x97
    array array 0x98
    array array 0x99
    array array 0x9A
    array array 0x9B
    array array 0x9F
    map object 0xA0..0xB7
    map object 0xB8
    map object 0xB9
    map object 0xBA
    map object 0xBB
    map object 0xBF
    False false 0xF4
    True true 0xF5
    Null null 0xF6
    Half-Precision Float number_float 0xF9
    Single-Precision Float number_float 0xFA
    Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -45,4 +45,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/index.html b/features/binary_formats/index.html index ca8602f20..8eb4f259c 100644 --- a/features/binary_formats/index.html +++ b/features/binary_formats/index.html @@ -1 +1 @@ - Binary Formats - JSON for Modern C++

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file + Binary Formats - JSON for Modern C++

    Binary Formats

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    Comparison

    Completeness

    Format Serialization Deserialization
    BJData complete complete
    BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported
    CBOR complete incomplete, but all JSON types are supported
    MessagePack complete complete
    UBJSON complete complete

    Binary values

    Format Binary values Binary subtypes
    BJData not supported not supported
    BSON supported supported
    CBOR supported supported
    MessagePack supported supported
    UBJSON not supported not supported

    See binary values for more information.

    Sizes

    Format canada.json twitter.json citm_catalog.json jeopardy.json
    BJData 53.2 % 91.1 % 78.1 % 96.6 %
    BJData (size) 58.6 % 92.1 % 86.7 % 97.4 %
    BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 %
    BSON 85.8 % 95.2 % 95.8 % 106.7 %
    CBOR 50.5 % 86.3 % 68.4 % 88.0 %
    MessagePack 50.5 % 86.0 % 68.5 % 87.9 %
    UBJSON 53.2 % 91.3 % 78.2 % 96.6 %
    UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 %
    UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    \ No newline at end of file diff --git a/features/binary_formats/messagepack/index.html b/features/binary_formats/messagepack/index.html index 0654b6f11..ace1b2aa3 100644 --- a/features/binary_formats/messagepack/index.html +++ b/features/binary_formats/messagepack/index.html @@ -1,4 +1,4 @@ - MessagePack - JSON for Modern C++

    MessagePack

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    Serialization

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte
    null null nil 0xC0
    boolean true true 0xC3
    boolean false false 0xC2
    number_integer -9223372036854775808..-2147483649 int64 0xD3
    number_integer -2147483648..-32769 int32 0xD2
    number_integer -32768..-129 int16 0xD1
    number_integer -128..-33 int8 0xD0
    number_integer -32..-1 negative fixint 0xE0..0xFF
    number_integer 0..127 positive fixint 0x00..0x7F
    number_integer 128..255 uint 8 0xCC
    number_integer 256..65535 uint 16 0xCD
    number_integer 65536..4294967295 uint 32 0xCE
    number_integer 4294967296..18446744073709551615 uint 64 0xCF
    number_unsigned 0..127 positive fixint 0x00..0x7F
    number_unsigned 128..255 uint 8 0xCC
    number_unsigned 256..65535 uint 16 0xCD
    number_unsigned 65536..4294967295 uint 32 0xCE
    number_unsigned 4294967296..18446744073709551615 uint 64 0xCF
    number_float any value representable by a float float 32 0xCA
    number_float any value NOT representable by a float float 64 0xCB
    string length: 0..31 fixstr 0xA0..0xBF
    string length: 32..255 str 8 0xD9
    string length: 256..65535 str 16 0xDA
    string length: 65536..4294967295 str 32 0xDB
    array size: 0..15 fixarray 0x90..0x9F
    array size: 16..65535 array 16 0xDC
    array size: 65536..4294967295 array 32 0xDD
    object size: 0..15 fix map 0x80..0x8F
    object size: 16..65535 map 16 0xDE
    object size: 65536..4294967295 map 32 0xDF
    binary size: 0..255 bin 8 0xC4
    binary size: 256..65535 bin 16 0xC5
    binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>
    + MessagePack - JSON for Modern C++      

    MessagePack

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    Serialization

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte
    null null nil 0xC0
    boolean true true 0xC3
    boolean false false 0xC2
    number_integer -9223372036854775808..-2147483649 int64 0xD3
    number_integer -2147483648..-32769 int32 0xD2
    number_integer -32768..-129 int16 0xD1
    number_integer -128..-33 int8 0xD0
    number_integer -32..-1 negative fixint 0xE0..0xFF
    number_integer 0..127 positive fixint 0x00..0x7F
    number_integer 128..255 uint 8 0xCC
    number_integer 256..65535 uint 16 0xCD
    number_integer 65536..4294967295 uint 32 0xCE
    number_integer 4294967296..18446744073709551615 uint 64 0xCF
    number_unsigned 0..127 positive fixint 0x00..0x7F
    number_unsigned 128..255 uint 8 0xCC
    number_unsigned 256..65535 uint 16 0xCD
    number_unsigned 65536..4294967295 uint 32 0xCE
    number_unsigned 4294967296..18446744073709551615 uint 64 0xCF
    number_float any value representable by a float float 32 0xCA
    number_float any value NOT representable by a float float 64 0xCB
    string length: 0..31 fixstr 0xA0..0xBF
    string length: 32..255 str 8 0xD9
    string length: 256..65535 str 16 0xDA
    string length: 65536..4294967295 str 32 0xDB
    array size: 0..15 fixarray 0x90..0x9F
    array size: 16..65535 array 16 0xDC
    array size: 65536..4294967295 array 32 0xDD
    object size: 0..15 fix map 0x80..0x8F
    object size: 16..65535 map 16 0xDE
    object size: 65536..4294967295 map 32 0xDF
    binary size: 0..255 bin 8 0xC4
    binary size: 256..65535 bin 16 0xC5
    binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -21,7 +21,7 @@
         std::cout << std::endl;
     }
     

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 
    -

    Deserialization

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte
    positive fixint number_unsigned 0x00..0x7F
    fixmap object 0x80..0x8F
    fixarray array 0x90..0x9F
    fixstr string 0xA0..0xBF
    nil null 0xC0
    false false 0xC2
    true true 0xC3
    float 32 number_float 0xCA
    float 64 number_float 0xCB
    uint 8 number_unsigned 0xCC
    uint 16 number_unsigned 0xCD
    uint 32 number_unsigned 0xCE
    uint 64 number_unsigned 0xCF
    int 8 number_integer 0xD0
    int 16 number_integer 0xD1
    int 32 number_integer 0xD2
    int 64 number_integer 0xD3
    str 8 string 0xD9
    str 16 string 0xDA
    str 32 string 0xDB
    array 16 array 0xDC
    array 32 array 0xDD
    map 16 object 0xDE
    map 32 object 0xDF
    bin 8 binary 0xC4
    bin 16 binary 0xC5
    bin 32 binary 0xC6
    ext 8 binary 0xC7
    ext 16 binary 0xC8
    ext 32 binary 0xC9
    fixext 1 binary 0xD4
    fixext 2 binary 0xD5
    fixext 4 binary 0xD6
    fixext 8 binary 0xD7
    fixext 16 binary 0xD8
    negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>
    +

    Deserialization

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte
    positive fixint number_unsigned 0x00..0x7F
    fixmap object 0x80..0x8F
    fixarray array 0x90..0x9F
    fixstr string 0xA0..0xBF
    nil null 0xC0
    false false 0xC2
    true true 0xC3
    float 32 number_float 0xCA
    float 64 number_float 0xCB
    uint 8 number_unsigned 0xCC
    uint 16 number_unsigned 0xCD
    uint 32 number_unsigned 0xCE
    uint 64 number_unsigned 0xCF
    int 8 number_integer 0xD0
    int 16 number_integer 0xD1
    int 32 number_integer 0xD2
    int 64 number_integer 0xD3
    str 8 string 0xD9
    str 16 string 0xDA
    str 32 string 0xDB
    array 16 array 0xDC
    array 32 array 0xDD
    map 16 object 0xDE
    map 32 object 0xDF
    bin 8 binary 0xC4
    bin 16 binary 0xC5
    bin 32 binary 0xC6
    ext 8 binary 0xC7
    ext 16 binary 0xC8
    ext 32 binary 0xC9
    fixext 1 binary 0xD4
    fixext 2 binary 0xD5
    fixext 4 binary 0xD6
    fixext 8 binary 0xD7
    fixext 16 binary 0xD8
    negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -45,4 +45,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_formats/ubjson/index.html b/features/binary_formats/ubjson/index.html index a81a257b6..ea90aac8e 100644 --- a/features/binary_formats/ubjson/index.html +++ b/features/binary_formats/ubjson/index.html @@ -1,4 +1,4 @@ - UBJSON - JSON for Modern C++

    UBJSON

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    Serialization

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..2147483647 int32 l
    number_integer 2147483648..9223372036854775807 int64 L
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..2147483647 int32 l
    number_unsigned 2147483648..9223372036854775807 int64 L
    number_unsigned 2147483649..18446744073709551615 high-precision H
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format array [
    object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>
    + UBJSON - JSON for Modern C++      

    UBJSON

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    Serialization

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker
    null null null Z
    boolean true true T
    boolean false false F
    number_integer -9223372036854775808..-2147483649 int64 L
    number_integer -2147483648..-32769 int32 l
    number_integer -32768..-129 int16 I
    number_integer -128..127 int8 i
    number_integer 128..255 uint8 U
    number_integer 256..32767 int16 I
    number_integer 32768..2147483647 int32 l
    number_integer 2147483648..9223372036854775807 int64 L
    number_unsigned 0..127 int8 i
    number_unsigned 128..255 uint8 U
    number_unsigned 256..32767 int16 I
    number_unsigned 32768..2147483647 int32 l
    number_unsigned 2147483648..9223372036854775807 int64 L
    number_unsigned 2147483649..18446744073709551615 high-precision H
    number_float any value float64 D
    string with shortest length indicator string S
    array see notes on optimized format array [
    object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -66,7 +66,7 @@
     [i1i2i3i4i5i6i7i8]
     [#i8i1i2i3i4i5i6i7i8
     [$i#i812345678
    -

    Deserialization

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker
    no-op no value, next value is read N
    null null Z
    false false F
    true true T
    float32 number_float d
    float64 number_float D
    uint8 number_unsigned U
    int8 number_integer i
    int16 number_integer I
    int32 number_integer l
    int64 number_integer L
    string string S
    char string C
    array array (optimized values are supported) [
    object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>
    +

    Deserialization

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker
    no-op no value, next value is read N
    null null Z
    false false F
    true true T
    float32 number_float d
    float64 number_float D
    uint8 number_unsigned U
    int8 number_integer i
    int16 number_integer I
    int32 number_integer l
    int64 number_integer L
    string string S
    char string C
    array array (optimized values are supported) [
    object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -90,4 +90,4 @@
       "compact": true,
       "schema": 0
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/binary_values/index.html b/features/binary_values/index.html index 69c1a1141..cc33a4515 100644 --- a/features/binary_values/index.html +++ b/features/binary_values/index.html @@ -1,4 +1,4 @@ - Binary Values - JSON for Modern C++

    Binary Values

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    API for binary values

    classDiagram
    + Binary Values - JSON for Modern C++      

    Binary Values

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    API for binary values

    classDiagram
     
     class binary_t ["json::binary_t"] {
         +void set_subtype(std::uint64_t subtype)
    @@ -23,18 +23,18 @@ vector <|-- binary_t

    By default, binary values are stored as binary.subtype(); // returns 23

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4
     binary[1];      // returns 0xFE
    -

    JSON values can be constructed from json::binary_t:

    json j = binary;
    +

    JSON values can be constructed from json::binary_t:

    json j = binary;
     

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true
     j.is_primitive(); // returns true
    -

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true
    +

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true
     j.get_binary().size();         // returns 4
    -

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);
    +

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);
     auto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});
     
     j2 == j;                        // returns true
     j3.get_binary().has_subtype();  // returns false
     j3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype
    -

    Serialization

    Binary values are serialized differently according to the formats.

    JSON

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42
    +

    Serialization

    Binary values are serialized differently according to the formats.

    JSON

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42
     json j;
     j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);
     
    @@ -46,7 +46,7 @@ vector <|-- binary_t

    By default, binary values are stored as "subtype": 42 } } -

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    BJData

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)
    +

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    BJData

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)
     json j;
     j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);
     
    @@ -59,7 +59,7 @@ vector <|-- binary_t

    By default, binary values are stored as 0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE // content (each byte prefixed with 'U') 0x5D // ']' 0x7D // '}' -

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization
    +

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization
     auto v = json::to_bjdata(j, true, true);
     

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'
         0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers
    @@ -69,10 +69,10 @@ vector <|-- binary_t

    By default, binary values are stored as 0x24 0x55 // '$' 'U' type of the array elements: unsigned integers 0x23 0x69 0x04 // '#' i 4 number of array elements 0xCA 0xFE 0xBA 0xBE // content -

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
    +

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
       "binary": [202, 254, 186, 190]
     }
    -

    BSON

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42
    +

    BSON

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42
     json j;
     j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);
     
    @@ -91,7 +91,7 @@ vector <|-- binary_t

    By default, binary values are stored as "subtype": 42 } } -

    CBOR

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42
    +

    CBOR

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42
     json j;
     j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);
     
    @@ -127,7 +127,7 @@ vector <|-- binary_t

    By default, binary values are stored as "subtype": 42 } } -

    UBJSON

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)
    +

    UBJSON

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)
     json j;
     j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);
     
    @@ -140,7 +140,7 @@ vector <|-- binary_t

    By default, binary values are stored as 0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE // content (each byte prefixed with 'U') 0x5D // ']' 0x7D // '}' -

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization
    +

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization
     auto v = json::to_ubjson(j, true, true);
     

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'
         0x24                            // '$' type of the object elements
    @@ -151,7 +151,7 @@ vector <|-- binary_t

    By default, binary values are stored as 0x24 0x55 // '$' 'U' type of the array elements: unsigned integers 0x23 0x69 0x04 // '#' i 4 number of array elements 0xCA 0xFE 0xBA 0xBE // content -

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
    +

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {
       "binary": [202, 254, 186, 190]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/comments/index.html b/features/comments/index.html index 4725d8c78..784f443e1 100644 --- a/features/comments/index.html +++ b/features/comments/index.html @@ -1,4 +1,4 @@ - Comments - JSON for Modern C++

    Comments

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {
    + Comments - JSON for Modern C++      

    Comments

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {
         // update in 2006: removed Pluto
         "planets": ["Mercury", "Venus", "Earth", "Mars",
                     "Jupiter", "Uranus", "Neptune" /*, "Pluto" */]
    @@ -47,4 +47,4 @@ last read: '<U+000A>    {<U+000A>        /'; expected string
         "Neptune"
       ]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/element_access/checked_access/index.html b/features/element_access/checked_access/index.html index 777853cdf..e58c9febc 100644 --- a/features/element_access/checked_access/index.html +++ b/features/element_access/checked_access/index.html @@ -1,10 +1,10 @@ - Checked access: at - JSON for Modern C++

    Checked access: at

    Overview

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {
    + Checked access: at - JSON for Modern C++      

    Checked access: at

    Overview

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {
         "name": "Mary Smith",
         "age": 42,
         "hobbies": ["hiking", "reading"]
     }
     

    Assume the value is parsed to a json variable j.

    expression value
    j {"name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"]}
    j.at("name") "Mary Smith"
    j.at("age") 42
    j.at("hobbies") ["hiking", "reading"]
    j.at("hobbies").at(0) "hiking"
    j.at("hobbies").at(1) "reading"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at("name") = "John Smith";
    -

    This code produces the following JSON value:

    {
    +

    This code produces the following JSON value:

    {
         "name": "John Smith",
         "age": 42,
         "hobbies": ["hiking", "reading"]
    @@ -12,4 +12,4 @@
     

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at("hobbies").at(3) = "cooking";
     

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range
     

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range
    -

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file +

    Notes

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown
    \ No newline at end of file diff --git a/features/element_access/default_value/index.html b/features/element_access/default_value/index.html index b5354adde..a79514a4d 100644 --- a/features/element_access/default_value/index.html +++ b/features/element_access/default_value/index.html @@ -1,5 +1,5 @@ - Access with default value: value - JSON for Modern C++

    Access with default value: value

    Overview

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present.

    Example

    Consider the following JSON value:

    {
    + Access with default value: value - JSON for Modern C++      

    Access with default value: value

    Overview

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present.

    Example

    Consider the following JSON value:

    {
         "logOutput": "result.log",
         "append": true
     }
    -

    Assume the value is parsed to a json variable j.

    expression value
    j {"logOutput": "result.log", "append": true}
    j.value("logOutput", "logfile.log") "result.log"
    j.value("append", true) true
    j.value("append", false) true
    j.value("logLevel", "verbose") "verbose"

    Note

    Exceptions

    \ No newline at end of file +

    Assume the value is parsed to a json variable j.

    expression value
    j {"logOutput": "result.log", "append": true}
    j.value("logOutput", "logfile.log") "result.log"
    j.value("append", true) true
    j.value("append", false) true
    j.value("logLevel", "verbose") "verbose"

    Note

    Exceptions

    \ No newline at end of file diff --git a/features/element_access/index.html b/features/element_access/index.html index 5916fef73..cc46238de 100644 --- a/features/element_access/index.html +++ b/features/element_access/index.html @@ -1 +1 @@ - Element Access - JSON for Modern C++

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file + Element Access - JSON for Modern C++

    Element Access

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    \ No newline at end of file diff --git a/features/element_access/unchecked_access/index.html b/features/element_access/unchecked_access/index.html index 20c645f25..e2e011b2b 100644 --- a/features/element_access/unchecked_access/index.html +++ b/features/element_access/unchecked_access/index.html @@ -1,22 +1,22 @@ - Unchecked access: operator[] - JSON for Modern C++

    Unchecked access: operator[]

    Overview

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {
    + Unchecked access: operator[] - JSON for Modern C++      

    Unchecked access: operator[]

    Overview

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {
         "name": "Mary Smith",
         "age": 42,
         "hobbies": ["hiking", "reading"]
     }
     

    Assume the value is parsed to a json variable j.

    expression value
    j {"name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"]}
    j["name"] "Mary Smith"
    j["age"] 42
    j["hobbies"] ["hiking", "reading"]
    j["hobbies"][0] "hiking"
    j["hobbies"][1] "reading"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can be immediately be overwritten.

    Write access
    j["name"] = "John Smith";
     j["maidenName"] = "Jones";
    -

    This code produces the following JSON value:

    {
    +

    This code produces the following JSON value:

    {
         "name": "John Smith",
         "maidenName": "Jones",
         "age": 42,
         "hobbies": ["hiking", "reading"]
     }
    -

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j["hobbies"][0] = "running";
    +

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j["hobbies"][0] = "running";
     j["hobbies"][3] = "cooking";
    -

    This code produces the following JSON value:

    {
    +

    This code produces the following JSON value:

    {
         "name": "John Smith",
         "maidenName": "Jones",
         "age": 42,
         "hobbies": ["running", "reading", null, "cooking"]
     }
    -

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file +

    Notes

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    Summary

    scenario non-const value const value
    access to existing object key reference to existing value is returned const reference to existing value is returned
    access to valid array index reference to existing value is returned const reference to existing value is returned
    access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode
    access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode
    \ No newline at end of file diff --git a/features/enum_conversion/index.html b/features/enum_conversion/index.html index 9d8c9abb3..f0f836035 100644 --- a/features/enum_conversion/index.html +++ b/features/enum_conversion/index.html @@ -1,4 +1,4 @@ - Specializing enum conversion - JSON for Modern C++

    Specializing enum conversion

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration
    + Specializing enum conversion - JSON for Modern C++      

    Specializing enum conversion

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration
     enum TaskState {
         TS_STOPPED,
         TS_RUNNING,
    @@ -24,4 +24,4 @@
     // undefined json value to enum (where the first map entry above is the default)
     json jPi = 3.14;
     assert(jPi.template get<TaskState>() == TS_INVALID );
    -

    Notes

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    \ No newline at end of file +

    Notes

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    \ No newline at end of file diff --git a/features/iterators/index.html b/features/iterators/index.html index f978a1a19..e169b6dd4 100644 --- a/features/iterators/index.html +++ b/features/iterators/index.html @@ -1,4 +1,4 @@ - Iterators - JSON for Modern C++

    Iterators

    Overview

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    Illustration from cppreference.com

    Iteration order for objects

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
    + Iterators - JSON for Modern C++      

    Iterators

    Overview

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    Illustration from cppreference.com

    Iteration order for objects

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
     json j;
     j["one"] = 1;
     j["two"] = 2;
    @@ -11,7 +11,7 @@
     

    Output:

    1
     3
     2
    -

    The reason for the order is the lexicographic ordering of the object keys "one", "three", "two".

    Access object key during iteration

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
    +

    The reason for the order is the lexicographic ordering of the object keys "one", "three", "two".

    Access object key during iteration

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {"one": 1, "two": 2, "three": 3}
     json j;
     j["one"] = 1;
     j["two"] = 2;
    @@ -29,7 +29,7 @@
         // "it" is of type json::reference and has no key() member
         std::cout << "value: " << it << '\n';
     }
    -

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())
    +

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())
     {
         std::cout << "key: " << el.key() << ", value:" << el.value() << '\n';
     }
    @@ -37,7 +37,7 @@
     {
         std::cout << "key: " << key << ", value:" << val << '\n';
     }
    -

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    Reverse iteration order

    rbegin() and rend() return iterators in the reverse sequence.

    Illustration from cppreference.com

    Example
    json j = {1, 2, 3, 4};
    +

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    Reverse iteration order

    rbegin() and rend() return iterators in the reverse sequence.

    Illustration from cppreference.com

    Example
    json j = {1, 2, 3, 4};
     
     for (auto it = j.rbegin(); it != j.rend(); ++it)
     {
    @@ -47,10 +47,10 @@
     3
     2
     1
    -

    Iterating strings and binary values

    Note that "value" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = "Hello, world";
    +

    Iterating strings and binary values

    Note that "value" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = "Hello, world";
     for (auto it = j.begin(); it != j.end(); ++it)
     {
         std::cout << *it << std::endl;
     }
     

    Output:

    "Hello, world"
    -

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file +

    Iterator invalidation

    Operations invalidated iterators
    clear all
    \ No newline at end of file diff --git a/features/json_patch/index.html b/features/json_patch/index.html index b29ee1346..c85ef1796 100644 --- a/features/json_patch/index.html +++ b/features/json_patch/index.html @@ -1,4 +1,4 @@ - JSON Patch and Diff - JSON for Modern C++

    JSON Patch and Diff

    Patches

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>
    + JSON Patch and Diff - JSON for Modern C++      

    JSON Patch and Diff

    Patches

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -42,8 +42,8 @@
             "world"
         ]
     }
    -

    Diff

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;
    -
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>
    +

    Diff

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;
    +
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>
     #include <iomanip>
     #include <nlohmann/json.hpp>
     
    @@ -105,4 +105,4 @@
             "world"
         ]
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/json_pointer/index.html b/features/json_pointer/index.html index 3ea71ca71..1d2d491ab 100644 --- a/features/json_pointer/index.html +++ b/features/json_pointer/index.html @@ -1,4 +1,4 @@ - JSON Pointer - JSON for Modern C++

    JSON Pointer

    Introduction

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {
    + JSON Pointer - JSON for Modern C++      

    JSON Pointer

    Introduction

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {
         "array": ["A", "B", "C"],
         "nested": {
             "one": 1,
    @@ -6,9 +6,9 @@
             "three": [true, false]
         }
     }
    -

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value
    `` {"array":["A","B","C"],"nested":{"one":1,"two":2,"three":[true,false]}}
    /array ["A","B","C"]
    /array/0 A
    /array/1 B
    /array/2 C
    /nested {"one":1,"two":2,"three":[true,false]}
    /nested/one 1
    /nested/two 2
    /nested/three [true,false]
    /nested/three/0 true
    /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key "". See RFC 6901 for more information.

    JSON Pointer creation

    JSON Pointers can be created from a string:

    json::json_pointer p = "/nested/one";
    +

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value
    `` {"array":["A","B","C"],"nested":{"one":1,"two":2,"three":[true,false]}}
    /array ["A","B","C"]
    /array/0 A
    /array/1 B
    /array/2 C
    /nested {"one":1,"two":2,"three":[true,false]}
    /nested/one 1
    /nested/two 2
    /nested/three [true,false]
    /nested/three/0 true
    /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key "". See RFC 6901 for more information.

    JSON Pointer creation

    JSON Pointers can be created from a string:

    json::json_pointer p = "/nested/one";
     

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = "/nested/one"_json_pointer;
    -

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    Value access

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above
    +

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    Value access

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above
     auto j = json::parse(R"({
         "array": ["A", "B", "C"],
         "nested": {
    @@ -23,7 +23,7 @@
     auto val1 = j["/nested/one"_json_pointer];                  // 1
     auto val2 = j.at(json::json_pointer("/nested/three/1"));    // false
     auto val3 = j.value(json::json_pointer("/nested/four"), 0); // 0
    -

    Flatten / unflatten

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above
    +

    Flatten / unflatten

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above
     auto j = json::parse(R"({
         "array": ["A", "B", "C"],
         "nested": {
    @@ -45,4 +45,4 @@
       "/nested/three/1": false
     }
     

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();
    -

    See also

    \ No newline at end of file +

    See also

    \ No newline at end of file diff --git a/features/macros/index.html b/features/macros/index.html index 7496c1c7f..fe35a2a50 100644 --- a/features/macros/index.html +++ b/features/macros/index.html @@ -1 +1 @@ - Supported Macros - JSON for Modern C++

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)

    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)

    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)

    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)

    NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)

    NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)

    This macro can be used to simplify the serialization/deserialization of types if (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object.

    The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE.

    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...)

    This macro is similar to NLOHMANN_DEFINE_TYPE_INTRUSIVE. It will not throw an exception in from_json() due to a missing value in the JSON object, but can throw due to a mismatched type. The from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.

    NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...)

    This macro is similar to NLOHMANN_DEFINE_TYPE_INTRUSIVE except that it defines only the serialization code. This is useful when the user type does not have a default constructor and only the serialization is required.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE.

    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)

    This macro can be used to simplify the serialization/deserialization of types if (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object.

    The macro is to be defined inside the namespace of the class/struct to create code for. Private members cannot be accessed. Use NLOHMANN_DEFINE_TYPE_INTRUSIVE in these scenarios. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.

    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...)

    This macro is similar to NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE. It will not throw an exception in from_json() due to a missing value in the JSON object, but can throw due to a mismatched type. The from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.

    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...)

    This macro is similar to NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE except that it defines only the serialization code. This is useful when the user type does not have a default constructor and only the serialization is required.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file + Supported Macros - JSON for Modern C++

    Supported Macros

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    JSON_ASSERT(x)

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    JSON_CATCH_USER(exception)

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    JSON_DIAGNOSTICS

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    JSON_NOEXCEPTION

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    JSON_DISABLE_ENUM_SERIALIZATION

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    JSON_NO_IO

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    JSON_SKIP_LIBRARY_VERSION_CHECK

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    JSON_SKIP_UNSUPPORTED_COMPILER_CHECK

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    JSON_THROW_USER(exception)

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    JSON_TRY_USER

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    JSON_USE_IMPLICIT_CONVERSIONS

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    \ No newline at end of file diff --git a/features/merge_patch/index.html b/features/merge_patch/index.html index 94816db8a..d9d823c47 100644 --- a/features/merge_patch/index.html +++ b/features/merge_patch/index.html @@ -1,4 +1,4 @@ - JSON Merge Patch - JSON for Modern C++

    JSON Merge Patch

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>
    + JSON Merge Patch - JSON for Modern C++      

    JSON Merge Patch

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>
     #include <nlohmann/json.hpp>
     #include <iomanip> // for std::setw
     
    @@ -50,4 +50,4 @@
         ],
         "title": "Hello!"
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/namespace/index.html b/features/namespace/index.html index a9dab652e..00ffd63e6 100644 --- a/features/namespace/index.html +++ b/features/namespace/index.html @@ -1,4 +1,4 @@ - nlohmann Namespace - JSON for Modern C++

    nlohmann Namespace

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    Structure

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2
    + nlohmann Namespace - JSON for Modern C++      

    nlohmann Namespace

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    Structure

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2
     

    Purpose

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph
         json["<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0"]
         json_diag["<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1"]
    @@ -7,6 +7,6 @@
     
         library --> json
         app --> json_diag
    -    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    Limitations

    Neither the compiler nor the linker will issue as much as a warning when translation units – intended to be linked together and that include different versions and/or configurations of the JSON library – exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    Disabling the version component

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions – but not configurations – to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Disabling the inline namespace completely

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {
    +    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    Limitations

    Neither the compiler nor the linker will issue as much as a warning when translation units – intended to be linked together and that include different versions and/or configurations of the JSON library – exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    Disabling the version component

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions – but not configurations – to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Disabling the inline namespace completely

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {
     #define NLOHMANN_JSON_NAMESPACE_END    }
    -

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    \ No newline at end of file +

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    Version history

    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    \ No newline at end of file diff --git a/features/object_order/index.html b/features/object_order/index.html index 32f51a8aa..5f5019147 100644 --- a/features/object_order/index.html +++ b/features/object_order/index.html @@ -1,4 +1,4 @@ - Object Order - JSON for Modern C++

    Object Order

    The JSON standard defines objects as "an unordered collection of zero or more name/value pairs". As such, an implementation does not need to preserve any specific order of object keys.

    Default behavior: sort keys

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>
    + Object Order - JSON for Modern C++      

    Object Order

    The JSON standard defines objects as "an unordered collection of zero or more name/value pairs". As such, an implementation does not need to preserve any specific order of object keys.

    Default behavior: sort keys

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>
     #include "json.hpp"
     
     using json = nlohmann::json;
    @@ -17,7 +17,7 @@
       "three": 3,
       "two": 2
     }
    -

    Alternative behavior: preserve insertion order

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>
    +

    Alternative behavior: preserve insertion order

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using ordered_json = nlohmann::ordered_json;
    @@ -36,7 +36,7 @@
       "two": 2,
       "three": 3
     }
    -

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    Notes on parsing

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {
    +

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    Notes on parsing

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {
       "one": 1,
       "two": 2,
       "three": 3
    @@ -57,4 +57,4 @@
       "three": 3
       "two": 2,
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/index.html b/features/parsing/index.html index 0b806e289..54d65e883 100644 --- a/features/parsing/index.html +++ b/features/parsing/index.html @@ -1 +1 @@ - Parsing - JSON for Modern C++
    \ No newline at end of file + Parsing - JSON for Modern C++
    \ No newline at end of file diff --git a/features/parsing/json_lines/index.html b/features/parsing/json_lines/index.html index 31c650195..b3e3a818d 100644 --- a/features/parsing/json_lines/index.html +++ b/features/parsing/json_lines/index.html @@ -1,8 +1,8 @@ - JSON Lines - JSON for Modern C++

    JSON Lines

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \n. As \r is silently ignored, \r\n is also supported.
    4. The final character may be \n, but is not required to be one.

    JSON Text example

    {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
    + JSON Lines - JSON for Modern C++      

    JSON Lines

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \n. As \r is silently ignored, \r\n is also supported.
    4. The final character may be \n, but is not required to be one.

    JSON Text example

    {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]}
     {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]}
     {"name": "May", "wins": []}
     {"name": "Deloise", "wins": [["three of a kind", "5♣"]]}
    -

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>
    +

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>
     #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -33,4 +33,4 @@
     {
         std::cout << j << std::endl;
     }
    -

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file +

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    \ No newline at end of file diff --git a/features/parsing/parse_exceptions/index.html b/features/parsing/parse_exceptions/index.html index 459e3e057..9daf13185 100644 --- a/features/parsing/parse_exceptions/index.html +++ b/features/parsing/parse_exceptions/index.html @@ -1,4 +1,4 @@ - Parsing and Exceptions - JSON for Modern C++

    Parsing and Exceptions

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;
    + Parsing and Exceptions - JSON for Modern C++      

    Parsing and Exceptions

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;
     try
     {
         j = json::parse(my_input);
    @@ -12,11 +12,11 @@
     {
         std::cerr << "parse error" << std::endl;
     }
    -

    Note there is no diagnostic information available in this scenario.

    Use accept() function

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))
    +

    Note there is no diagnostic information available in this scenario.

    Use accept() function

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))
     {
         std::cerr << "parse error" << std::endl;
     }
    -

    Again, there is no diagnostic information available.

    User-defined SAX interface

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,
    +

    Again, there is no diagnostic information available.

    User-defined SAX interface

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,
                      const std::string& last_token,
                      const json::exception& ex);
     

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>
    @@ -63,4 +63,4 @@
     last read: "3,]"
     parsing unsuccessful!
     parsed value: [1,2,3]
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/parser_callbacks/index.html b/features/parsing/parser_callbacks/index.html index 2f50c2dfb..47c23412a 100644 --- a/features/parsing/parser_callbacks/index.html +++ b/features/parsing/parser_callbacks/index.html @@ -1,7 +1,7 @@ - Parser Callbacks - JSON for Modern C++

    Parser Callbacks

    Overview

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>
    + Parser Callbacks - JSON for Modern C++      

    Parser Callbacks

    Overview

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>
     using parser_callback_t =
         std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;
    -

    Callback event types

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed
    parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
    parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
    parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
    parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
    parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
    parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value
    Example

    When parsing the following JSON text,

    {
    +

    Callback event types

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed
    parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded
    parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key
    parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object
    parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded
    parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array
    parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value
    Example

    When parsing the following JSON text,

    {
         "name": "Berlin",
         "location": [
             52.519444,
    @@ -90,4 +90,4 @@
             "Width": 800
         }
     }
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/features/parsing/sax_interface/index.html b/features/parsing/sax_interface/index.html index bdbea04ce..c00b9de66 100644 --- a/features/parsing/sax_interface/index.html +++ b/features/parsing/sax_interface/index.html @@ -1,4 +1,4 @@ - SAX Interface - JSON for Modern C++

    SAX Interface

    The library uses a SAX-like interface with the following functions:

    classDiagram
    + SAX Interface - JSON for Modern C++      

    SAX Interface

    The library uses a SAX-like interface with the following functions:

    classDiagram
     
     class sax_t ["json::sax_t"] {
         <<interface>>
    @@ -49,4 +49,4 @@ class sax_t ["json::sax_t"] {
     
     // called when a parse error occurs; byte position, the last token, and an exception is passed
     bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);
    -

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file +

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    See also

    \ No newline at end of file diff --git a/features/types/index.html b/features/types/index.html index f3e8fdf4f..9e4bf118e 100644 --- a/features/types/index.html +++ b/features/types/index.html @@ -1,4 +1,4 @@ - Types - JSON for Modern C++

    Types

    This page gives an overview how JSON values are stored and how this can be configured.

    Overview

    By default, JSON values are stored as follows:

    JSON type C++ type
    object std::map<std::string, basic_json>
    array std::vector<basic_json>
    null std::nullptr_t
    string std::string
    boolean bool
    number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    Storage

    classDiagram
    + Types - JSON for Modern C++      

    Types

    This page gives an overview how JSON values are stored and how this can be configured.

    Overview

    By default, JSON values are stored as follows:

    JSON type C++ type
    object std::map<std::string, basic_json>
    array std::vector<basic_json>
    null std::nullptr_t
    string std::string
    boolean bool
    number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    Storage

    classDiagram
     
     class value_t {
         <<enumeration>>
    @@ -39,7 +39,7 @@ class basic_json {
     }
     
     basic_json .. json_value
    -basic_json .. value_t

    Template arguments

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<
    +basic_json .. value_t

    Template arguments

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<
         template<typename U, typename V, typename... Args> class ObjectType = std::map,
         template<typename U, typename... Args> class ArrayType = std::vector,
         class StringType = std::string,
    @@ -67,14 +67,14 @@ basic_json .. value_t

    Template arguments< using number_float_t = NumberFloatType; using binary_t = nlohmann::byte_container_with_subtype<BinaryType>; -

    Objects

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    Default type

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<
    +

    Objects

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    Default type

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<
       std::string, // key_type
       basic_json, // value_type
       std::less<>, // key_compare
       std::allocator<std::pair<const std::string, basic_json>> // allocator_type
     >
    -

    Behavior

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {"key": 2, "key": 1} could be equal to either {"key": 1} or {"key": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {"b": 1, "a": 2} and {"a": 2, "b": 1} will be stored and serialized as {"a": 2, "b": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be treated as equal.

    Key order

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified "unordered" nature of JSON objects.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    Storage

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    Arrays

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    Default type

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<
    +

    Behavior

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {"key": 2, "key": 1} could be equal to either {"key": 1} or {"key": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {"b": 1, "a": 2} and {"a": 2, "b": 1} will be stored and serialized as {"a": 2, "b": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {"b": 1, "a": 2} and {"a": 2, "b": 1} will be treated as equal.

    Key order

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified "unordered" nature of JSON objects.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    Storage

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    Arrays

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    Default type

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<
       basic_json, // value_type
       std::allocator<basic_json> // allocator_type
     >
    -

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file +

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    Storage

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    Strings

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    Default type

    With the default values for StringType (std::string), the default value for string_t is std::string.

    Encoding

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    String comparison

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    Storage

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    Booleans

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    Default type

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    Storage

    Boolean values are stored directly inside a basic_json type.

    Numbers

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    Default types

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    Default behavior

    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.

    Limits

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    Storage

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    \ No newline at end of file diff --git a/features/types/number_handling/index.html b/features/types/number_handling/index.html index 03f6ac154..c4178ca4e 100644 --- a/features/types/number_handling/index.html +++ b/features/types/number_handling/index.html @@ -1,8 +1,8 @@ - Number Handling - JSON for Modern C++

    Number Handling

    This document describes how the library is handling numbers.

    Background

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    JSON number syntax

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    Syntax for JSON numbers

    Number interoperability

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    Library implementation

    This section describes how the above number specification is implemented by this library.

    Number storage

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.

    Number limits

    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.

    Zeros

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization
    0 std::uint64_t(0) 0
    -0 std::int64_t(0) 0
    0.0 double(0.0) 0.0
    -0.0 double(-0.0) -0.0
    0E0 double(0.0) 0.0
    -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    Number serialization

    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allow round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    \ No newline at end of file diff --git a/home/architecture/index.html b/home/architecture/index.html new file mode 100644 index 000000000..95f9ac6cf --- /dev/null +++ b/home/architecture/index.html @@ -0,0 +1,55 @@ + Architecture - JSON for Modern C++

    Architecture

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    Overview

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators

    Template specializations

    Value storage

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element
    +value_t m_type = value_t::null;
    +
    +/// the value of the current element
    +json_value m_value = {};
    +

    with

    enum class value_t : std::uint8_t
    +{
    +    null,             ///< null value
    +    object,           ///< object (unordered set of name/value pairs)
    +    array,            ///< array (ordered collection of values)
    +    string,           ///< string value
    +    boolean,          ///< boolean value
    +    number_integer,   ///< number value (signed integer)
    +    number_unsigned,  ///< number value (unsigned integer)
    +    number_float,     ///< number value (floating-point)
    +    binary,           ///< binary array (ordered collection of bytes)
    +    discarded         ///< discarded by the parser callback function
    +};
    +
    +union json_value {
    +  /// object (stored with pointer to save storage)
    +  object_t *object;
    +  /// array (stored with pointer to save storage)
    +  array_t *array;
    +  /// string (stored with pointer to save storage)
    +  string_t *string;
    +  /// binary (stored with pointer to save storage)
    +  binary_t *binary;
    +  /// boolean
    +  boolean_t boolean;
    +  /// number (integer)
    +  number_integer_t number_integer;
    +  /// number (unsigned integer)
    +  number_unsigned_t number_unsigned;
    +  /// number (floating-point)
    +  number_float_t number_float;
    +};
    +

    Parsing inputs (deserialization)

    Input is read via input adapters that abstract a source with a common interface:

    /// read a single character
    +std::char_traits<char>::int_type get_character() noexcept;
    +
    +/// read multiple characters to a destination buffer and
    +/// returns the number of characters successfully read
    +template<class T>
    +std::size_t get_elements(T* dest, std::size_t count = 1);
    +

    List examples of input adapters.

    SAX Interface

    TODO

    Writing outputs (serialization)

    Output is written via output adapters:

    template<typename T>
    +void write_character(CharType c);
    +
    +template<typename CharType>
    +void write_characters(const CharType* s, std::size_t length);
    +

    List examples of output adapters.

    Value conversion

    template<class T>
    +void to_json(basic_json& j, const T& t);
    +
    +template<class T>
    +void from_json(const basic_json& j, T& t);
    +

    Additional features

    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros

    Details namespace

    • C++ feature backports
    \ No newline at end of file diff --git a/home/code_of_conduct/index.html b/home/code_of_conduct/index.html index 1e21adbda..f89e4e2ae 100644 --- a/home/code_of_conduct/index.html +++ b/home/code_of_conduct/index.html @@ -1 +1,14 @@ - Code of Conduct - JSON for Modern C++

    Contributor Covenant Code of Conduct

    Our Pledge

    In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

    Our Standards

    Examples of behavior that contributes to creating a positive environment include:

    • Using welcoming and inclusive language
    • Being respectful of differing viewpoints and experiences
    • Gracefully accepting constructive criticism
    • Focusing on what is best for the community
    • Showing empathy towards other community members

    Examples of unacceptable behavior by participants include:

    • The use of sexualized language or imagery and unwelcome sexual attention or advances
    • Trolling, insulting/derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or electronic address, without explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting

    Our Responsibilities

    Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

    Scope

    This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

    Enforcement

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at mail@nlohmann.me. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

    Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

    Attribution

    This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4

    \ No newline at end of file + + + + + + Redirecting... + + + + + +You're being redirected to a new destination. + + diff --git a/home/customers/index.html b/home/customers/index.html index d50e1804c..18b6ad6b1 100644 --- a/home/customers/index.html +++ b/home/customers/index.html @@ -1 +1 @@ - Customers - JSON for Modern C++

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments

    Consumer Electronics

    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    \ No newline at end of file + Customers - JSON for Modern C++

    Customers

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    Space Exploration

    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.

    Automotive

    Gaming and Entertainment

    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments

    Consumer Electronics

    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming

    Operating Systems

    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications

    Development Tools and IDEs

    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include "json.hpp"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications

    Machine Learning and AI

    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components

    Scientific Research and Analysis

    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.

    Business and Productivity Software

    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality

    Databases and Big Data

    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization

    Simulation and Modeling

    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications

    Enterprise and Cloud Applications

    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    \ No newline at end of file diff --git a/home/design_goals/index.html b/home/design_goals/index.html index f5795fbf5..ba3a87558 100644 --- a/home/design_goals/index.html +++ b/home/design_goals/index.html @@ -1 +1 @@ - Design goals - JSON for Modern C++

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file + Design goals - JSON for Modern C++

    Design goals

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    \ No newline at end of file diff --git a/home/exceptions/index.html b/home/exceptions/index.html index 0d679aba2..46d890187 100644 --- a/home/exceptions/index.html +++ b/home/exceptions/index.html @@ -1,4 +1,4 @@ - Exceptions - JSON for Modern C++

    Exceptions

    Overview

    Base type

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions.

    classDiagram
    + Exceptions - JSON for Modern C++      

    Exceptions

    Overview

    Base type

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as "wildcard" to catch exceptions.

    classDiagram
       direction LR
         class `std::exception` {
             <<interface>>
    @@ -34,7 +34,7 @@
          std::abort();}
     
     #include <nlohmann/json.hpp>
    -

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    Extended diagnostic messages

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>
    +

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    Extended diagnostic messages

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -55,7 +55,7 @@
         }
     }
     

    Output:

    [json.exception.type_error.302] type must be number, but is string
    -

    This exception can be hard to debug if storing the value "12" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>
    +

    This exception can be hard to debug if storing the value "12" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>
     
     # define JSON_DIAGNOSTICS 1
     #include <nlohmann/json.hpp>
    @@ -78,7 +78,7 @@
         }
     }
     

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string
    -

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    Parse errors

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>
    +

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    Parse errors

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -101,28 +101,28 @@
     

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal
     exception id: 101
     byte position of error: 8
    -

    json.exception.parse_error.101

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal
    +

    json.exception.parse_error.101

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal
     

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON
     

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \u0009 or \\; last read: '"<U+0009>'"
     

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '"'
     

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'
     

    \u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\u' must be followed by 4 hex digits; last read: '"\u01"'
    -

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '"\uD7FF\uDC00'"
    -

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"vous \352t'
    -

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.

    json.exception.parse_error.102

    JSON uses the \uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \uxxxx entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate
    +

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '"\uD7FF\uDC00'"
    +

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"vous \352t'
    +

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.

    json.exception.parse_error.102

    JSON uses the \uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \uxxxx entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate
     

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    json.exception.parse_error.103

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid
    -

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    json.exception.parse_error.104

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects
    -

    json.exception.parse_error.105

    An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'
    +

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    json.exception.parse_error.104

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects
    +

    json.exception.parse_error.105

    An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'
     
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'
     
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid
    -

    json.exception.parse_error.106

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'
    -

    json.exception.parse_error.107

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
    -

    json.exception.parse_error.108

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
    -

    json.exception.parse_error.109

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number
    +

    json.exception.parse_error.106

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'
    +

    json.exception.parse_error.107

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
    +

    json.exception.parse_error.108

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
    +

    json.exception.parse_error.109

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number
     
    [json.exception.parse_error.109] parse error: array index '+1' is not a number
    -

    json.exception.parse_error.110

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input
    +

    json.exception.parse_error.110

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input
     
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A
    -

    json.exception.parse_error.112

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C
    +

    json.exception.parse_error.112

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C
     
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1
     
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02
     
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02
    @@ -131,8 +131,8 @@ byte position of error: 8
     

    json.exception.parse_error.113

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF
     
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF
     
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82
    -

    json.exception.parse_error.114

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF
    -

    json.exception.parse_error.115

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A
    +

    json.exception.parse_error.114

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF
    +

    json.exception.parse_error.115

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A
     

    Iterator errors

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -157,21 +157,21 @@ byte position of error: 8
     

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
     exception id: 207
     

    json.exception.invalid_iterator.201

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible
    -

    json.exception.invalid_iterator.202

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value
    +

    json.exception.invalid_iterator.202

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value
     
    [json.exception.invalid_iterator.202] iterators first and last must point to objects
    -

    json.exception.invalid_iterator.203

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value
    +

    json.exception.invalid_iterator.203

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value
     

    json.exception.invalid_iterator.204

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range
     

    json.exception.invalid_iterator.205

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range
    -

    json.exception.invalid_iterator.206

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null
    -

    json.exception.invalid_iterator.207

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
    -

    json.exception.invalid_iterator.208

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators
    -

    json.exception.invalid_iterator.209

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators
    +

    json.exception.invalid_iterator.206

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null
    +

    json.exception.invalid_iterator.207

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators
    +

    json.exception.invalid_iterator.208

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators
    +

    json.exception.invalid_iterator.209

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators
     

    json.exception.invalid_iterator.210

    The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit
     

    json.exception.invalid_iterator.211

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container
     

    json.exception.invalid_iterator.212

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers
    -

    json.exception.invalid_iterator.213

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators
    +

    json.exception.invalid_iterator.213

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators
     

    json.exception.invalid_iterator.214

    Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value
    -

    Type errors

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>
    +

    Type errors

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -194,30 +194,30 @@ exception id: 207
     

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string
     exception id: 308
     

    json.exception.type_error.301

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list
    -

    json.exception.type_error.302

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null
    +

    json.exception.type_error.302

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null
     
    [json.exception.type_error.302] type must be string, but is object
    -

    json.exception.type_error.303

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object
    +

    json.exception.type_error.303

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object
     
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number"
    -

    json.exception.type_error.304

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string
    +

    json.exception.type_error.304

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string
     
    [json.exception.type_error.304] cannot use at() with number
    -

    json.exception.type_error.305

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array
    +

    json.exception.type_error.305

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array
     
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object
    -

    json.exception.type_error.306

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number
    -

    json.exception.type_error.307

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string
    -

    json.exception.type_error.308

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string
    -

    json.exception.type_error.309

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array
    +

    json.exception.type_error.306

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number
    +

    json.exception.type_error.307

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string
    +

    json.exception.type_error.308

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string
    +

    json.exception.type_error.309

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array
     
    [json.exception.type_error.309] cannot use insert() with number
    -

    json.exception.type_error.310

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number
    -

    json.exception.type_error.311

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number
    +

    json.exception.type_error.310

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number
    +

    json.exception.type_error.311

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number
     
    [json.exception.type_error.311] cannot use emplace_back() with number
    -

    json.exception.type_error.312

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array
    -

    json.exception.type_error.313

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten
    -

    json.exception.type_error.314

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened
    -

    json.exception.type_error.315

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {"/1", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive
    -

    json.exception.type_error.316

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F
    -

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences

    json.exception.type_error.317

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null
    -
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array
    -

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {"value": true}

    Out of range

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>
    +

    json.exception.type_error.312

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array
    +

    json.exception.type_error.313

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten
    +

    json.exception.type_error.314

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened
    +

    json.exception.type_error.315

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {"/1", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive
    +

    json.exception.type_error.316

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F
    +

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences

    json.exception.type_error.317

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null
    +
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array
    +

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {"value": true}

    Out of range

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
     using json = nlohmann::json;
    @@ -240,14 +240,13 @@ exception id: 308
     

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range
     exception id: 401
     

    json.exception.out_of_range.401

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range
    -

    json.exception.out_of_range.402

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range
    -

    json.exception.out_of_range.403

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found
    -

    json.exception.out_of_range.404

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'
    -

    json.exception.out_of_range.405

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent
    -

    json.exception.out_of_range.406

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'
    -

    json.exception.out_of_range.407

    UBJSON only support integer numbers up to 9223372036854775807.

    Example message

    number overflow serializing '9223372036854775808'
    -

    Note

    Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers, and this exception does not further occur.

    json.exception.out_of_range.408

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167
    -

    json.exception.out_of_range.409

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)
    +

    json.exception.out_of_range.402

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range
    +

    json.exception.out_of_range.403

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found
    +

    json.exception.out_of_range.404

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'
    +

    json.exception.out_of_range.405

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent
    +

    json.exception.out_of_range.406

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'
    +

    json.exception.out_of_range.407

    This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

    Exception cannot occur any more

    • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
    • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.

    json.exception.out_of_range.408

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167
    +

    json.exception.out_of_range.409

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)
     

    Further exceptions

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>
     #include <nlohmann/json.hpp>
     
    @@ -280,5 +279,5 @@ exception id: 401
     }
     

    Output:

    message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
     exception id: 501
    -

    json.exception.other_error.501

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {"op":"test", "path":"/baz", "value":"bar"} on {"baz": "qux"}:

    [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/baz","value":"bar"}
    -
    \ No newline at end of file +

    json.exception.other_error.501

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {"op":"test", "path":"/baz", "value":"bar"} on {"baz": "qux"}:

    [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/baz","value":"bar"}
    +
    \ No newline at end of file diff --git a/home/faq/index.html b/home/faq/index.html index 8052dbce7..563bafd03 100644 --- a/home/faq/index.html +++ b/home/faq/index.html @@ -1,8 +1,8 @@ - FAQ - JSON for Modern C++

    Frequently Asked Questions (FAQ)

    Known bugs

    Brace initialization yields arrays

    Question

    Why does

    json j{true};
    + FAQ - JSON for Modern C++      

    Frequently Asked Questions (FAQ)

    Known bugs

    Brace initialization yields arrays

    Question

    Why does

    json j{true};
     

    and

    json j(true);
    -

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The "culprit" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};
    +

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The "culprit" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};
     

    for arrays and

    json object = {{"one", 1}, {"two", 2}}; 
    -

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    Limitations

    Relaxed parsing

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    Parse errors reading non-ASCII characters

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"Testé$')"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    Wide string handling

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8
    +

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    Limitations

    Relaxed parsing

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    Parse errors reading non-ASCII characters

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"Testé$')"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    Wide string handling

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8
     #include <locale>  // wstring_convert
     
     // encoding function
    @@ -23,7 +23,7 @@
       "encoded": "車B1234 こんにちは",
       "original": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]
     }
    -

    Exceptions

    Parsing without exceptions

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    Key name in exceptions

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    Serialization issues

    Number precision

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    Compilation issues

    Android SDK

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared
    +

    Exceptions

    Parsing without exceptions

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    Key name in exceptions

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    Serialization issues

    Number precision

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    Compilation issues

    Android SDK

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared
     NDK_TOOLCHAIN_VERSION := clang3.6
     APP_CPPFLAGS += -frtti -fexceptions
    -

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file +

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    Missing STL function

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    \ No newline at end of file diff --git a/home/license/index.html b/home/license/index.html index 7781ec0f0..c20b4fa7a 100644 --- a/home/license/index.html +++ b/home/license/index.html @@ -1 +1 @@ - License - JSON for Modern C++

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2024 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file + License - JSON for Modern C++

    License

    The class is licensed under the MIT License:

    Copyright © 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright © 2008-2009 Björn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    \ No newline at end of file diff --git a/home/releases/index.html b/home/releases/index.html index fccbd0ceb..7d41c0b50 100644 --- a/home/releases/index.html +++ b/home/releases/index.html @@ -1,10 +1,10 @@ - Releases - JSON for Modern C++

    Releases

    v3.7.3

    Files

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    Summary

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    🐛 Bug Fixes

    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.2

    Files

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    Summary

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835

    🔨 Further Changes

    • Added WhiteStone Bolt. #1830

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.1

    Files

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    Summary

    This release fixes several small bugs in the library. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.

    ⚡ Improvements

    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720

    🔨 Further Changes

    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.7.0

    Files

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    Summary

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    ✨ New Features

    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670

    🐛 Bug Fixes

    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551

    ⚡ Improvements

    🔨 Further Changes

    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.6.1

    Files

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    Summary

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531

    🔨 Further Changes

    • Fixed a warning for missing field initializers. #1527

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.6.0

    Files

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    ℹ️ This release introduced a regression. Please update to version 3.6.1!

    Summary

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    ✨ New Features

    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474

    🐛 Bug Fixes

    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446

    ⚡ Improvements

    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433

    🔨 Further Changes

    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Imroved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.5.0

    Files

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    Summary

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    ✨ New Features

    🐛 Bug Fixes

    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.

    ⚡ Improvements

    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342

    🔨 Further Changes

    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.4.0

    Files

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    Summary

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    ✨ New Features

    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323

    🐛 Bug Fixes

    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser

    ⚡ Improvements

    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., "while parsing a JSON string"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \u0009 or \t; last read: '<U+0009>'. #1280 #1288 #1303

    🔨 Further Changes

    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.3.0

    Files

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    Summary

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    ✨ New Features

    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231

    🐛 Bug Fixes

    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249

    ⚡ Improvements

    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: "cannot use operator[] with a string argument". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271

    🔨 Further Changes

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.2.0

    Files

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    Summary

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    ✨ New Features

    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)

    🐛 Bug Fixes

    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)

    ⚡ Improvements

    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)

    🔨 Further Changes

    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield 💣
    • updated to Catch 1.12.0

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.1.2

    Files

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    Summary

    This release fixes several bugs in the library. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).

    ⚡ Improvements

    • The parser and the serialization now support user-defined string types (#1006, #1009).

    🔨 Further Changes

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.1.1

    Files

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    Summary

    This release fixes several bugs in the library. All changes are backward-compatible.

    🐛 Bug Fixes

    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().

    🔨 Further Changes

    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).

    🔥 Deprecated functions

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    v3.1.0

    Files

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    Summary

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    ✨ New features

    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.

    ⚡ Improvements

    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Björn Hoehrmann in more scenarios.

    🚚 Reorganization

    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).

    🔨 Further changes

    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.

    🔥 Deprecated functions

    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    v3.0.1

    Files

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    Summary

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    Changes

    • 🐛 The "copy" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • 🐛 An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • ✅ Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • 📝 Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • 📝 Updated the container overview documentation (see #883).
    • 🔧 The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • 🚨 Fixed some compiler warnings (see #858, #882).

    Deprecated functions

    🔥 To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    v3.0.0

    Files

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    Summary

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    💥 Breaking changes

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section "Moving from 2.x.x to 3.0.0" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of re-using those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Björn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).

    🔥 Deprecated functions

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    ✨ New features

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).

    🔨 Further changes

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.

    Moving from 2.x.x to 3.0.0

    User-defined Exceptions

    There are five different exceptions inheriting from json::exception:

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception
    parse_error.101 invalid_argument
    parse_error.102 invalid_argument
    parse_error.103 invalid_argument
    parse_error.104 invalid_argument
    parse_error.105 invalid_argument
    parse_error.106 domain_error
    parse_error.107 domain_error
    parse_error.108 domain_error
    parse_error.109 invalid_argument
    parse_error.110 out_of_range
    parse_error.111 invalid_argument
    parse_error.112 invalid_argument
    invalid_iterator.201 domain_error
    invalid_iterator.202 domain_error
    invalid_iterator.203 domain_error
    invalid_iterator.204 out_of_range
    invalid_iterator.205 out_of_range
    invalid_iterator.206 domain_error
    invalid_iterator.207 domain_error
    invalid_iterator.208 domain_error
    invalid_iterator.209 domain_error
    invalid_iterator.210 domain_error
    invalid_iterator.211 domain_error
    invalid_iterator.212 domain_error
    invalid_iterator.213 domain_error
    invalid_iterator.214 out_of_range
    type_error.301 domain_error
    type_error.302 domain_error
    type_error.303 domain_error
    type_error.304 domain_error
    type_error.305 domain_error
    type_error.306 domain_error
    type_error.307 domain_error
    type_error.308 domain_error
    type_error.309 domain_error
    type_error.310 domain_error
    type_error.311 domain_error
    type_error.313 domain_error
    type_error.314 domain_error
    type_error.315 domain_error
    out_of_range.401 out_of_range
    out_of_range.402 out_of_range
    out_of_range.403 out_of_range
    out_of_range.404 out_of_range
    out_of_range.405 domain_error
    other_error.501 domain_error

    Handling of NaN and INF

    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    Removal of deprecated functions

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);
     

    New code:

    json j = json::parse(ss, cb);
     

    If no callback function is used, also the following code works:

    json j;
     j << ss;
     

    or

    json j;
     ss >> j;
    -

    v2.1.1

    Files

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    Summary

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    Changes

    • 🐛 Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • 🐛 Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • 🐛 Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • 🐛 Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • 🐛 Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • 🐛 All throw calls are now wrapped in macros.
    • 🔒 Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • ✨ The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • 🚨 Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • 🔨 The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • ⚡ The unit tests now compile two times faster.
    • ➕ Cotire is used to speed up the build.
    • ✏ Fixed a lot of typos in the documentation.
    • 📝 Added a section to the README file that lists all used third-party code/tools.
    • 📝 Added a note on constructing a string value vs. parsing.
    • ✅ The test suite now contains 11202597 unit tests.
    • 📝 Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • 👷 Removed Doozer.
    • 👷 Added Codacity.
    • ⬆ Upgraded Catch to version 1.7.2.

    v2.1.0

    Files

    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b

    Summary

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    conversion

    Changes

    • ✨ The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • ✨ Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • ✨ Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • 🐛 A bug in the CBOR parser was fixed which led to a buffer overflow.
    • ✨ The function type_name() is now public. It allows to query the type of a JSON value as string.
    • ✅ Added the Big List of Naughty Strings as test case.
    • ⬆ Updated to Catch v1.6.0.
    • 📝 Some typos in the documentation have been fixed.

    v2.0.10

    Files

    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d

    Summary

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    Changes

    • 🐛 Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • 👷 We now also use the Doozer continuous integration platform.
    • 👷 The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • ✅ Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • 📝 Clarified documentation of find() function to always return end() when called on non-object value types.
    • 🔨 Moved thirdparty test code to test/thirdparty directory.

    v2.0.9

    Files

    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5

    Summary

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    cbor

    Changes

    • ✨ The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • 🔥 simplified the iteration implementation allowing to remove dozens of lines of code
    • 🐛 fixed an integer overflow error detected by Google's OSS-Fuzz
    • 🐛 suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • 🐛 fixed an overflow detection error in the number parser
    • 📝 updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • 📝 added a table of contents to the README file to add some structure
    • 📝 mentioned the many examples and the documentation in the README file
    • 🔨 split unit tests into individual independent binaries to speed up compilation and testing
    • ✅ the test suite now contains 11201886 tests

    v2.0.8

    Files

    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120

    Summary

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    Changes

    • 🐛 fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • 🐛 fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • ✨ the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • ⚡ improved the performance of the serialization (dump function)
    • ⚡ improved the performance of the deserialization (parser)
    • 👷 some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • 👷 the Coverity scan works again
    • 📈 the benchmarking code has been improved to produce more stable results
    • 📝 the README file has been extended and includes more frequently asked examples
    • ✅ the test suite now contains 8905518 tests
    • ⬆ updated Catch to version 1.5.8

    v2.0.7

    Files

    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf

    Summary

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

    Changes

    • The article Parsing JSON is a Minefield 💣 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one "yes" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one "no" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.

    v2.0.6

    Files

    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae

    Summary

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    Changes

    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j["/foo/bar/2"] = 17 (yielding {"foo": "bar": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.

    v2.0.5

    Files

    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9

    Summary

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.

    v2.0.4

    Files

    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda

    Summary

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.

    v2.0.3

    Files

    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.

    v2.0.2

    Files

    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \x10-\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of "raw loops" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.

    v2.0.1

    Files

    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd

    Summary

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    Changes

    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.

    v2.0.0

    Files

    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c

    Summary

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

    Changes

    • 🔟 A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • 👉 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be “flattened” to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by “unflattening” the flattened value using unflatten().
    • 🏥 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, …) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • 🇪🇺 The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • 🍺 Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {"key", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.

    Notes

    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.

    v1.1.0

    Files

    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05

    Summary

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    Changes

    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]

    Notes

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    v1.0.0

    Files

    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de

    Summary

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    Changes

    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    \ No newline at end of file +

    v2.1.1

    Files

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    Summary

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    Changes

    • 🐛 Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • 🐛 Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • 🐛 Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • 🐛 Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • 🐛 Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • 🐛 All throw calls are now wrapped in macros.
    • 🔒 Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • ✨ The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • 🚨 Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • 🔨 The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • ⚡ The unit tests now compile two times faster.
    • ➕ Cotire is used to speed up the build.
    • ✏ Fixed a lot of typos in the documentation.
    • 📝 Added a section to the README file that lists all used third-party code/tools.
    • 📝 Added a note on constructing a string value vs. parsing.
    • ✅ The test suite now contains 11202597 unit tests.
    • 📝 Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • 👷 Removed Doozer.
    • 👷 Added Codacity.
    • ⬆ Upgraded Catch to version 1.7.2.

    v2.1.0

    Files

    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b

    Summary

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    conversion

    Changes

    • ✨ The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • ✨ Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • ✨ Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • 🐛 A bug in the CBOR parser was fixed which led to a buffer overflow.
    • ✨ The function type_name() is now public. It allows to query the type of a JSON value as string.
    • ✅ Added the Big List of Naughty Strings as test case.
    • ⬆ Updated to Catch v1.6.0.
    • 📝 Some typos in the documentation have been fixed.

    v2.0.10

    Files

    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d

    Summary

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    Changes

    • 🐛 Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • 👷 We now also use the Doozer continuous integration platform.
    • 👷 The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • ✅ Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • 📝 Clarified documentation of find() function to always return end() when called on non-object value types.
    • 🔨 Moved thirdparty test code to test/thirdparty directory.

    v2.0.9

    Files

    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5

    Summary

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    cbor

    Changes

    • ✨ The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • 🔥 simplified the iteration implementation allowing to remove dozens of lines of code
    • 🐛 fixed an integer overflow error detected by Google's OSS-Fuzz
    • 🐛 suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • 🐛 fixed an overflow detection error in the number parser
    • 📝 updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • 📝 added a table of contents to the README file to add some structure
    • 📝 mentioned the many examples and the documentation in the README file
    • 🔨 split unit tests into individual independent binaries to speed up compilation and testing
    • ✅ the test suite now contains 11201886 tests

    v2.0.8

    Files

    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120

    Summary

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    Changes

    • 🐛 fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • 🐛 fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • ✨ the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • ⚡ improved the performance of the serialization (dump function)
    • ⚡ improved the performance of the deserialization (parser)
    • 👷 some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • 👷 the Coverity scan works again
    • 📈 the benchmarking code has been improved to produce more stable results
    • 📝 the README file has been extended and includes more frequently asked examples
    • ✅ the test suite now contains 8905518 tests
    • ⬆ updated Catch to version 1.5.8

    v2.0.7

    Files

    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf

    Summary

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield 💣 article. The fixes are backwards compatible.

    Changes

    • The article Parsing JSON is a Minefield 💣 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one "yes" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one "no" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.

    v2.0.6

    Files

    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae

    Summary

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    Changes

    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j["/foo/bar/2"] = 17 (yielding {"foo": "bar": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.

    v2.0.5

    Files

    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9

    Summary

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.

    v2.0.4

    Files

    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda

    Summary

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    Changes

    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.

    v2.0.3

    Files

    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.

    v2.0.2

    Files

    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d

    Summary

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    Changes

    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \x10-\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of "raw loops" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.

    v2.0.1

    Files

    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd

    Summary

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    Changes

    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.

    v2.0.0

    Files

    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c

    Summary

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣.

    Changes

    • 🔟 A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • 👉 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be “flattened” to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by “unflattening” the flattened value using unflatten().
    • 🏥 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, …) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • 🇪🇺 The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • 🍺 Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {"key", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.

    Notes

    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.

    v1.1.0

    Files

    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05

    Summary

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    Changes

    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]

    Notes

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    v1.0.0

    Files

    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de

    Summary

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    Changes

    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    \ No newline at end of file diff --git a/home/sponsors/index.html b/home/sponsors/index.html index 5481aa11b..9c4f90143 100644 --- a/home/sponsors/index.html +++ b/home/sponsors/index.html @@ -1 +1 @@ - Sponsors - JSON for Modern C++
    \ No newline at end of file + Sponsors - JSON for Modern C++
    \ No newline at end of file diff --git a/images/customers.png b/images/customers.png index e122f508954a8d6a3ff7ecde6817c43dc9c69115..3422d388b3e034c2268c660f06b71b48f794e165 100644 GIT binary patch literal 1014336 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

    6Bg^D-^|N9*;p`vqsWM+Uz6xK(_q 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%0D%n1k8 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%0AMF#`yZN3c$F}Iaovk}w?Aevrp#1cU>PmsLs>?Gy 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 z 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 z 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�~6=h#0=**P#qcuMvp!uu$7xR#=p!iFto%NWU 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

    |0Rh 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

    )aXZK^p>tN*d7g}XyeuHEo_f$To##J&rVaZ z`_j(OwZ}8Tmq+zX<2*)(jlpaUYHVx7nzQ$W7987bJYA%5>sRG|8z-#?>wR8YGOHdA zzG1~ZRprUU1JA^_pW88qP4L)7S}^rMb9B+?1Kq@5V*(zDbfY(9ITKecdlgmfPX|67zFi zxuzRlXE5BDelkz)i_h09Z&u~5S+%_?npc=ZBWg=RnQ64E)+4c5e*|(&*#G{Dp2uwx zmoNNI_R0C@>FY6*ahV+NikIt>Kk-B;UruJYrWw3!P4srY)A0Grg*^?kEv{v7v(LW8e5mQwqoWeb&n(yuYQL&>#@zVUwBplBXPb}$PMcm$Ll3=k zQyf?H7AN^<3z@T2NLJk|Ev5H_`qH&Y{9NMf($XD72@_10^OIN&;S4D z`Hm9{#BRhqu4FEeW?ID{QTzYz_y51H?_Z{HYN?gOF@O8NChw*`RJ(fInZtBx*%6NP zCl7bGK4Fzw#&KdpmD;nv-|zpwwtZh~t$Bjpz9og%727~^=aBFDLuZ$^E{uMCGAUz~>Mb zbTF}TttLm26Qm`Q*&9Vc`)j3KTf< z=(hyVtbP`*XWlA5^c8e6)+a_URz39%b{0TzF!MUzH90#R6)Jgo85?pQpJ?*#INI7e zS!i=o;?px8R~hP`2Dcjsik}w{&{y^9-EfYrvi#J6*oK`G=X5nxF)x;WR$!1Q?7)!l zQG4BvM~k}kwDk1$eLAIG|84X9LgB{!iGErU|5c~Q6x~dno|vYmu;Zk+!xF6%H$Bs! zUCQVMjMcEdt$@91(R=BFgq}B zwmKNO$LGUOM}^o0>FMjf9V$4iB%vevMC3WY(Nne_Hb=H;s+WBBXmZR6NqbPBd@^CZ z-!qBNlUnywCJA?Dnz2so-qUcRKw0R))hSH!dY(<3>6+YC!H%7cax)#fdJR&RxGc9R zXzO|8lBTE1_K#(bBxkUxmx!9$NfsCT%0DY*StJ^`&6g}K$(XasK*mSqh>}V{rK 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

    |RC#muo4!50_stTS;TH>m7 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

    A^jnb$dtKJtSv`*IalA7 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 literal 1184114 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

    Hunter

    Summary

    package: nlohmann_json

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)
     

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)
       
       include("cmake/HunterGate.cmake")
      @@ -181,7 +181,7 @@ cmake --build build
       wget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake
       
    2. Build the project with CMake:

      cmake -S . -B build
       cmake --build build
      -

    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    vcpkg

    Summary

    package: nlohmann-json

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json
    +

    vcpkg

    Summary

    package: nlohmann-json

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json
     

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)
       project(json_example)
       
      @@ -202,7 +202,7 @@ cmake --build build
       
    2. Install package:

      vcpkg install nlohmann-json
       
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
       cmake --build build
      -

    cget

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json
    +

    cget

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json
     

    A specific version can be installed with cget install nlohmann/json@v3.11.3. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)
       project(json_example)
       
      @@ -224,8 +224,8 @@ cmake --build build
       
    2. Install the library

      cget install nlohmann/json
       
    3. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake
       cmake --build build
      -

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    NuGet

    Summary

    package: nlohmann.json

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json
    -
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in “Solution Explorer” and select “Manage NuGet Packages…”

    Now you can click on “Browse” tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding “native” and “nativepackage” tags to C++ NuGet packages to distinguish them, but even adding “native” to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, just click on “Install” button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to just build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like “v140” or “vc141” in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version="1.0" encoding="utf-8"?>
      +

    Swift Package Manager

    Summary

    package: nlohmann/json

    NuGet

    Summary

    package: nlohmann.json

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json
    +
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in “Solution Explorer” and select “Manage NuGet Packages…”

    Now you can click on “Browse” tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding “native” and “nativepackage” tags to C++ NuGet packages to distinguish them, but even adding “native” to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, click on “Install” button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like “v140” or “vc141” in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version="1.0" encoding="utf-8"?>
       <packages>
         <package id="nlohmann.json" version="3.5.0" targetFramework="native" />
       </packages>
      @@ -237,8 +237,23 @@ cmake --build build
               </ClCompile>
           </ItemDefinitionGroup>
       </Project>
      -

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn’t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    Conda

    If you are using conda, you can use the package nlohmann_json from conda-forge executing conda install -c conda-forge nlohmann_json. Please file issues here.

    MSYS2

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, just type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    MacPorts

    Summary

    port: nlohmann-json

    If you are using MacPorts, execute

    sudo port install nlohmann-json
    -

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>
      +

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn’t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    Conda

    Summary

    package: nlohmann_json

    If you are using conda, you can use the package nlohmann_json from conda-forge executing

    conda install -c conda-forge nlohmann_json
    +
    Example
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>
      +#include <iostream>
      +#include <iomanip>
      +
      +using json = nlohmann::json;
      +
      +int main()
      +{
      +    std::cout << std::setw(4) << json::meta() << std::endl;
      +}
      +
    2. Create and activate an anvironment "json`:

      conda create -n json
      +conda activate json
      +
    3. Install the package:

      conda install -c conda-forge nlohmann_json
      +
    4. Build the code:

      g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example
      +

    MSYS2

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    MSYS2 clang64 package MSYS2 clangarm64 package MSYS2 mingw package MSYS2 ucrt64 package

    The package is updated automatically.

    MacPorts

    Summary

    port: nlohmann-json

    If you are using MacPorts, execute

    sudo port install nlohmann-json
    +

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>
       #include <iostream>
       #include <iomanip>
       
      @@ -270,7 +285,8 @@ cmake --build build
       
    2. Install the package:

      sudo port install nlohmann-json
       
    3. Compile the code:

      cmake -S . -B build
       cmake --build build
      -

    build2

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, just add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    wsjcpp

    If you are using wsjcpp, you can use the command wsjcpp install "https://github.com/nlohmann/json:develop" to get the latest version. Note you can change the branch ":develop" to an existing tag or another branch.

    wsjcpp reads directly from the GitHub repository and is always up-to-date.

    CPM.cmake

    Summary

    package: gh:nlohmann/json

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage("gh:nlohmann/json@3.11.3")
    +

    build2

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    bdep new -t exe -l c++
    +

    CPM.cmake

    Summary

    package: gh:nlohmann/json

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage("gh:nlohmann/json@3.11.3")
     
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>
       #include <iostream>
       #include <iomanip>
      @@ -294,4 +310,24 @@ cmake --build build
       wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
       
    2. Build

      cmake -S . -B build
       cmake --build build
      -
    \ No newline at end of file +

    xmake

    Summary

    package: nlohmann_json

    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>
      +#include <iostream>
      +#include <iomanip>
      +
      +using json = nlohmann::json;
      +
      +int main()
      +{
      +    std::cout << std::setw(4) << json::meta() << std::endl;
      +}
      +
      xmake.lua
      add_requires("nlohmann_json")
      +
      +add_rules("mode.debug", "mode.release")
      +target("xm")
      +    set_kind("binary")
      +    add_files("example.cpp")
      +    add_packages("nlohmann_json")
      +    set_languages("cxx11")
      +
    2. Build

      xmake
      +
    3. Run

      xmake run
      +

    Other package managers

    The library is also contained in many other package repositories: Packaging status

    Package version overview

    Packaging status


    Buckaroo

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    CocoaPods

    If you are using CocoaPods, you can use the library by adding pod "nlohmann_json", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    wsjcpp

    If you are using wsjcpp, you can use the command wsjcpp install "https://github.com/nlohmann/json:develop" to get the latest version. Note you can change the branch :develop to an existing tag or another branch.

    Warning

    The package manager is outdated as the respective repository has not been updated in years.

    \ No newline at end of file diff --git a/integration/pkg-config/index.html b/integration/pkg-config/index.html index 4df7a15df..b24a01b68 100644 --- a/integration/pkg-config/index.html +++ b/integration/pkg-config/index.html @@ -1,3 +1,3 @@ - Pkg-config - JSON for Modern C++

    Pkg-config

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags
    + Pkg-config - JSON for Modern C++      

    Pkg-config

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags
     

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/integration/xmake/example.cpp b/integration/xmake/example.cpp new file mode 100644 index 000000000..1a7ac4de2 --- /dev/null +++ b/integration/xmake/example.cpp @@ -0,0 +1,10 @@ +#include +#include +#include + +using json = nlohmann::json; + +int main() +{ + std::cout << std::setw(4) << json::meta() << std::endl; +} diff --git a/integration/xmake/xmake.lua b/integration/xmake/xmake.lua new file mode 100644 index 000000000..c5b332897 --- /dev/null +++ b/integration/xmake/xmake.lua @@ -0,0 +1,8 @@ +add_requires("nlohmann_json") + +add_rules("mode.debug", "mode.release") +target("xm") + set_kind("binary") + add_files("example.cpp") + add_packages("nlohmann_json") + set_languages("cxx11") diff --git a/search/search_index.json b/search/search_index.json index 9a0364770..fef99dc37 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
    using json = basic_json<>;\n

    This type is the default specialization of the basic_json class which uses the standard template types.

    "},{"location":"api/json/#examples","title":"Examples","text":"Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/json/#version-history","title":"Version history","text":"

    Since version 1.0.0.

    "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
    std::istream& operator>>(std::istream& i, basic_json& j);\n

    Deserializes an input stream to a JSON value.

    "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

    the stream i

    "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
    "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input
    "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
    • Added in version 1.0.0. Deprecated in version 3.0.0.
    "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
    json operator \"\"_json(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

    json value parsed from s

    "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

    The function can throw anything that parse(s, s+n) would throw.

    "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
    "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
    json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

    json_pointer value parsed from s

    "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

    The function can throw anything that json_pointer::json_pointer would throw.

    "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

    Output:

    \"world\"\n
    "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
    • json_pointer - type to represent JSON Pointers
    "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
    "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

    the stream o

    "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.
    "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON poiner\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

    Output:

    /foo/bar/baz\n
    "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
    using ordered_json = basic_json<ordered_map>;\n

    This type preserves the insertion order of object keys.

    "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
    • ordered_map
    • Object Order
    "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

    Since version 3.9.0.

    "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
    template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
    "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • emplace
    • operator[]
    • at
    • erase
    • count
    • find
    • insert
    "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

    The example shows the different behavior of std::map and nlohmann::ordered_map.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

    Output:

    m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
    "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
    • ordered_json
    "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
    • Added in version 3.9.0 to implement nlohmann::ordered_json.
    • Added key_compare member in version 3.11.0.
    "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
    template<typename, typename>\nstruct adl_serializer;\n

    Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

    It is implemented similar to

    template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
    "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
    • from_json - convert a JSON value to any value type
    • to_json - convert any value type to a JSON value
    "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
    // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

    This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

    1. This function is chosen for default-constructible value types.
    2. This function is chosen for value types which are not default-constructible.
    "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

    Copy of the JSON value, converted to ValueType

    "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

    The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    Example: (2) Non-default-constructible type

    The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
    • to_json
    "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
    template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

    This function is usually called by the constructors of the basic_json class.

    "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

    The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
    "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
    • from_json
    "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

    Defined in header <nlohmann/json.hpp>

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
    "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
    • json - default specialization
    • ordered_json - specialization that maintains the insertion order of object keys
    "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

    The class satisfies the following concept requirements:

    "},{"location":"api/basic_json/#basic","title":"Basic","text":"
    • DefaultConstructible: JSON values can be default constructed. The result will be a JSON null value.
    • MoveConstructible: A JSON value can be constructed from an rvalue argument.
    • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
    • MoveAssignable: A JSON value can be assigned from an rvalue argument.
    • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
    • Destructible: JSON values can be destructed.
    "},{"location":"api/basic_json/#layout","title":"Layout","text":"
    • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
    "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
    • EqualityComparable: JSON values can be compared with ==, see operator==.
    • LessThanComparable: JSON values can be compared with <, see operator<.
    • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
    • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
    "},{"location":"api/basic_json/#container","title":"Container","text":"
    • Container: JSON values can be used like STL containers and provide iterator access.
    • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
    "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
    • adl_serializer - the default serializer
    • value_t - the JSON type enumeration
    • json_pointer - JSON Pointer implementation
    • json_serializer - type of the serializer to for conversions from/to JSON
    • error_handler_t - type to choose behavior on decoding errors
    • cbor_tag_handler_t - type to choose how to handle CBOR tags
    • initializer_list_t - type for initializer lists of basic_json values
    • input_format_t - type to choose the format to parse
    • json_sax_t - type for SAX events
    "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
    • exception - general exception of the basic_json class
      • parse_error - exception indicating a parse error
      • invalid_iterator - exception indicating errors with iterators
      • type_error - exception indicating executing a member function with a wrong type
      • out_of_range - exception indicating access out of the defined range
      • other_error - exception indicating other library errors
    "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
    • array_t - type for arrays
    • binary_t - type for binary arrays
    • boolean_t - type for booleans
    • default_object_comparator_t - default comparator for objects
    • number_float_t - type for numbers (floating-point)
    • number_integer_t - type for numbers (integer)
    • number_unsigned_t - type for numbers (unsigned)
    • object_comparator_t - comparator for objects
    • object_t - type for objects
    • string_t - type for strings
    "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
    • parse_event_t - parser event types
    • parser_callback_t - per-element parser callback type
    "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • operator= - copy assignment
    • array (static) - explicitly create an array
    • binary (static) - explicitly create a binary array
    • object (static) - explicitly create an object
    "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

    Functions to inspect the type of a JSON value.

    • type - return the type of the JSON value
    • operator value_t - return the type of the JSON value
    • type_name - return the type as string
    • is_primitive - return whether type is primitive
    • is_structured - return whether type is structured
    • is_null - return whether value is null
    • is_boolean - return whether value is a boolean
    • is_number - return whether value is a number
    • is_number_integer - return whether value is an integer number
    • is_number_unsigned - return whether value is an unsigned integer number
    • is_number_float - return whether value is a floating-point number
    • is_object - return whether value is an object
    • is_array - return whether value is an array
    • is_string - return whether value is a string
    • is_binary - return whether value is a binary array
    • is_discarded - return whether value is discarded
    "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

    Direct access to the stored value of a JSON value.

    • get - get a value
    • get_to - get a value and write it to a destination
    • get_ptr - get a pointer value
    • get_ref - get a reference value
    • operator ValueType - get a value
    • get_binary - get a binary value
    "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

    Access to the JSON value

    • at - access specified element with bounds checking
    • operator[] - access specified element
    • value - access specified object element with default value
    • front - access the first element
    • back - access the last element
    "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
    • find - find an element in a JSON object
    • count - returns the number of occurrences of a key in a JSON object
    • contains - check the existence of an element in a JSON object
    "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
    • begin - returns an iterator to the first element
    • cbegin - returns a const iterator to the first element
    • end - returns an iterator to one past the last element
    • cend - returns a const iterator to one past the last element
    • rbegin - returns an iterator to the reverse-beginning
    • rend - returns an iterator to the reverse-end
    • crbegin - returns a const iterator to the reverse-beginning
    • crend - returns a const iterator to the reverse-end
    • items - wrapper to access iterator member functions in range-based for
    "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
    • empty - checks whether the container is empty
    • size - returns the number of elements
    • max_size - returns the maximum possible number of elements
    "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
    • clear - clears the contents
    • push_back - add a value to an array/object
    • operator+= - add a value to an array/object
    • emplace_back - add a value to an array
    • emplace - add a value to an object if key does not exist
    • erase - remove elements
    • insert - inserts elements
    • update - updates a JSON object from another object, overwriting existing keys
    • swap - exchanges the values
    "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator> - comparison: greater than
    • operator<= - comparison: less than or equal
    • operator>= - comparison: greater than or equal
    • operator<=> - comparison: 3-way
    "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
    • dump - serialization
    "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
    • parse (static) - deserialize from a compatible input
    • accept (static) - check if the input is valid JSON
    • sax_parse (static) - generate SAX events
    "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
    • flatten - return flattened JSON value
    • unflatten - unflatten a previously flattened JSON value
    "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
    • patch - applies a JSON patch
    • patch_inplace - applies a JSON patch in place
    • diff (static) - creates a diff as a JSON patch
    "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
    • merge_patch - applies a JSON Merge Patch
    "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
    • meta - returns version information on the library
    • get_allocator - returns the allocator associated with the container
    "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
    • from_bjdata (static) - create a JSON value from an input in BJData format
    • from_bson (static) - create a JSON value from an input in BSON format
    • from_cbor (static) - create a JSON value from an input in CBOR format
    • from_msgpack (static) - create a JSON value from an input in MessagePack format
    • from_ubjson (static) - create a JSON value from an input in UBJSON format
    • to_bjdata (static) - create a BJData serialization of a given JSON value
    • to_bson (static) - create a BSON serialization of a given JSON value
    • to_cbor (static) - create a CBOR serialization of a given JSON value
    • to_msgpack (static) - create a MessagePack serialization of a given JSON value
    • to_ubjson (static) - create a UBJSON serialization of a given JSON value
    "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
    • operator<<(std::ostream&) - serialize to stream
    • operator>>(std::istream&) - deserialize from stream
    • to_string - user-defined to_string function for JSON values
    "},{"location":"api/basic_json/#literals","title":"Literals","text":"
    • operator\"\"_json - user-defined string literal for JSON values
    "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
    • std::hash<basic_json> - return a hash value for a JSON object
    • std::swap<basic_json> - exchanges the values of two JSON objects
    "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

    The example shows how the library is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/basic_json/#see-also","title":"See also","text":"
    • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
    "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
    // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false);\n

    Checks whether the input is valid JSON.

    1. Reads from a compatible input.
    2. Reads from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    Unlike the parse function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

    "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

    Whether the input is valid JSON.

    "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

    Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

    "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

    The example below demonstrates the accept() function reading from a string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

    Output:

    true false\n
    "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
    • parse - deserialize from a compatible input
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
    static basic_json array(initializer_list_t init = {});\n

    Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

    "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

    JSON array value

    "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

    This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

    1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
    2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
    "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

    The following code shows an example for the array function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

    Output:

    []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
    "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • object - create a JSON object value from an initializer list
    "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

    The type used to store JSON arrays.

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    To store objects in C++, a type is defined by the template parameters explained below.

    "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

    The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
    // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx, with bounds checking.
    2. Returns a reference to the object element with specified key key, with bounds checking.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
    "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
    1. reference to the element at index idx
    2. reference to the element at key key
    3. reference to the element at key key
    4. reference to the element pointed to by ptr
    "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
      • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
    2. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
      • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
      • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
      • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.
    "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
    • documentation on checked access
    • see operator[] for unchecked access by reference
    • see value for access with default value
    "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
    reference back();\n\nconst_reference back() const;\n

    Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

    auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
    "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

    The following code shows an example for back().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
    • front to access the first element
    "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
    // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
    1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

      Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

      The postcondition of this constructor can be restored by calling clear().

    2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

    3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

      Template type CompatibleType includes, but is not limited to, the following types:

      • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
      • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
      • strings: string_t, string literals, and all compatible string containers can be used.
      • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
      • boolean: boolean_t / bool can be used.
      • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

      See the examples below.

    4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

      The constructor tries to convert the internal m_value of the parameter.

    5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

      1. If the list is empty, an empty JSON object value {} is created.
      2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
      3. In all other cases, an array is created.

      The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

      1. The empty initializer list is written as {} which is exactly an empty JSON object.
      2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
      3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

      With the rules described above, the following JSON values cannot be expressed by an initializer list:

      • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
      • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

      Function array() and object() force array and object creation from initializer lists, respectively.

    6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

    7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

      • In case of a null type, invalid_iterator.206 is thrown.
      • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
      • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
    8. Creates a copy of a given JSON value.

    9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

    "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

    a type such that:

    • CompatibleType is not derived from std::istream,
    • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
    • CompatibleType is not a different basic_json type (i.e. with different template arguments)
    • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
    • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
    BasicJsonType:

    a type such that:

    • BasicJsonType is a basic_json type.
    • BasicJsonType has different template arguments than basic_json_t.
    U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) begin of the range to copy from (included) last (in) end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
    1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    2. No-throw guarantee: this constructor never throws exceptions.
    3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    9. No-throw guarantee: this constructor never throws exceptions.
    "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function does not throw exceptions.
    3. (none)
    4. (none)
    5. The function can throw the following exceptions:
      • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
    6. (none)
    7. The function can throw the following exceptions:
      • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
      • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
      • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
    8. (none)
    9. The function does not throw exceptions.
    "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Constant.
    3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    5. Linear in the size of the initializer list init.
    6. Linear in cnt.
    7. Linear in distance between first and last.
    8. Linear in the size of other.
    9. Constant.
    "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
    • Overload 5:

      Empty initializer list

      When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

    • Overload 7:

      Preconditions

      • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
      • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

      Runtime assertion

      A precondition is enforced with a runtime assertion.

    • Overload 8:

      Postcondition

      *this == other

    • Overload 9:

      Postconditions

      • `*this has the same value as other before the call.
      • other is a JSON null value
    "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

    The following code shows the constructor for different value_t values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    Example: (2) create a null object

    The following code shows the constructor with and without a null pointer parameter.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

    Output:

    null\nnull\n
    Example: (3) create a JSON value from compatible types

    The following code shows the constructor with several compatible types.

    #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

    Note the output is platform-dependent.

    Example: (5) create a container (array or object) from an initializer list

    The example below shows how JSON values are created from initializer lists.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

    Output:

    {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
    Example: (6) construct an array with count copies of given value

    The following code shows examples for creating arrays with several copies of a given value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

    Output:

    []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
    Example: (7) construct a JSON container given an iterator range

    The example below shows several ways to create JSON values by specifying a subrange with iterators.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
    Example: (8) copy constructor

    The following code shows an example for the copy constructor.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

    Output:

    [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
    Example: (9) move constructor

    The code below shows the move constructor explicitly called via std::move.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    null\n23\n
    "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.1.0.
    4. Since version 3.2.0.
    5. Since version 1.0.0.
    6. Since version 1.0.0.
    7. Since version 1.0.0.
    8. Since version 1.0.0.
    9. Since version 1.0.0.
    "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
    iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

    The following code shows an example for begin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
    // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
    1. Creates a JSON binary array value from a given binary container.
    2. Creates a JSON binary array value from a given binary container with subtype.

    Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

    "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

    JSON binary array value

    "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

    Linear in the size of init; constant for typename binary_t::container_type&& init versions.

    "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

    Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

    "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

    The following code shows how to create a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
    using binary_t = byte_container_with_subtype<BinaryType>;\n

    This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

    Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

    CBOR's RFC 7049 describes this type as:

    Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

    MessagePack's documentation on the bin type family describes this type as:

    Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

    BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

    Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

    None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

    The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

    "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

    The default values for BinaryType is std::vector<std::uint8_t>.

    "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

    Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

    "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
    • CBOR

      • Binary values are represented as byte strings. Subtypes are written as tags.
    • MessagePack

      • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
      • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
    • BSON

      • If a subtype is given, it is used and added as unsigned 8-bit integer.
      • If no subtype is given, the generic binary subtype 0x00 is used.
    "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

    The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
    • byte_container_with_subtype
    "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
    • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
    "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
    using boolean_t = BooleanType;\n

    The type used to store JSON booleans.

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

    "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

    The following code shows that boolean_t is by default, a typedef to bool.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
    const_iterator cbegin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for cbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
    enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

    This enumeration is used in the from_cbor function to choose how to treat tags:

    error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

    Output:

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
    "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.9.0. Added value store in 3.10.0.
    "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
    const_iterator cend() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

    The following code shows an example for cend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
    void clear() noexcept;\n

    Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

    Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

    Has the same effect as calling

    *this = basic_json(type());\n
    "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

    All iterators, pointers and references related to this container are invalidated.

    "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

    The example below shows the effect of clear() to different JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added support for binary types in version 3.8.0.
    "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
    // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
    1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
    "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
    1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
    2. See 1.
    3. true if the JSON pointer can be resolved to a stored value, false otherwise.
    "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
    1. The function does not throw exceptions.
    2. The function does not throw exceptions.
    3. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index begins with 0.
      • Throws parse_error.109 if an array index was not a number.
    "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
    • This method always returns false when executed on a JSON type that is not an object.
    • This method can be executed on any JSON value type.

    Postconditions

    If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

    "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (2) check with key using string_view

    The example shows how contains() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (3) check with JSON pointer

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
    3. Added in version 3.7.0.
    "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
    // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
    1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

    Number of elements with key key. If the JSON value is not an object, the return value will be 0.

    "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

    This method always returns 0 when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

    The example shows how count() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    Example: (2) count number of elements using string_view

    The example shows how count() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
    "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
    const_reverse_iterator crbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for crbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
    const_reverse_iterator crend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
    using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

    The default comparator used by object_t.

    Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

    The actual comparator used depends on object_t and can be obtained via object_comparator_t.

    "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the default comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    one < two : true\nthree < four : false\n
    "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
    static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

    Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n

    "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

    a JSON patch to convert the source to target

    "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

    Linear in the lengths of source and target.

    "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

    Currently, only remove, add, and replace operations are generated.

    "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
    string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

    Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

    "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

    "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

    Binary values are serialized as object containing two keys:

    • \"bytes\": an array of bytes as integers
    • \"subtype\": the subtype as integer or null if the binary has no subtype
    "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

    The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
    • Error handlers added in version 3.4.0.
    • Serialization of binary values added in version 3.8.0.
    "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
    template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

    Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

    a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

    "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

    "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the container, O(log(size())).

    "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

    The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
    "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
    template<class... Args>\nreference emplace_back(Args&& ... args);\n

    Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

    reference to the inserted element

    "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

    "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

    The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
    "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
    • operator+= add a value to an array/object
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    • Returns reference since 3.7.0.
    "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
    bool empty() const noexcept;\n

    Checks if a JSON value has no elements (i.e. whether its size() is 0).

    "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

    "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
    bool empty() const noexcept\n{\n    return size() == 0;\n}\n
    "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

    This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

    "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

    The following code uses empty() to check if a JSON object contains any elements.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return false for binary types in version 3.8.0.
    "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
    iterator end() noexcept;\nconst_iterator end() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

    The following code shows an example for end().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
    // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
    1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

      If called on a primitive type other than null, the resulting JSON value will be null.

    2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

      If called on a primitive type other than null, the resulting JSON value will be null.

    3. Removes an element from a JSON object by key.

    4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    5. Removes an element from a JSON array by index.

    "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
    1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
    2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
    3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
    2. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
      • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
    3. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
    4. See 3.
    5. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
    "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
    1. The complexity depends on the type:
      • objects: amortized constant
      • arrays: linear in distance between pos and the end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    2. The complexity depends on the type:
      • objects: log(size()) + std::distance(first, last)
      • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    3. log(size()) + count(key)
    4. log(size()) + count(key)
    5. Linear in distance between idx and the end of the container.
    "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
    1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    2. (none)
    3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

    The example shows the effect of erase() for different JSON types using an iterator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
    Example: (2) remove elements given an iterator range

    The example shows the effect of erase() for different JSON types using an iterator range.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
    Example: (3) remove element from a JSON object given a key

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (4) remove element from a JSON object given a key using string_view

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (5) remove element from a JSON array given an index

    The example shows the effect of erase() using an array index.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

    Output:

    [0,1,3,4,5]\n
    "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    3. Added in version 1.0.0.
    4. Added in version 3.11.0.
    5. Added in version 1.0.0.
    "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
    enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

    This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

    strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
    class exception : public std::exception;\n

    This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

    Subclasses:

    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

    To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

    "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

    The following code shows how arbitrary library exceptions can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
    "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

    List of exceptions

    "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
    // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
    1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

    Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

    "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

    This method always returns end() when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

    The example shows how find() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    Example: (2) find object element by key using string_view

    The example shows how find() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
    • contains checks whether a key exists
    "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
    "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
    basic_json flatten() const;\n

    The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

    "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

    an object that maps JSON pointers to primitive values

    "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

    "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

    The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

    Output:

    {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
    "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
    • unflatten the reverse function
    "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BJData format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

    Throws parse_error.114 if an unsupported BSON record type is encountered.

    "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
    • BSON specification
    • to_bson for the analogous serialization
    • from_cbor for the related CBOR format
    • from_msgpack for the related MessagePack format
    • from_ubjson for the related UBJSON format
    "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.

    Deprecation

    • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

    Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in CBOR format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.
    • Added tag_handler parameter in version 3.9.0.

    Deprecation

    • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the MessagePack serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
    reference front();\nconst_reference front() const;\n

    Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

    "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

    The following code shows an example for front().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

    Output:

    true\n17\n23.42\n1\n1\n\"Hello, world\"\n
    "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
    • back to access the last element
    "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
    // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);\n

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;\n

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
    "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].template get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].template get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].template get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].template get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].template get<int>();\n    auto v6 = json_types[\"string\"].template get<std::string>();\n    auto v7 = json_types[\"array\"].template get<std::vector<short>>();\n    auto v8 = json_types.template get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.template get<const json::number_integer_t*>();\n    auto p2 = value.template get<json::number_integer_t*>();\n    auto p3 = value.template get<json::number_integer_t* const>();\n    auto p4 = value.template get<const json::number_integer_t* const>();\n    auto p5 = value.template get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
    1. Since version 2.1.0.
    2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
    3. Since version 1.0.0.
    "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
    static allocator_type get_allocator();\n

    Returns the allocator associated with the container.

    "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

    associated allocator

    "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

    The example shows how get_allocator() is used to created json values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

    Output:

    \"Hello, world!\"\n
    "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
    binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

    Returns a reference to the stored binary value.

    "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

    Reference to binary value.

    "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

    Throws type_error.302 if the value is not binary

    "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

    The following code shows how to query a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
    template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

    Implicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

    pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

    Undefined behavior

    The pointer becomes invalid if the underlying JSON object changes.

    Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

    Output:

    value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
    "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
    • get_ref() get a reference value
    "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
    template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

    Implicit reference access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

    reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

    "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

    Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

    "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

    Undefined behavior

    The reference becomes invalid if the underlying JSON object changes.

    "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

    The example shows several calls to get_ref().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

    Output:

    17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
    "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
    • get_ptr() get a pointer value
    "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
    • Added in version 1.1.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
    template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

    Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

    This overload is chosen if:

    • ValueType is not basic_json,
    • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
    "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

    the input parameter, allowing chaining calls

    "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
    • Since version 3.3.0.
    "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
    enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

    This enumeration is used in the sax_parse function to choose the input format to parse:

    json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

    The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
    // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
    1. Inserts element val into array before iterator pos.
    2. Inserts cnt copies of val into array before iterator pos.
    3. Inserts elements from range [first, last) into array before iterator pos.
    4. Inserts elements from initializer list ilist into array before iterator pos.
    5. Inserts elements from range [first, last) into object.
    "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) begin of the range of elements to insert last (in) end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
    1. iterator pointing to the inserted val.
    2. iterator pointing to the first element inserted, or pos if cnt==0
    3. iterator pointing to the first element inserted, or pos if first==last
    4. iterator pointing to the first element inserted, or pos if ilist is empty
    5. (none)
    "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    2. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    3. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
    4. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    5. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
    1. Constant plus linear in the distance between pos and end of the container.
    2. Linear in cnt plus linear in the distance between pos and end of the container.
    3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
    4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
    5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    10\n[1,2,10,3,4]\n
    Example (2): insert copies of element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,7,7,7,7,7,7,7,3,4]\n
    Example (3): insert range of elements into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
    Example (4): insert elements from initializer list into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,3,4,7,8,9]\n
    Example (5): insert range of elements into object

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

    Output:

    {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
    "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 1.0.0.
    4. Added in version 1.0.0.
    5. Added in version 3.0.0.
    "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
    class invalid_iterator : public exception;\n

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx (see list of iterator errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
    "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

    The following code shows how a invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
    • List of iterator errors
    • parse_error for exceptions indicating a parse error
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
    constexpr bool is_array() const noexcept;\n

    This function returns true if and only if the JSON value is an array.

    "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

    true if type is an array, false otherwise.

    "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

    The following code exemplifies is_array() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
    constexpr bool is_binary() const noexcept;\n

    This function returns true if and only if the JSON value is binary array.

    "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

    true if type is binary, false otherwise.

    "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

    The following code exemplifies is_binary() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
    "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
    constexpr bool is_boolean() const noexcept;\n

    This function returns true if and only if the JSON value is true or false.

    "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

    true if type is boolean, false otherwise.

    "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

    The following code exemplifies is_boolean() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

    Output:

    false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
    constexpr bool is_discarded() const noexcept;\n

    This function returns true for a JSON value if either:

    • the value was discarded during parsing with a callback function (see parser_callback_t), or
    • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
    "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

    true if type is discarded, false otherwise.

    "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

    Comparisons

    Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

    j.is_discarded()\n

    because

    j == json::value_t::discarded\n

    will always be false.

    Removal during parsing with callback functions

    When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

    This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

    "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

    The following code exemplifies is_discarded() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
    constexpr bool is_null() const noexcept;\n

    This function returns true if and only if the JSON value is null.

    "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

    true if type is null, false otherwise.

    "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

    The following code exemplifies is_null() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
    constexpr bool is_number() const noexcept;\n

    This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

    "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

    true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

    "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
    "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
    constexpr bool is_number_float() const noexcept;\n

    This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

    "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

    true if type is a floating-point number, false otherwise.

    "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_float() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
    constexpr bool is_number_integer() const noexcept;\n

    This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

    "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

    true if type is an integer or unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_integer() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
    constexpr bool is_number_unsigned() const noexcept;\n

    This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

    "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

    true if type is an unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_unsigned() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
    constexpr bool is_object() const noexcept;\n

    This function returns true if and only if the JSON value is an object.

    "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

    true if type is an object, false otherwise.

    "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

    The following code exemplifies is_object() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
    constexpr bool is_primitive() const noexcept;\n

    This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

    "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

    true if type is primitive (string, number, boolean, null, or binary), false otherwise.

    "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
    "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

    The term primitive stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

    "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

    The following code exemplifies is_primitive() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
    "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
    • is_structured() returns whether JSON value is structured
    • is_null() returns whether JSON value is null
    • is_string() returns whether JSON value is a string
    • is_boolean() returns whether JSON value is a boolean
    • is_number() returns whether JSON value is a number
    • is_binary() returns whether JSON value is a binary array
    "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return true for binary types in version 3.8.0.
    "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
    constexpr bool is_string() const noexcept;\n

    This function returns true if and only if the JSON value is a string.

    "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

    true if type is a string, false otherwise.

    "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

    The following code exemplifies is_string() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
    constexpr bool is_structured() const noexcept;\n

    This function returns true if and only if the JSON type is structured (array or object).

    "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

    true if type is structured (array or object), false otherwise.

    "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
    "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

    The term structured stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    Note that though strings are containers in C++, they are treated as primitive values in JSON.

    "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

    The following code exemplifies is_structured() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
    • is_primitive() returns whether JSON value is primitive
    • is_array() returns whether value is an array
    • is_object() returns whether value is an object
    "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
    iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

    This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    For loop without items() function:

    for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

    Range-based for loop without items() function:

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    Range-based for loop with items() function:

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
    "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

    iteration proxy object wrapping the current value with an interface to use in range-based for loops

    "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

    When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

    Lifetime issues

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

    The following code shows an example for items().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

    Output:

    key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
    "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
    • Added iterator_wrapper in version 3.0.0.
    • Added items and deprecated iterator_wrapper in version 3.1.0.
    • Added structured binding support in version 3.5.0.

    Deprecation

    This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
    using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

    The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

    "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

    The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

    "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

    The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

    "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

    The following code shows how to inject custom data and methods for each node.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

    Output:

    / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
    "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
    template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
    "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

    The default values for json_serializer is adl_serializer.

    "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

    The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
    size_type max_size() const noexcept;\n

    Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

    "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

    "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

    This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

    "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

    The following code calls max_size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
    void merge_patch(const basic_json& apply_patch);\n

    The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

    define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

    Thereby, Target is the current object; that is, the patch is applied to the current value.

    "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

    Linear in the lengths of apply_patch.

    "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
    • RFC 7396 (JSON Merge Patch)
    • patch apply a JSON patch
    "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
    static basic_json meta();\n

    This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

    "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

    JSON object holding version information

    key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

    The following code shows an example output of the meta() function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

    Output:

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
    using number_float_t = NumberFloatType;\n

    The type used to store JSON numbers (floating-point).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

    "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

    With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

    Floating-point number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

    The following code shows that number_float_t is by default, a typedef to double.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
    using number_integer_t = NumberIntegerType;\n

    The type used to store JSON numbers (integers).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

    "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

    "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

    The following code shows that number_integer_t is by default, a typedef to std::int64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
    using number_unsigned_t = NumberUnsignedType;\n

    The type used to store JSON numbers (unsigned).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

    "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

    With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

    "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

    The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
    static basic_json object(initializer_list_t init = {});\n

    Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

    "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

    JSON object value

    "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

    Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

    "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

    This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

    "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

    The following code shows an example for the object function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • array - create a JSON array value from an initializer list
    "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
    using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

    The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

    "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the used object comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
    "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
    "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
    using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

    The type used to store JSON objects.

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    To store objects in C++, a type is defined by the template parameters described below.

    "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

    See default_object_comparator_t for more information.

    "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

    The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
    // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using operator+= with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

    "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

    *this

    "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

    "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
    basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

    Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

    "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

    The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    23\n23\n
    "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
    // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx.
    2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element with specified JSON pointer ptr.
    "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
    1. (const) reference to the element at index idx
    2. (const) reference to the element at key key
    3. (const) reference to the element at key key
    4. (const) reference to the element pointed to by ptr
    "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
    2. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
    "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
    1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

    Undefined behavior and runtime assertions

    1. If the element with key idx does not exist, the behavior is undefined.
    2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
    1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

    2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

    3. See 2.

    4. null values are created in arrays and objects if necessary.

      In particular:

      • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
      • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
      • The special value - is treated as a synonym for the index past the end.
    "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

    The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

    Output:

    4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
    Example: (1) access specified array element (const)

    The example below shows how array elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

    Output:

    \"third\"\n
    Example: (2) access specified object element

    The example below shows how object elements can be read and written using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (2) access specified object element (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

    Output:

    2\n
    Example: (3) access specified object element using string_view

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (3) access specified object element using string_view (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

    Output:

    2\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how values can be read and written using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
    Example: (4) access specified element via JSON Pointer (const)

    The example below shows how values can be read using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n
    "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
    • documentation on unchecked access
    • documentation on runtime assertions
    • see at for access by reference with range checking
    • see value for access with default value
    "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
    template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

    Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

    "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

    copy of the JSON value, converted to ValueType

    "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

    Definition of JSON_EXPLICIT

    By default JSON_EXPLICIT is defined to the empty string, so the signature is:

    template<typename ValueType>\noperator ValueType() const;\n

    If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

    template<typename ValueType>\nexplicit operator ValueType() const;\n

    That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
    "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
    • Since version 1.0.0.
    • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
    "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
    // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for equality according to the following rules:

      • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
      • Integer and floating-point numbers are automatically converted before comparison.
    2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

    Comparing special values

    • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    • JSON null values are all equal.
    • Discarded values never compare equal to themselves.

    Comparing floating-point numbers

    Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

    Or you can self-defined operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

    Comparing different basic_json specializations

    Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

    {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

    and

    {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

    depends on whether nlohmann::json or nlohmann::ordered_json is used:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

    Output:

    true\nfalse\n
    "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
    "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
    // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs < rhs) (see operator<).
    2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
    "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
    // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
    2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

    whether lhs is greater than rhs

    "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

    Output:

    [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
    "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
    // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(rhs < lhs) (see operator<).
    2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
    "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
    // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

      • If either operand is discarded, the comparison yields false.
      • If both operands have the same type, the values are compared using their respective operator<.
      • Integer and floating-point numbers are automatically converted before comparison.
      • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
        1. null
        2. boolean
        3. number (all types)
        4. object
        5. array
        6. string
        7. binary For instance, any boolean value is considered less than any string.
    2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

    whether lhs is less than rhs

    "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
    "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
    // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for inequality according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
    2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

    Output:

    [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
    "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
    // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
    1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

      • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
      • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
      • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
      • Otherwise, yields a result by comparing the type (see value_t).
    2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

    "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

    the std::partial_ordering of the 3-way comparison of *this and rhs

    "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

    Comparing NaN

    • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

    The example demonstrates comparing several JSON values.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

    Output:

    [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
    Example: (2) comparing JSON values and scalars

    The example demonstrates comparing several JSON values and scalars.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

    Output:

    false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
    "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator<= - comparison: less than or equal
    • operator> - comparison: greater than
    • operator>= - comparison: greater than or equal
    "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.11.0.
    "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
    constexpr operator value_t() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

    The following code exemplifies operator value_t() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
    class other_error : public exception;\n

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx (see list of other errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
    "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

    The following code shows how a other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
    • List of other errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
    class out_of_range : public exception;\n

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx (see list of out-of-range errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
    "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

    The following code shows how a out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
    • List of out-of-range errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n
    1. Deserialize from a compatible input.
    2. Deserialize from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

    Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

    "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

    The example below demonstrates the parse() function reading from an array.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a string

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from an input stream

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a contiguous container

    The example below demonstrates the parse() function reading from a contiguous container.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from a non null-terminated string

    The example below demonstrates the parse() function reading from a string that is not null-terminated.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from an iterator pair

    The example below demonstrates the parse() function reading from an iterator pair.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Effect of allow_exceptions parameter

    The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
    "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Overload for contiguous containers (1) added in version 2.0.3.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
    class parse_error : public exception;\n

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

    Member byte holds the byte index of the last read character in the input file (see note below).

    Exceptions have ids 1xx (see list of parse errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
    "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    • byte - byte index of the parse error
    "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

    "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
    • List of parse errors
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
    enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

    The parser callback distinguishes the following events:

    • object_start: the parser read { and started to process a JSON object
    • key: the parser read a key of a value in an object
    • object_end: the parser read } and finished processing a JSON object
    • array_start: the parser read [ and started to process a JSON array
    • array_end: the parser read ] and finished processing a JSON array
    • value: the parser finished reading a JSON value
    "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

    Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

    Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

    "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
    basic_json patch(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

    patched document

    "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

    The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

    "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch_inplace applies a JSON Patch without creating a copy of the document
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
    void patch_inplace(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

    "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

    No guarantees, value may be corrupted by an unsuccessful patch operation.

    "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

    Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

    "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

    Output:

    Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch applies a JSON Merge Patch
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
    // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using push_back with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

    "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

    "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • operator+= add a value to an array/object
    "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
    reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for rbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
    reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
    // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n

    Read from input and generate SAX events

    1. Read from a compatible input.
    2. Read from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    The SAX event lister must follow the interface of json_sax.

    "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. sax (in) SAX event listener format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

    return value of the last processed SAX event

    "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":""},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

    "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

    The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.

    Deprecation

    Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

    "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
    size_type size() const noexcept;\n

    Returns the number of elements in a JSON value.

    "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

    "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

    This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

    "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

    The following code calls size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n2\n0\n5\n0\n1\n
    "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
    namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

    Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

    "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

    The example shows how to calculate hash values for different JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

    Output:

    hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
    namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

    Exchanges the values of two JSON objects.

    "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
    "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

    The following code shows how two values are swapped with std::swap.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

    Output:

    j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
    "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
    • swap
    "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
    using string_t = StringType;\n

    The type used to store JSON strings.

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

    The following code shows that string_t is by default, a typedef to std::string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
    // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
    1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
    3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
    "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. No-throw guarantee: this function never throws exceptions.
    3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
    4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
    5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
    6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

    The example below shows how JSON values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

    Output:

    j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
    Example: Swap array (3)

    The example below shows how arrays can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

    Output:

    value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
    Example: Swap object (4)

    The example below shows how objects can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

    Output:

    value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
    Example: Swap string (5)

    The example below shows how strings can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

    Output:

    value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
    Example: Swap string (6)

    The example below shows how binary values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

    Output:

    value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
    "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
    • std::swap<basic_json>
    "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 1.0.0.
    4. Since version 1.0.0.
    5. Since version 1.0.0.
    6. Since version 3.8.0.
    7. Since version 3.8.0.
    "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

    Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the BJData serialization.
    2. Writes the BJData serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see draft 3); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
    1. BJData serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BJData format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
    "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

    BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

    1. Returns a byte vector containing the BSON serialization.
    2. Writes the BSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
    1. BSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the CBOR serialization.
    2. Writes the CBOR serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
    1. CBOR serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in CBOR format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Compact representation of floating-point numbers added in version 3.8.0.
    "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the MessagePack serialization.
    2. Writes the MessagePack serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
    1. MessagePack serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in MessagePack format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

    This function implements a user-defined to_string for JSON objects.

    "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

    "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
    "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

    The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n42\n
    "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
    • dump
    "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

    Added in version 3.7.0.

    "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

    Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the UBJSON serialization.
    2. Writes the UBJSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
    1. UBJSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in UBJSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
    constexpr value_t type() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

    The following code exemplifies type() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
    class type_error : public exception;\n

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx (see list of type errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
    "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
    • List of type errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
    const char* type_name() const noexcept;\n

    Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

    "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

    a string representation of the type (value_t):

    Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

    The following code exemplifies type_name() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

    Output:

    null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
    "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Part of the public API version since 2.1.0.
    • Changed return value to const char* and added noexcept in version 3.0.0.
    • Added support for binary type in version 3.8.0.
    "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
    basic_json unflatten() const;\n

    The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

    1. The value must be an object.
    2. The keys must be JSON pointers (see RFC 6901)
    3. The mapped values must be primitive JSON types.
    "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

    the original JSON from a flattened version

    "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

    The function can throw the following exceptions:

    • Throws type_error.314 if value is not an object
    • Throws type_error.315 if object values are not primitive
    "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

    "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

    The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
    "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
    • flatten the reverse function
    "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
    // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
    1. Inserts all values from JSON object j.
    2. Inserts all values from range [first, last)

    When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

    The function is motivated by Python's dict.update function.

    "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) begin of the range of elements to insert last (in) end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
    2. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
    1. O(N*log(size() + N)), where N is the number of elements to insert.
    2. O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

    {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

    The user may override the default settings selectively:

    {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

    Then update manages the merging of default settings and user settings:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

    Now effective_settings contains the default settings, but those keys set by the user are overwritten:

    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

    Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
    "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Added merge_objects parameter in 3.10.5.
    "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
    // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
    1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

      The function is basically equivalent to executing

      try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

      The function is basically equivalent to executing

      try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
    "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
    "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (2) access specified object element using string_view with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference
    "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
    enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    • number_unsigned_t for unsigned integers
    • number_integer_t for signed integers
    • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value
    "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
    ~basic_json() noexcept;\n

    Destroys the JSON value and frees all allocated memory.

    "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
    template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)
    "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
    • (constructor)
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • set_subtype - sets the binary subtype
    • subtype - return the binary subtype
    • has_subtype - return whether the value has a subtype
    • clear_subtype - clears the binary subtype
    "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
    // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
    1. Create empty binary container without subtype.
    2. Create binary container without subtype.
    3. Create binary container with subtype.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how byte containers can be created.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

    Output:

    {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
    void clear_subtype() noexcept;\n

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

    Output:

    before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
    "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
    constexpr bool has_subtype() const noexcept;\n

    Returns whether the value has a subtype.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

    whether the value has a subtype

    "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

    Output:

    c1.has_subtype() = false\nc2.has_subtype() = true\n
    "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
    void set_subtype(subtype_type subtype) noexcept;\n

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

    Output:

    before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
    constexpr subtype_type subtype() const noexcept;\n

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

    Output:

    c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
    "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
    template<typename RefStringType>\nclass json_pointer;\n

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
    • string_t - the string type used for the reference tokens
    "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
    • (constructor)
    • to_string - return a string representation of the JSON pointer
    • operator string_t - return a string representation of the JSON pointer
    • operator== - compare: equal
    • operator!= - compare: not equal
    • operator/= - append to the end of the JSON pointer
    • operator/ - create JSON Pointer by appending
    • parent_pointer - returns the parent of this JSON pointer
    • pop_back - remove last reference token
    • back - return last reference token
    • push_back - append an unescaped token at the end of the pointer
    • empty - return whether pointer points to the root document
    "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
    • operator\"\"_json_pointer - user-defined string literal for JSON pointers
    "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
    • RFC 6901
    "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
    const string_t& back() const;\n

    Return last reference token.

    "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

    Last reference token.

    "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

    The example shows the usage of back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

    Output:

    last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
    "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
    bool empty() const noexcept;\n

    Return whether pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

    true iff the JSON pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

    Output:

    \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
    "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
    explicit json_pointer(const string_t& s = \"\");\n

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
    // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
    "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs
    "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.
    "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
    "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
    // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer
    "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended
    "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.
    "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/=.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
    "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
    operator string_t() const\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
    operator string_t() const\n{\n    return to_string();\n}\n
    "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

    Output:

    /foo/0\n/a~1b\n
    "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
    json_pointer parent_pointer() const;\n

    Returns the parent of this JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

    Linear in the length of the JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

    Output:

    parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
    "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
    void pop_back();\n

    Remove last reference token.

    "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

    The example shows the usage of pop_back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
    "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
    void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

    Append an unescaped token at the end of the reference pointer.

    "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
    "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
    using string_t = RefStringType;\n

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

    Output:

    This is a string.\ntrue\n
    "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
    string_t to_string() const;\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());\n
    "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

    The example shows the result of to_string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
    "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
    template<typename BasicJsonType>\nstruct json_sax;\n

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
    • number_integer_t - BasicJsonType's type for numbers (integer)
    • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
    • number_float_t - BasicJsonType's type for numbers (floating-point)
    • string_t - BasicJsonType's type for strings
    • binary_t - BasicJsonType's type for binary arrays
    "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read
    "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
    virtual bool binary(binary_t& val) = 0;\n

    A binary value was read.

    "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

    It is safe to move the passed binary value.

    "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
    virtual bool boolean(bool val) = 0;\n

    A boolean value was read.

    "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
    virtual bool end_array() = 0;\n

    The end of an array was read.

    "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
    virtual bool end_object() = 0;\n

    The end of an object was read.

    "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
    virtual bool key(string_t& val) = 0;\n

    An object key was read.

    "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

    It is safe to move the passed object key value.

    "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
    virtual bool null() = 0;\n

    A null value was read.

    "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

    A floating-point number was read.

    "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
    virtual bool number_integer(number_integer_t val) = 0;\n

    An integer number was read.

    "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
    virtual bool number_unsigned(number_unsigned_t val) = 0;\n

    An unsigned integer number was read.

    "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
    virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

    A parse error occurred.

    "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

    Whether parsing should proceed (must return false).

    "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
    virtual bool start_array(std::size_t elements) = 0;\n

    The beginning of an array was read.

    "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
    virtual bool start_object(std::size_t elements) = 0;\n

    The beginning of an object was read.

    "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
    virtual bool string(string_t& val) = 0;\n

    A string value was read.

    "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

    It is safe to move the passed string value.

    "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/macros/","title":"Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
    • JSON_ASSERT(x) - control behavior of runtime assertions
    "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
    • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
    • JSON_DIAGNOSTICS - control extended diagnostics
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/#language-support","title":"Language support","text":"
    • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
    • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
    • JSON_HAS_RANGES - control std::ranges support
    • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
    • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
    • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
    • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
    "},{"location":"api/macros/#library-version","title":"Library version","text":"
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
    • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
    • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
    "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
    • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
    • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
    "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
    • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
    "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":"
    • Enum: NLOHMANN_JSON_SERIALIZE_ENUM
    • Class/struct:

      • Do you need to serialize private variables?
        • Yes? Do you only need serialization?
          • Yes? NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE
          • No? Allow deserialization of JSON values with missing values?
            • Yes? NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
            • No? NLOHMANN_DEFINE_TYPE_INTRUSIVE
        • No? Do you only need serialization?
          • Yes? NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
          • No? Allow deserialization of JSON values with missing values?
            • Yes? NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
            • No? NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) - serialization/deserialization of types with access to private variables

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) - serialization/deserialization of types without access to private variables
    • NLOHMANN_JSON_SERIALIZE_ENUM(type, ...) - serialization/deserialization of enum types
    "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
    #define JSON_ASSERT(x) /* value */\n

    This macro controls which code is executed for runtime assertions of the library.

    "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)\n

    Therefore, assertions can be switched off by defining NDEBUG.

    "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.
    "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    Example 2: user-defined behavior

    The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

    #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    assertion error in operator[]\n
    "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
    #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new properties: start_pos() and end_pos() are added to nlohmann::basic_json objects and fields. start_pos() returns the start position of that JSON object/field in the original string the object was parsed from. Likewise, end_pos() returns the end position of that JSON object/field in the original string the object was parsed from.

    start_pos() returns the first character of a given element in the original JSON string, while end_pos() returns the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For fields, the first and last character represent the opening and closing quotes or the first and last character of the field's numerical or predefined value (true/false/null), respectively.

    Given the above, end_pos() - start_pos() for an object or field provides the length of the string representation for that object or field, including the opening or closing braces, brackets, or quotes.

    start_pos() and end_pos() are only set if the JSON object was parsed using parse(). For all other cases, std::string::npos will be returned.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead.

    "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example 1: retrieving positions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":""},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
    #define JSON_DIAGNOSTICS /* value */\n

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    Example 2: extended diagnostic messages
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
    "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.template get<Choice>();\n}\n
    Example 2: Serialize enum macro

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.template get<Choice>();\n}\n
    Example 3: User-defined serialization/deserialization functions

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.template get<Choice>();\n}\n
    "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM
    "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
    #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

    The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

    "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
    • JSON_HAS_CPP_11 is always defined.
    • All macros are undefined outside the library.
    "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

    The code below forces the library to use the C++14 standard:

    #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
    #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.
    "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
    #define JSON_HAS_RANGES /* value */\n

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
    #define JSON_HAS_STATIC_RTTI /* value */\n

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
    • Added in version 3.11.3.
    "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
    #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
    #define JSON_NO_IO\n

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO\n
    "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
    #define JSON_NOEXCEPTION\n

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION\n
    "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

    Added in version 2.1.0.

    "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
    #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
    "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!\n
    "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

    Added in version 3.11.0.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

    Added in version 3.2.0.

    "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
    // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
    "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
    "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
    "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
    #define JSON_USE_GLOBAL_UDLS /* value */\n

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    Example 2: Namespaced UDLs

    The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

    #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
    • operator\"\"_json
    • operator\"\"_json_pointer
    "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
    "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

    This is an example for an implicit conversion:

    json j = \"Hello, world!\";\nstd::string s = j;\n

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
    • operator ValueType - get a value (implicit)
    • get - get a value (explicit)
    "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result == false != true < false <= true >= true > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)                    // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)       // (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)     // (3)\n\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)                // (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)   // (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) // (6)\n

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 3 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 4 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    "},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);\nfriend void from_json(const nlohmann::json&, type&);\n

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);\nvoid from_json(const nlohmann::json&, type&);\n

    Macros 3 and 6 add one function to the namespace which take care of the serialization only:

    void to_json(nlohmann::json&, const type&);\n

    In first two cases cases they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\nvoid to_json(nlohmann::json& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\nvoid from_json(const nlohmann::json& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

    In the third case only to_json will be called:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\nvoid to_json(nlohmann::json& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

    Prerequisites

    • Macros 1, 2 and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5 and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    • See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"

    Example of NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE usage:

    class A {\n  double Aa;\n  double Ab;\n  NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A {\n  int Ba;\n  int Bb;\n  NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT for similar macros that can be defined inside a non-derived type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT for similar macros that can be defined outside a non-derived type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
    1. Added in version 3.11.x.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);\nfriend void from_json(const nlohmann::json&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    friend void from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    friend void from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE{_WITH_DEFAULT, _ONLY_SERIALIZE} for a similar macro that can be defined outside the type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version TODO.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);\nvoid from_json(const nlohmann::json&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\nvoid from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\nvoid from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE{_WITH_DEFAULT, _ONLY_SERIALIZE} for a similar macro that can be defined inside the type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version TODO.
    "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
    #define NLOHMANN_JSON_NAMESPACE /* value */\n

    This macro evaluates to the full name of the nlohmann namespace.

    "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi_v3_11_3\n
    "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
    2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

      }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

    When these macros are not defined, the library will define them to their default definitions.

    "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

    #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

    Output:

    [1,null]\n
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi\n
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
    • Added in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.template get<ns::TaskState>();\n    auto blue = j_blue.template get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.template get<ns::TaskState>();\n    auto unknown = j_pi.template get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

    Output:

    ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
    Example 2: Multiple conversions for one enumerator

    The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.template get<ns::Color>();\n    auto red = j_red.template get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

    Output:

    0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
    • Specializing enum conversion
    • JSON_DISABLE_ENUM_SERIALIZATION
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

    Added in version 3.4.0.

    "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
    #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

    The macros are defined according to the current library version.

    "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

    Output:

    JSON for Modern C++ version 3.11.3\n
    "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
    • meta - returns version information on the library
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].template get<std::string>(),\n    j[\"address\"].template get<std::string>(),\n    j[\"age\"].template get<int>()\n};\n

    It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

    // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.template get<ns::person>();\n\n// that's it\nassert(p == p2);\n
    "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

    To make this work with one of your types, you only need to provide two functions:

    using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
    "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are four macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.

    In all macros, the first parameter is the name of the class/struct, and all remaining parameters name the members. You can read more docs about them starting from here.

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
    "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

    This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

    To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

    // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.template get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.template get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
    "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

    Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

    template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template template get<T>(); // oops!\n    }\n};\n
    "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

    Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.11.4, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.11.4, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

    Example 4: Reading from null pointer

    The following code will trigger an assertion at runtime:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
    "},{"location":"features/binary_values/","title":"Binary Values","text":"

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
    classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

    By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

    auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

    There are several convenience functions to check and set the subtype:

    binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

    JSON values can be constructed from json::binary_t:

    json j = binary;\n

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
    "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

    Binary values are serialized differently according to the formats.

    "},{"location":"features/binary_values/#json","title":"JSON","text":"

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

    Output:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/binary_values/#bson","title":"BSON","text":"

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

    v is a std::vector<std::uint8t> with the following 22 elements:

    0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

    v is a std::vector<std::uint8t> with the following 15 elements:

    0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
    "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

    MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as signed 8-bit integer.

    If no subtype is given, the bin family (bin8, bin16, bin32) is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

    v is a std::vector<std::uint8t> with the following 14 elements:

    0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/comments/","title":"Comments","text":"

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception &e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9:\nsyntax error while parsing object key - invalid literal;\nlast read: '<U+000A>    {<U+000A>        /'; expected string literal\n
    {\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

    The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

    "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
    // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.template get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.template get<TaskState>() == TS_INVALID );\n
    "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    1\n3\n2\n

    The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

    "},{"location":"features/iterators/#access-object-key-during-iteration","title":"Access object key during iteration","text":"

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

    Output:

    one : 1\nthree : 3\ntwo : 2\n
    "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

    C++11 allows using range-based for loops to iterate over a container.

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

    rbegin() and rend() return iterators in the reverse sequence.

    Example
    json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    4\n3\n2\n1\n
    "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

    Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    \"Hello, world\"\n
    "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_patch/#diff","title":"Diff","text":"

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

    "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

    JSON Pointers can be created from a string:

    json::json_pointer p = \"/nested/one\";\n

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = \"/nested/one\"_json_pointer;\n

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
    "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

    The resulting value j_flat is:

    {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();\n
    "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
    • Class json_pointer
    • Function flatten
    • Function unflatten
    • JSON Patch
    "},{"location":"features/macros/","title":"Supported Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    "},{"location":"features/macros/#nlohmann_define_derived_type_intrusivetype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_derived_type_intrusive_with_defaulttype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_derived_type_intrusive_only_serializetype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_derived_type_non_intrusivetype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_derived_type_non_intrusive_with_defaulttype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_derived_type_non_intrusive_only_serializetype-base_type-member","title":"NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)","text":""},{"location":"features/macros/#nlohmann_define_type_intrusivetype-member","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)","text":"

    This macro can be used to simplify the serialization/deserialization of types if (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object.

    The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE.

    "},{"location":"features/macros/#nlohmann_define_type_intrusive_with_defaulttype-member","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...)","text":"

    This macro is similar to NLOHMANN_DEFINE_TYPE_INTRUSIVE. It will not throw an exception in from_json() due to a missing value in the JSON object, but can throw due to a mismatched type. The from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.

    "},{"location":"features/macros/#nlohmann_define_type_intrusive_only_serializetype-member","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...)","text":"

    This macro is similar to NLOHMANN_DEFINE_TYPE_INTRUSIVE except that it defines only the serialization code. This is useful when the user type does not have a default constructor and only the serialization is required.

    See full documentation of NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE.

    "},{"location":"features/macros/#nlohmann_define_type_non_intrusivetype-member","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)","text":"

    This macro can be used to simplify the serialization/deserialization of types if (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object.

    The macro is to be defined inside the namespace of the class/struct to create code for. Private members cannot be accessed. Use NLOHMANN_DEFINE_TYPE_INTRUSIVE in these scenarios. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.

    "},{"location":"features/macros/#nlohmann_define_type_non_intrusive_with_defaulttype-member","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...)","text":"

    This macro is similar to NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE. It will not throw an exception in from_json() due to a missing value in the JSON object, but can throw due to a mismatched type. The from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.

    "},{"location":"features/macros/#nlohmann_define_type_non_intrusive_only_serializetype-member","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...)","text":"

    This macro is similar to NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE except that it defines only the serialization code. This is useful when the user type does not have a default constructor and only the serialization is required.

    See full documentation of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.

    "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    "},{"location":"features/namespace/#structure","title":"Structure","text":"

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
      • JSON_DIAGNOSTICS defined non-zero appends _diag.
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2\n
    "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

    Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#version-history","title":"Version history","text":"
    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    "},{"location":"features/object_order/","title":"Object Order","text":"

    The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

    "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
    "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Right way

    The following code correctly calls the parse function from nlohmann::ordered_json:

    std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    Wrong way

    The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

    std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
    "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    • BJData (Binary JData),
    • BSON (Binary JSON),
    • CBOR (Concise Binary Object Representation),
    • MessagePack, and
    • UBJSON (Universal Binary JSON)

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

    See binary values for more information.

    "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    References

    • BJData Specification
    "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    • BSON Website - the main source on BSON
    • BSON Specification - the specification
    "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, integers larger than 9223372036854775807 cannot be serialized to BSON, and the keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    • CBOR Website - the main source on CBOR
    • CBOR Playground - an interactive webpage to translate between JSON and CBOR
    • RFC 7049 - the CBOR specification
    "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by \"break\" (0x7F)
    • arrays terminated by \"break\" (0x9F)
    • maps terminated by \"break\" (0xBF)
    • byte strings terminated by \"break\" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    References

    • MessagePack website
    • MessagePack specification
    "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    • UBJSON Website
    "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/element_access/","title":"Element Access","text":"

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at(\"name\") = \"John Smith\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at(\"hobbies\").at(3) = \"cooking\";\n

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range\n

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
    "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
    "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present.

    Example

    Consider the following JSON value:

    {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#note","title":"Note","text":"

    Exceptions

    • value can only be used with objects. For other types, a basic_json::type_error is thrown.
    "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can be immediately be overwritten.

    Write access
    j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
    "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

    Note

    This page is under construction.

    "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

    See parsing and exceptions.

    "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
    4. The final character may be \\n, but is not required to be one.

    JSON Text example

    {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

    Output:

    {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

    Note

    Using operator>> like

    json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

    In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

    "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

    json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Note there is no diagnostic information available in this scenario.

    "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Again, there is no diagnostic information available.

    "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

    Output:

    parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
    "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
    "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

    When parsing the following JSON text,

    {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

    these calls are made to the callback function:

    event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

    Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

    The library uses a SAX-like interface with the following functions:

    classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
    // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
    • json_sax - documentation of the SAX interface
    • sax_parse - SAX parser
    "},{"location":"features/types/","title":"Types","text":"

    This page gives an overview how JSON values are stored and how this can be configured.

    "},{"location":"features/types/#overview","title":"Overview","text":"

    By default, JSON values are stored as follows:

    JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    "},{"location":"features/types/#storage","title":"Storage","text":"
    classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
    "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

    Type json is an alias for basic_json<> and uses the default types.

    From the template arguments, the following types are derived:

    using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
    "},{"location":"features/types/#objects","title":"Objects","text":"

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    "},{"location":"features/types/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
    "},{"location":"features/types/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"features/types/#key-order","title":"Key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"features/types/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"features/types/#storage_1","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"features/types/#arrays","title":"Arrays","text":"

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    "},{"location":"features/types/#default-type_1","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"features/types/#limits_1","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"features/types/#storage_2","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"features/types/#strings","title":"Strings","text":"

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"features/types/#default-type_2","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"features/types/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"features/types/#storage_3","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"features/types/#booleans","title":"Booleans","text":"

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    "},{"location":"features/types/#default-type_3","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"features/types/#storage_4","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"features/types/#numbers","title":"Numbers","text":"

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    "},{"location":"features/types/#default-types","title":"Default types","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"features/types/#limits_2","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"features/types/#storage_5","title":"Storage","text":"

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

    This document describes how the library is handling numbers.

    "},{"location":"features/types/number_handling/#background","title":"Background","text":"

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

    This section describes how the above number specification is implemented by this library.

    "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    • Numbers with a decimal digit or scientific notation are always stored as double.
    • The number types can be changed, see Template number types.
    • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.
    "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
    "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allow round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
    • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
    • Conversions from float to double can also introduce rounding errors:
      float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
      yields 0.30000001192092896.

    All examples here can be reproduced by passing the original double value to

    std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
    "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

    NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

    RFC 8259, Section 6

    Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    That is, there is no way to parse a NaN value. However, NaN values can be stored in a JSON value by assignment.

    This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

    Example

    The following example shows how a NaN value is stored in a json value.

    int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

    output:

    val=nan\nj=null\nval=nan\n
    "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

    Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

    Alternative comparison functions

    To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
    Or you can self-define an operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

    (see #703 for more information.)

    Note

    NaN values never compare equal to themselves or to other NaN values. See #514.

    "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

    Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

    Unconditional number conversions

    double d = 42.3;                                   // non-integer double value 42.3\njson jd = d;                                       // stores double value 42.3\nstd::int64_t i = jd.template get<std::int64_t>();  // now i==42; no warning or error is produced\n

    Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

    The rationale is twofold:

    1. JSON does not define a number type or precision (see above).
    2. C++ also allows to silently convert between number types.

    Conditional number conversion

    The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

    // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.template get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    • is_number() returns true for any number type
    • is_number_integer() returns true for signed and unsigned integers
    • is_number_unsigned() returns true for unsigned integers only
    • is_number_float() returns true for floating-point numbers
    • type_name() returns \"number\" for any number type
    • type() returns a different enumerator of value_t for all number types
    function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

    The number types can be changed with template parameters.

    position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    "},{"location":"home/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"home/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

    In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.

    "},{"location":"home/code_of_conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to creating a positive environment include:

    • Using welcoming and inclusive language
    • Being respectful of differing viewpoints and experiences
    • Gracefully accepting constructive criticism
    • Focusing on what is best for the community
    • Showing empathy towards other community members

    Examples of unacceptable behavior by participants include:

    • The use of sexualized language or imagery and unwelcome sexual attention or advances
    • Trolling, insulting/derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or electronic address, without explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"home/code_of_conduct/#our-responsibilities","title":"Our Responsibilities","text":"

    Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

    "},{"location":"home/code_of_conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

    "},{"location":"home/code_of_conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at mail@nlohmann.me. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

    Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

    "},{"location":"home/code_of_conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4

    "},{"location":"home/customers/","title":"Customers","text":"

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
    "},{"location":"home/customers/#automotive","title":"Automotive","text":"
    • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
    • Apollo, a framework for building autonomous driving systems
    • Automotive Grade Linux (AGL): a collaborative open-source platform for automotive software development
    • Genesis Motor (infotainment), a luxury automotive brand
    • Hyundai (infotainment), a global automotive brand
    • Kia (infotainment), a global automotive brand
    • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
    • Rivian (infotainment), an electric vehicle manufacturer
    • Suzuki (infotainment), a global automotive and motorcycle manufacturer
    "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
    "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
    "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
    "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
    "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.
    "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
    "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications
    "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    "},{"location":"home/design_goals/","title":"Design goals","text":"

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

    classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
    "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

    Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

    \\u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
    "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

    JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

    An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
    [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
    [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
    "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value\n
    [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

    The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

    Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null\n
    [json.exception.type_error.302] type must be string, but is object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string\n
    [json.exception.type_error.304] cannot use at() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array\n
    [json.exception.type_error.309] cannot use insert() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number\n
    [json.exception.type_error.311] cannot use emplace_back() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {\"/1\", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences
    "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

    "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

    UBJSON only support integer numbers up to 9223372036854775807.

    Example message

    number overflow serializing '9223372036854775808'\n

    Note

    Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers, and this exception does not further occur.

    "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)\n
    "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

    [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
    "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

    Question

    Why does

    json j{true};\n

    and

    json j(true);\n

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};\n

    for arrays and

    json object = {{\"one\", 1}, {\"two\", 2}}; \n

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

    The result is:

    {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
    "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    "},{"location":"home/license/","title":"License","text":"

    The class is licensed under the MIT License:

    Copyright \u00a9 2013-2024 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    "},{"location":"home/releases/#summary","title":"Summary","text":"

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
    "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    "},{"location":"home/releases/#summary_1","title":"Summary","text":"

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
    "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
    • Added WhiteStone Bolt. #1830
    "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

    Files

    • include.zip (273 KB)
    • include.zip.asc (1 KB)
    • json.hpp (789 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    "},{"location":"home/releases/#summary_2","title":"Summary","text":"

    This release fixes several small bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.
    "},{"location":"home/releases/#improvements","title":"Improvements","text":"
    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720
    "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.
    "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

    Files

    • include.zip (143 KB)
    • include.zip.asc (1 KB)
    • json.hpp (782 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    "},{"location":"home/releases/#summary_3","title":"Summary","text":"

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    "},{"location":"home/releases/#new-features","title":"New Features","text":"
    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670
    "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
    "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
    • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
    • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
    "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
    "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    "},{"location":"home/releases/#summary_4","title":"Summary","text":"

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531
    "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
    • Fixed a warning for missing field initializers. #1527
    "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

    "},{"location":"home/releases/#summary_5","title":"Summary","text":"

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
    "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446
    "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
    "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Imroved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16
    "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

    Files

    • include.zip (133 KB)
    • include.zip.asc (1 KB)
    • json.hpp (693 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    "},{"location":"home/releases/#summary_6","title":"Summary","text":"

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
      #1388 #1391

    • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

    "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.
    "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
    "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345
    "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

    Files

    • include.zip (132 KB)
    • include.zip.asc (1 KB)
    • json.hpp (689 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    "},{"location":"home/releases/#summary_7","title":"Summary","text":"

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
    "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser
    "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
    "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277
    "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

    Files

    • include.zip (123 KB)
    • include.zip.asc (1 KB)
    • json.hpp (635 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    "},{"location":"home/releases/#summary_8","title":"Summary","text":"

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
    "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
    "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
    "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
    • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
    • Added lgtm checks to pull requests.
    • Added tests for CMake integration. #1260
    "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

    Files

    • include.zip (124 KB)
    • include.zip.asc (1 KB)
    • json.hpp (636 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    "},{"location":"home/releases/#summary_9","title":"Summary","text":"

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
    "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)
    "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
    "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
    • updated to Catch 1.12.0
    "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

    Files

    • include.zip (115 KB)
    • include.zip.asc (1 KB)
    • json.hpp (582 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    "},{"location":"home/releases/#summary_10","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).
    "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
    • The parser and the serialization now support user-defined string types (#1006, #1009).
    "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
    • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
    • Overworked README by adding links to the documentation (#981).
    "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    "},{"location":"home/releases/#summary_11","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
    "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).
    "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    "},{"location":"home/releases/#summary_12","title":"Summary","text":"

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_6","title":"New features","text":"
    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
    "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
    "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
    "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.
    "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

    Files

    • json.hpp (502 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    "},{"location":"home/releases/#summary_13","title":"Summary","text":"

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    "},{"location":"home/releases/#changes","title":"Changes","text":"
    • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • Updated the container overview documentation (see #883).
    • The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • Fixed some compiler warnings (see #858, #882).
    "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

    Files

    • json.hpp (501 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    "},{"location":"home/releases/#summary_14","title":"Summary","text":"

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of re-using those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
    "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#new-features_7","title":"New features","text":"

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
    "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
    "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

    There are five different exceptions inheriting from json::exception:

    • json::parse_error for syntax errors (including the binary formats),
    • json::invalid_iterator for errors related to iterators,
    • json::type_error for errors where functions were called with the wrong JSON type,
    • json::out_of_range for range errors, and
    • json::other_error for miscellaneous errors.

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);\n

    New code:

    json j = json::parse(ss, cb);\n

    If no callback function is used, also the following code works:

    json j;\nj << ss;\n

    or

    json j;\nss >> j;\n
    "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

    Files

    • json.hpp (437 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    "},{"location":"home/releases/#summary_15","title":"Summary","text":"

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    "},{"location":"home/releases/#changes_1","title":"Changes","text":"
    • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • All throw calls are now wrapped in macros.
    • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • The unit tests now compile two times faster.
    • Cotire is used to speed up the build.
    • Fixed a lot of typos in the documentation.
    • Added a section to the README file that lists all used third-party code/tools.
    • Added a note on constructing a string value vs. parsing.
    • The test suite now contains 11202597 unit tests.
    • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • Removed Doozer.
    • Added Codacity.
    • Upgraded Catch to version 1.7.2.
    "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

    Files

    • json.hpp (426 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
    "},{"location":"home/releases/#summary_16","title":"Summary","text":"

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    "},{"location":"home/releases/#changes_2","title":"Changes","text":"
    • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • A bug in the CBOR parser was fixed which led to a buffer overflow.
    • The function type_name() is now public. It allows to query the type of a JSON value as string.
    • Added the Big List of Naughty Strings as test case.
    • Updated to Catch v1.6.0.
    • Some typos in the documentation have been fixed.
    "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

    Files

    • json.hpp (409 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
    "},{"location":"home/releases/#summary_17","title":"Summary","text":"

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_3","title":"Changes","text":"
    • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • We now also use the Doozer continuous integration platform.
    • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • Clarified documentation of find() function to always return end() when called on non-object value types.
    • Moved thirdparty test code to test/thirdparty directory.
    "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

    Files

    • json.hpp (406 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
    "},{"location":"home/releases/#summary_18","title":"Summary","text":"

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_4","title":"Changes","text":"
    • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • simplified the iteration implementation allowing to remove dozens of lines of code
    • fixed an integer overflow error detected by Google's OSS-Fuzz
    • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • fixed an overflow detection error in the number parser
    • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • added a table of contents to the README file to add some structure
    • mentioned the many examples and the documentation in the README file
    • split unit tests into individual independent binaries to speed up compilation and testing
    • the test suite now contains 11201886 tests
    "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

    Files

    • json.hpp (360 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
    "},{"location":"home/releases/#summary_19","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_5","title":"Changes","text":"
    • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • improved the performance of the serialization (dump function)
    • improved the performance of the deserialization (parser)
    • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • the Coverity scan works again
    • the benchmarking code has been improved to produce more stable results
    • the README file has been extended and includes more frequently asked examples
    • the test suite now contains 8905518 tests
    • updated Catch to version 1.5.8
    "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

    Files

    • json.hpp (355 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
    "},{"location":"home/releases/#summary_20","title":"Summary","text":"

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_6","title":"Changes","text":"
    • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.
    "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

    Files

    • json.hpp (349 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
    "},{"location":"home/releases/#summary_21","title":"Summary","text":"

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_7","title":"Changes","text":"
    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.
    "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
    "},{"location":"home/releases/#summary_22","title":"Summary","text":"

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_8","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
    "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
    "},{"location":"home/releases/#summary_23","title":"Summary","text":"

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_9","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.
    "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
    "},{"location":"home/releases/#summary_24","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_10","title":"Changes","text":"
    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
    "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

    Files

    • json.hpp (338 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
    "},{"location":"home/releases/#summary_25","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_11","title":"Changes","text":"
    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \\x10-\\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.
    "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
    "},{"location":"home/releases/#summary_26","title":"Summary","text":"

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_12","title":"Changes","text":"
    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.
    "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
    "},{"location":"home/releases/#summary_27","title":"Summary","text":"

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

    "},{"location":"home/releases/#changes_13","title":"Changes","text":"
    • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
    • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
    "},{"location":"home/releases/#notes","title":"Notes","text":"
    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
    "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

    Files

    • json.hpp (257 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
    "},{"location":"home/releases/#summary_28","title":"Summary","text":"

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    "},{"location":"home/releases/#changes_14","title":"Changes","text":"
    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
    "},{"location":"home/releases/#notes_1","title":"Notes","text":"

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

    Files

    • json.hpp (243 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
    "},{"location":"home/releases/#summary_29","title":"Summary","text":"

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    "},{"location":"home/releases/#changes_15","title":"Changes","text":"
    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    "},{"location":"home/sponsors/","title":"Sponsors","text":"

    You can sponsor this library at GitHub Sponsors.

    "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
    • Martti Laine
    • Paul Harrington
    "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
    • Michael Hartmann
    • Stefan Hagen
    • Steve Sperandeo
    • Robert Jefe Lindst\u00e4dt
    • Steve Wagner
    • Lion Yang

    Thanks everyone!

    "},{"location":"integration/","title":"Header only","text":"

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    "},{"location":"integration/cmake/#external","title":"External","text":"

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.11.3 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
    thirdparty/CMakeLists.txt
    if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.11.3 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

    FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.11.3\n)\n

    However, the repository https://github.com/nlohmann/json download size is quite large.

    "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is off by default.

    "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

    Use non-amalgamated version of the library. This option is OFF by default.

    "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
    • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

      DeprecatedFuture-proof
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
    • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

      DeprecatedFuture-proof
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
    "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
    • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
    • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
    • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

      DeprecatedFuture-proof
      using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
      nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

      Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

    "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
    • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

      DeprecatedFuture-proof
      for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
    • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

      DeprecatedFuture-proof
      j >> std::cout;\n
      std::cout << j;\n
    • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

      DeprecatedFuture-proof
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
      #include <nlohmann/json.hpp>\n
    "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

    Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

    DeprecatedFuture-proofFuture-proof (alternative)
    nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
    nlohmann::json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

    The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

    DeprecatedFuture-proof
    nlohmann::json j = \"[1,2,3]\"_json;\n
    using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

    "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

    The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

    DangerousFuture-proofFuture-proof (alternative)
    void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    "},{"location":"integration/package_managers/","title":"Package Managers","text":"

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

    When executed, this program should create output similar to

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n
    "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

    Summary

    formula: nlohmann-json

    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json\n

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

    Summary

    wrap: nlohmann_json

    • Availalbe versions: current version and select older versions (see WrapDB)
    • The package is update automatically from file meson.build.
    • File issues at the library issue tracker
    • Meson website

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or simply use

    meson wrap install nlohmann_json\n

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, simply have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

      mkdir subprojects\nmeson wrap install nlohmann_json\n
    3. Build:

      meson setup build\nmeson compile -C build\n
    "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

    Summary

    use bazel_dep, git_override, or local_path_override

    • Any version, that is available via Bazel Central Registry
    • File issues at the library issue tracker
    • Bazel website

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
      WORKSPACE
      bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Build and run:

      bazel build //:main\nbazel run //:main\n
    "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

    Summary

    recipe: nlohmann_json

    • Availalbe versions: current version and older versions (see Conan Center)
    • The package is update automatically via this recipe.
    • File issues at the Conan Center issue tracker
    • Conan website

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]\nnlohmann_json/3.11.3\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Call Conan:

      conan install . --output-folder=build --build=missing\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
    "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version and older versions (see Spack package)
    • The package is updated with every release.
    • Maintainer: Axel Huebl
    • File issues at the Spack issue tracker
    • Spack website

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json\n

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the library:

      spack install nlohmann-json\n
    3. Load the environment for your Spack-installed packages:

      spack load nlohmann-json\n
    4. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
    "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current version and older versions (see Hunter package)
    • The package is updated with every release.
    • File issues at the Hunter issue tracker
    • Hunter website

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)\n

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Download required files

      mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
    3. Build the project with CMake:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version
    • The package is updated with every release.
    • File issues at the vcpkg issue tracker
    • vcpkg website

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json\n

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install package:

      vcpkg install nlohmann-json\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cget","title":"cget","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json\n

    A specific version can be installed with cget install nlohmann/json@v3.11.3. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Initialize cget

      cget init\n
    3. Install the library

      cget install nlohmann/json\n
    4. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

    If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

    "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

    Summary

    package: nlohmann.json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • Maintainer: Hani Kaabi
    • File issues at the maintainer's issue tracker
    • NuGet website

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json\n
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

    Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, just click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to just build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
    2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

      Note

      This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

    3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

      The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

      For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

    If you are using conda, you can use the package nlohmann_json from conda-forge executing conda install -c conda-forge nlohmann_json. Please file issues here.

    "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, just type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

    Summary

    port: nlohmann-json

    • Availalbe versions: current version
    • The port is updated with every release.
    • File issues at the MacPorts issue tracker
    • MacPorts website

    If you are using MacPorts, execute

    sudo port install nlohmann-json\n

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#build2","title":"build2","text":"

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, just add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#wsjcpp","title":"wsjcpp","text":"

    If you are using wsjcpp, you can use the command wsjcpp install \"https://github.com/nlohmann/json:develop\" to get the latest version. Note you can change the branch \":develop\" to an existing tag or another branch.

    wsjcpp reads directly from the GitHub repository and is always up-to-date.

    "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

    Summary

    package: gh:nlohmann/json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the CPM.cmake issue tracker
    • CPM.cmake website

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Download CPM.cmake

      mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
    3. Build

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags\n

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)\n
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.]","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"JSON for Modern C++","text":""},{"location":"api/json/","title":"nlohmann::json","text":"
    using json = basic_json<>;\n

    This type is the default specialization of the basic_json class which uses the standard template types.

    "},{"location":"api/json/#examples","title":"Examples","text":"Example

    The example below demonstrates how to use the type nlohmann::json.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/json/#version-history","title":"Version history","text":"

    Since version 1.0.0.

    "},{"location":"api/operator_gtgt/","title":"nlohmann::operator>>(basic_json)","text":"
    std::istream& operator>>(std::istream& i, basic_json& j);\n

    Deserializes an input stream to a JSON value.

    "},{"location":"api/operator_gtgt/#parameters","title":"Parameters","text":"i (in, out) input stream to read a serialized JSON value from j (in, out) JSON value to write the deserialized input to"},{"location":"api/operator_gtgt/#return-value","title":"Return value","text":"

    the stream i

    "},{"location":"api/operator_gtgt/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/operator_gtgt/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/operator_gtgt/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    Deprecation

    This function replaces function std::istream& operator<<(basic_json& j, std::istream& i) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j << i; with i >> j;.

    "},{"location":"api/operator_gtgt/#examples","title":"Examples","text":"Example

    The example below shows how a JSON value is constructed by reading a serialization from a stream.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create stream with serialized JSON\n    std::stringstream ss;\n    ss << R\"({\n        \"number\": 23,\n        \"string\": \"Hello, world!\",\n        \"array\": [1, 2, 3, 4, 5],\n        \"boolean\": false,\n        \"null\": null\n    })\";\n\n    // create JSON value and read the serialization from the stream\n    json j;\n    ss >> j;\n\n    // serialize JSON\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"array\": [\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"boolean\": false,\n  \"null\": null,\n  \"number\": 23,\n  \"string\": \"Hello, world!\"\n}\n
    "},{"location":"api/operator_gtgt/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • parse - deserialize from a compatible input
    "},{"location":"api/operator_gtgt/#version-history","title":"Version history","text":"
    • Added in version 1.0.0. Deprecated in version 3.0.0.
    "},{"location":"api/operator_literal_json/","title":"nlohmann::operator\"\"_json","text":"
    json operator \"\"_json(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON objects. It can be used by adding _json to a string literal and returns a json object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n

    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON object n (in) length of string s"},{"location":"api/operator_literal_json/#return-value","title":"Return value","text":"

    json value parsed from s

    "},{"location":"api/operator_literal_json/#exceptions","title":"Exceptions","text":"

    The function can throw anything that parse(s, s+n) would throw.

    "},{"location":"api/operator_literal_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON values from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n\n    std::cout << std::setw(2) << j << '\\n';\n}\n

    Output:

    {\n  \"answer\": 42,\n  \"hello\": \"world\"\n}\n
    "},{"location":"api/operator_literal_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_literal_json_pointer/","title":"nlohmann::operator\"\"_json_pointer","text":"
    json_pointer operator \"\"_json_pointer(const char* s, std::size_t n);\n

    This operator implements a user-defined string literal for JSON Pointers. It can be used by adding _json_pointer to a string literal and returns a json_pointer object if no parse error occurred.

    It is recommended to bring the operator into scope using any of the following lines:

    using nlohmann::literals::operator \"\"_json_pointer;\nusing namespace nlohmann::literals;\nusing namespace nlohmann::json_literals;\nusing namespace nlohmann::literals::json_literals;\nusing namespace nlohmann;\n
    This is suggested to ease migration to the next major version release of the library. See JSON_USE_GLOBAL_UDLS for details.

    "},{"location":"api/operator_literal_json_pointer/#parameters","title":"Parameters","text":"s (in) a string representation of a JSON Pointer n (in) length of string s"},{"location":"api/operator_literal_json_pointer/#return-value","title":"Return value","text":"

    json_pointer value parsed from s

    "},{"location":"api/operator_literal_json_pointer/#exceptions","title":"Exceptions","text":"

    The function can throw anything that json_pointer::json_pointer would throw.

    "},{"location":"api/operator_literal_json_pointer/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_literal_json_pointer/#examples","title":"Examples","text":"Example

    The following code shows how to create JSON Pointers from string literals.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    json j = R\"( {\"hello\": \"world\", \"answer\": 42} )\"_json;\n    auto val = j[\"/hello\"_json_pointer];\n\n    std::cout << std::setw(2) << val << '\\n';\n}\n

    Output:

    \"world\"\n
    "},{"location":"api/operator_literal_json_pointer/#see-also","title":"See also","text":"
    • json_pointer - type to represent JSON Pointers
    "},{"location":"api/operator_literal_json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Moved to namespace nlohmann::literals::json_literals in 3.11.0.
    "},{"location":"api/operator_ltlt/","title":"nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer)","text":"
    std::ostream& operator<<(std::ostream& o, const basic_json& j);      // (1)\n\nstd::ostream& operator<<(std::ostream& o, const json_pointer& ptr);  // (2)\n
    1. Serialize the given JSON value j to the output stream o. The JSON value will be serialized using the dump member function.
      • The indentation of the output can be controlled with the member variable width of the output stream o. For instance, using the manipulator std::setw(4) on o sets the indentation level to 4 and the serialization result is the same as calling dump(4).
      • The indentation character can be controlled with the member variable fill of the output stream o. For instance, the manipulator std::setfill('\\\\t') sets indentation to use a tab character rather than the default space character.
    2. Write a string representation of the given JSON pointer ptr to the output stream o. The string representation is obtained using the to_string member function.
    "},{"location":"api/operator_ltlt/#parameters","title":"Parameters","text":"o (in, out) stream to write to j (in) JSON value to serialize ptr (in) JSON pointer to write"},{"location":"api/operator_ltlt/#return-value","title":"Return value","text":"

    the stream o

    "},{"location":"api/operator_ltlt/#exceptions","title":"Exceptions","text":"
    1. Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the dump member functions, no error_handler can be set.
    2. None.
    "},{"location":"api/operator_ltlt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/operator_ltlt/#notes","title":"Notes","text":"

    Deprecation

    Function std::ostream& operator<<(std::ostream& o, const basic_json& j) replaces function std::ostream& operator>>(const basic_json& j, std::ostream& o) which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like j >> o; with o << j;.

    "},{"location":"api/operator_ltlt/#examples","title":"Examples","text":"Example: (1) serialize JSON value to stream

    The example below shows the serialization with different parameters to width to adjust the indentation level.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // serialize without indentation\n    std::cout << j_object << \"\\n\\n\";\n    std::cout << j_array << \"\\n\\n\";\n\n    // serialize with indentation\n    std::cout << std::setw(4) << j_object << \"\\n\\n\";\n    std::cout << std::setw(2) << j_array << \"\\n\\n\";\n    std::cout << std::setw(1) << std::setfill('\\t') << j_object << \"\\n\\n\";\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n[1,2,4,8,16]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n[\n  1,\n  2,\n  4,\n  8,\n  16\n]\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n
    Example: (2) write JSON pointer to stream

    The example below shows how to write a JSON pointer to a stream.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON poiner\n    json::json_pointer ptr(\"/foo/bar/baz\");\n\n    // write string representation to stream\n    std::cout << ptr << std::endl;\n}\n

    Output:

    /foo/bar/baz\n
    "},{"location":"api/operator_ltlt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for indentation character and deprecated std::ostream& operator>>(const basic_json& j, std::ostream& o) in version 3.0.0.
    2. Added in version 3.11.0.
    "},{"location":"api/ordered_json/","title":"nlohmann::ordered_json","text":"
    using ordered_json = basic_json<ordered_map>;\n

    This type preserves the insertion order of object keys.

    "},{"location":"api/ordered_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type is based on ordered_map which in turn uses a std::vector to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/ordered_json/#examples","title":"Examples","text":"Example

    The example below demonstrates how ordered_json preserves the insertion order of object keys.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    "},{"location":"api/ordered_json/#see-also","title":"See also","text":"
    • ordered_map
    • Object Order
    "},{"location":"api/ordered_json/#version-history","title":"Version history","text":"

    Since version 3.9.0.

    "},{"location":"api/ordered_map/","title":"nlohmann::ordered_map","text":"
    template<class Key, class T, class IgnoredLess = std::less<Key>,\n         class Allocator = std::allocator<std::pair<const Key, T>>>\nstruct ordered_map : std::vector<std::pair<const Key, T>, Allocator>;\n

    A minimal map-like container that preserves insertion order for use within nlohmann::ordered_json (nlohmann::basic_json<ordered_map>).

    "},{"location":"api/ordered_map/#template-parameters","title":"Template parameters","text":"Key key type T mapped type IgnoredLess comparison function (ignored and only added to ensure compatibility with std::map) Allocator allocator type"},{"location":"api/ordered_map/#iterator-invalidation","title":"Iterator invalidation","text":"

    The type uses a std::vector to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/ordered_map/#member-types","title":"Member types","text":"
    • key_type - key type (Key)
    • mapped_type - mapped type (T)
    • Container - base container type (std::vector<std::pair<const Key, T>, Allocator>)
    • iterator
    • const_iterator
    • size_type
    • value_type
    • key_compare - key comparison function
      std::equal_to<Key>  // until C++14\n\nstd::equal_to<>     // since C++14\n
    "},{"location":"api/ordered_map/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • emplace
    • operator[]
    • at
    • erase
    • count
    • find
    • insert
    "},{"location":"api/ordered_map/#examples","title":"Examples","text":"Example

    The example shows the different behavior of std::map and nlohmann::ordered_map.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// simple output function\ntemplate<typename Map>\nvoid output(const char* prefix, const Map& m)\n{\n    std::cout << prefix << \" = { \";\n    for (auto& element : m)\n    {\n        std::cout << element.first << \":\" << element.second << ' ';\n    }\n    std::cout << \"}\" << std::endl;\n}\n\nint main()\n{\n    // create and fill two maps\n    nlohmann::ordered_map<std::string, std::string> m_ordered;\n    m_ordered[\"one\"] = \"eins\";\n    m_ordered[\"two\"] = \"zwei\";\n    m_ordered[\"three\"] = \"drei\";\n\n    std::map<std::string, std::string> m_std;\n    m_std[\"one\"] = \"eins\";\n    m_std[\"two\"] = \"zwei\";\n    m_std[\"three\"] = \"drei\";\n\n    // output: m_ordered is ordered by insertion order, m_std is ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n\n    // erase and re-add \"one\" key\n    m_ordered.erase(\"one\");\n    m_ordered[\"one\"] = \"eins\";\n\n    m_std.erase(\"one\");\n    m_std[\"one\"] = \"eins\";\n\n    // output: m_ordered shows newly added key at the end; m_std is again ordered by key\n    output(\"m_ordered\", m_ordered);\n    output(\"m_std\", m_std);\n}\n

    Output:

    m_ordered = { one:eins two:zwei three:drei }\nm_std = { one:eins three:drei two:zwei }\nm_ordered = { two:zwei three:drei one:eins }\nm_std = { one:eins three:drei two:zwei }\n
    "},{"location":"api/ordered_map/#see-also","title":"See also","text":"
    • ordered_json
    "},{"location":"api/ordered_map/#version-history","title":"Version history","text":"
    • Added in version 3.9.0 to implement nlohmann::ordered_json.
    • Added key_compare member in version 3.11.0.
    "},{"location":"api/adl_serializer/","title":"nlohmann::adl_serializer","text":"
    template<typename, typename>\nstruct adl_serializer;\n

    Serializer that uses ADL (Argument-Dependent Lookup) to choose to_json/from_json functions from the types' namespaces.

    It is implemented similar to

    template<typename ValueType>\nstruct adl_serializer {\n    template<typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    template<typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n
    "},{"location":"api/adl_serializer/#member-functions","title":"Member functions","text":"
    • from_json - convert a JSON value to any value type
    • to_json - convert any value type to a JSON value
    "},{"location":"api/adl_serializer/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/from_json/","title":"nlohmann::adl_serializer::from_json","text":"
    // (1)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j, TargetType& val) noexcept(\n    noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())\n\n// (2)\ntemplate<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto from_json(BasicJsonType && j) noexcept(\nnoexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))\n-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))\n

    This function is usually called by the get() function of the basic_json class (either explicitly or via the conversion operators).

    1. This function is chosen for default-constructible value types.
    2. This function is chosen for value types which are not default-constructible.
    "},{"location":"api/adl_serializer/from_json/#parameters","title":"Parameters","text":"j (in) JSON value to read from val (out) value to write to"},{"location":"api/adl_serializer/from_json/#return-value","title":"Return value","text":"

    Copy of the JSON value, converted to ValueType

    "},{"location":"api/adl_serializer/from_json/#examples","title":"Examples","text":"Example: (1) Default-constructible type

    The example below shows how a from_json function can be implemented for a user-defined type. This function is called by the adl_serializer when template get<ns::person>() is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid from_json(const json& j, person& p)\n{\n    j.at(\"name\").get_to(p.name);\n    j.at(\"address\").get_to(p.address);\n    j.at(\"age\").get_to(p.age);\n}\n} // namespace ns\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    Example: (2) Non-default-constructible type

    The example below shows how a from_json is implemented as part of a specialization of the adl_serializer to realize the conversion of a non-default-constructible type.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/adl_serializer/from_json/#see-also","title":"See also","text":"
    • to_json
    "},{"location":"api/adl_serializer/from_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/adl_serializer/to_json/","title":"nlohmann::adl_serializer::to_json","text":"
    template<typename BasicJsonType, typename TargetType = ValueType>\nstatic auto to_json(BasicJsonType& j, TargetType && val) noexcept(\n    noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))\n-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())\n

    This function is usually called by the constructors of the basic_json class.

    "},{"location":"api/adl_serializer/to_json/#parameters","title":"Parameters","text":"j (out) JSON value to write to val (in) value to read from"},{"location":"api/adl_serializer/to_json/#examples","title":"Examples","text":"Example

    The example below shows how a to_json function can be implemented for a user-defined type. This function is called by the adl_serializer when the constructor basic_json(ns::person) is called.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace ns\n{\nvoid to_json(json& j, const person& p)\n{\n    j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    json j = p;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n
    "},{"location":"api/adl_serializer/to_json/#see-also","title":"See also","text":"
    • from_json
    "},{"location":"api/adl_serializer/to_json/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/","title":"nlohmann::basic_json","text":"

    Defined in header <nlohmann/json.hpp>

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>,\n    class CustomBaseClass = void\n>\nclass basic_json;\n
    "},{"location":"api/basic_json/#template-parameters","title":"Template parameters","text":"Template parameter Description Derived type ObjectType type for JSON objects object_t ArrayType type for JSON arrays array_t StringType type for JSON strings and object keys string_t BooleanType type for JSON booleans boolean_t NumberIntegerType type for JSON integer numbers number_integer_t NumberUnsignedType type for JSON unsigned integer numbers number_unsigned_t NumberFloatType type for JSON floating-point numbers number_float_t AllocatorType type of the allocator to use JSONSerializer the serializer to resolve internal calls to to_json() and from_json() json_serializer BinaryType type for binary arrays binary_t CustomBaseClass extension point for user code json_base_class_t"},{"location":"api/basic_json/#specializations","title":"Specializations","text":"
    • json - default specialization
    • ordered_json - specialization that maintains the insertion order of object keys
    "},{"location":"api/basic_json/#iterator-invalidation","title":"Iterator invalidation","text":"

    All operations that add values to an array (push_back , operator+=, emplace_back, insert, and operator[] for a non-existing index) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also all operations that add a value to an object (push_back, operator+=, emplace, insert, update, and operator[] for a non-existing key) can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/#requirements","title":"Requirements","text":"

    The class satisfies the following concept requirements:

    "},{"location":"api/basic_json/#basic","title":"Basic","text":"
    • DefaultConstructible: JSON values can be default constructed. The result will be a JSON null value.
    • MoveConstructible: A JSON value can be constructed from an rvalue argument.
    • CopyConstructible: A JSON value can be copy-constructed from an lvalue expression.
    • MoveAssignable: A JSON value can be assigned from an rvalue argument.
    • CopyAssignable: A JSON value can be copy-assigned from an lvalue expression.
    • Destructible: JSON values can be destructed.
    "},{"location":"api/basic_json/#layout","title":"Layout","text":"
    • StandardLayoutType: JSON values have standard layout: All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes.
    "},{"location":"api/basic_json/#library-wide","title":"Library-wide","text":"
    • EqualityComparable: JSON values can be compared with ==, see operator==.
    • LessThanComparable: JSON values can be compared with <, see operator<.
    • Swappable: Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function swap.
    • NullablePointer: JSON values can be compared against std::nullptr_t objects which are used to model the null value.
    "},{"location":"api/basic_json/#container","title":"Container","text":"
    • Container: JSON values can be used like STL containers and provide iterator access.
    • ReversibleContainer: JSON values can be used like STL containers and provide reverse iterator access.
    "},{"location":"api/basic_json/#member-types","title":"Member types","text":"
    • adl_serializer - the default serializer
    • value_t - the JSON type enumeration
    • json_pointer - JSON Pointer implementation
    • json_serializer - type of the serializer to for conversions from/to JSON
    • error_handler_t - type to choose behavior on decoding errors
    • cbor_tag_handler_t - type to choose how to handle CBOR tags
    • initializer_list_t - type for initializer lists of basic_json values
    • input_format_t - type to choose the format to parse
    • json_sax_t - type for SAX events
    "},{"location":"api/basic_json/#exceptions","title":"Exceptions","text":"
    • exception - general exception of the basic_json class
      • parse_error - exception indicating a parse error
      • invalid_iterator - exception indicating errors with iterators
      • type_error - exception indicating executing a member function with a wrong type
      • out_of_range - exception indicating access out of the defined range
      • other_error - exception indicating other library errors
    "},{"location":"api/basic_json/#container-types","title":"Container types","text":"Type Definition value_type basic_json reference value_type& const_reference const value_type& difference_type std::ptrdiff_t size_type std::size_t allocator_type AllocatorType<basic_json> pointer std::allocator_traits<allocator_type>::pointer const_pointer std::allocator_traits<allocator_type>::const_pointer iterator LegacyBidirectionalIterator const_iterator constant LegacyBidirectionalIterator reverse_iterator reverse iterator, derived from iterator const_reverse_iterator reverse iterator, derived from const_iterator iteration_proxy helper type for items function"},{"location":"api/basic_json/#json-value-data-types","title":"JSON value data types","text":"
    • array_t - type for arrays
    • binary_t - type for binary arrays
    • boolean_t - type for booleans
    • default_object_comparator_t - default comparator for objects
    • number_float_t - type for numbers (floating-point)
    • number_integer_t - type for numbers (integer)
    • number_unsigned_t - type for numbers (unsigned)
    • object_comparator_t - comparator for objects
    • object_t - type for objects
    • string_t - type for strings
    "},{"location":"api/basic_json/#parser-callback","title":"Parser callback","text":"
    • parse_event_t - parser event types
    • parser_callback_t - per-element parser callback type
    "},{"location":"api/basic_json/#member-functions","title":"Member functions","text":"
    • (constructor)
    • (destructor)
    • operator= - copy assignment
    • array (static) - explicitly create an array
    • binary (static) - explicitly create a binary array
    • object (static) - explicitly create an object
    "},{"location":"api/basic_json/#object-inspection","title":"Object inspection","text":"

    Functions to inspect the type of a JSON value.

    • type - return the type of the JSON value
    • operator value_t - return the type of the JSON value
    • type_name - return the type as string
    • is_primitive - return whether type is primitive
    • is_structured - return whether type is structured
    • is_null - return whether value is null
    • is_boolean - return whether value is a boolean
    • is_number - return whether value is a number
    • is_number_integer - return whether value is an integer number
    • is_number_unsigned - return whether value is an unsigned integer number
    • is_number_float - return whether value is a floating-point number
    • is_object - return whether value is an object
    • is_array - return whether value is an array
    • is_string - return whether value is a string
    • is_binary - return whether value is a binary array
    • is_discarded - return whether value is discarded

    Optional functions to access the diagnostic positions.

    • start_pos - return the start position of the value
    • end_pos - return the one past the end position of the value
    "},{"location":"api/basic_json/#value-access","title":"Value access","text":"

    Direct access to the stored value of a JSON value.

    • get - get a value
    • get_to - get a value and write it to a destination
    • get_ptr - get a pointer value
    • get_ref - get a reference value
    • operator ValueType - get a value
    • get_binary - get a binary value
    "},{"location":"api/basic_json/#element-access","title":"Element access","text":"

    Access to the JSON value

    • at - access specified element with bounds checking
    • operator[] - access specified element
    • value - access specified object element with default value
    • front - access the first element
    • back - access the last element
    "},{"location":"api/basic_json/#lookup","title":"Lookup","text":"
    • find - find an element in a JSON object
    • count - returns the number of occurrences of a key in a JSON object
    • contains - check the existence of an element in a JSON object
    "},{"location":"api/basic_json/#iterators","title":"Iterators","text":"
    • begin - returns an iterator to the first element
    • cbegin - returns a const iterator to the first element
    • end - returns an iterator to one past the last element
    • cend - returns a const iterator to one past the last element
    • rbegin - returns an iterator to the reverse-beginning
    • rend - returns an iterator to the reverse-end
    • crbegin - returns a const iterator to the reverse-beginning
    • crend - returns a const iterator to the reverse-end
    • items - wrapper to access iterator member functions in range-based for
    "},{"location":"api/basic_json/#capacity","title":"Capacity","text":"
    • empty - checks whether the container is empty
    • size - returns the number of elements
    • max_size - returns the maximum possible number of elements
    "},{"location":"api/basic_json/#modifiers","title":"Modifiers","text":"
    • clear - clears the contents
    • push_back - add a value to an array/object
    • operator+= - add a value to an array/object
    • emplace_back - add a value to an array
    • emplace - add a value to an object if key does not exist
    • erase - remove elements
    • insert - inserts elements
    • update - updates a JSON object from another object, overwriting existing keys
    • swap - exchanges the values
    "},{"location":"api/basic_json/#lexicographical-comparison-operators","title":"Lexicographical comparison operators","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator> - comparison: greater than
    • operator<= - comparison: less than or equal
    • operator>= - comparison: greater than or equal
    • operator<=> - comparison: 3-way
    "},{"location":"api/basic_json/#serialization-dumping","title":"Serialization / Dumping","text":"
    • dump - serialization
    "},{"location":"api/basic_json/#deserialization-parsing","title":"Deserialization / Parsing","text":"
    • parse (static) - deserialize from a compatible input
    • accept (static) - check if the input is valid JSON
    • sax_parse (static) - generate SAX events
    "},{"location":"api/basic_json/#json-pointer-functions","title":"JSON Pointer functions","text":"
    • flatten - return flattened JSON value
    • unflatten - unflatten a previously flattened JSON value
    "},{"location":"api/basic_json/#json-patch-functions","title":"JSON Patch functions","text":"
    • patch - applies a JSON patch
    • patch_inplace - applies a JSON patch in place
    • diff (static) - creates a diff as a JSON patch
    "},{"location":"api/basic_json/#json-merge-patch-functions","title":"JSON Merge Patch functions","text":"
    • merge_patch - applies a JSON Merge Patch
    "},{"location":"api/basic_json/#static-functions","title":"Static functions","text":"
    • meta - returns version information on the library
    • get_allocator - returns the allocator associated with the container
    "},{"location":"api/basic_json/#binary-formats","title":"Binary formats","text":"
    • from_bjdata (static) - create a JSON value from an input in BJData format
    • from_bson (static) - create a JSON value from an input in BSON format
    • from_cbor (static) - create a JSON value from an input in CBOR format
    • from_msgpack (static) - create a JSON value from an input in MessagePack format
    • from_ubjson (static) - create a JSON value from an input in UBJSON format
    • to_bjdata (static) - create a BJData serialization of a given JSON value
    • to_bson (static) - create a BSON serialization of a given JSON value
    • to_cbor (static) - create a CBOR serialization of a given JSON value
    • to_msgpack (static) - create a MessagePack serialization of a given JSON value
    • to_ubjson (static) - create a UBJSON serialization of a given JSON value
    "},{"location":"api/basic_json/#non-member-functions","title":"Non-member functions","text":"
    • operator<<(std::ostream&) - serialize to stream
    • operator>>(std::istream&) - deserialize from stream
    • to_string - user-defined to_string function for JSON values
    "},{"location":"api/basic_json/#literals","title":"Literals","text":"
    • operator\"\"_json - user-defined string literal for JSON values
    "},{"location":"api/basic_json/#helper-classes","title":"Helper classes","text":"
    • std::hash<basic_json> - return a hash value for a JSON object
    • std::swap<basic_json> - exchanges the values of two JSON objects
    "},{"location":"api/basic_json/#examples","title":"Examples","text":"Example

    The example shows how the library is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // add new values\n    j[\"new\"][\"key\"][\"value\"] = {\"another\", \"list\"};\n\n    // count elements\n    auto s = j.size();\n    j[\"size\"] = s;\n\n    // pretty print with indent of 4 spaces\n    std::cout << std::setw(4) << j << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"new\": {\n        \"key\": {\n            \"value\": [\n                \"another\",\n                \"list\"\n            ]\n        }\n    },\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141,\n    \"size\": 8\n}\n
    "},{"location":"api/basic_json/#see-also","title":"See also","text":"
    • RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
    "},{"location":"api/basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/accept/","title":"nlohmann::basic_json::accept","text":"
    // (1)\ntemplate<typename InputType>\nstatic bool accept(InputType&& i,\n                   const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic bool accept(IteratorType first, IteratorType last,\n                   const bool ignore_comments = false);\n

    Checks whether the input is valid JSON.

    1. Reads from a compatible input.
    2. Reads from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    Unlike the parse() function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information.

    "},{"location":"api/basic_json/accept/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/accept/#parameters","title":"Parameters","text":"i (in) Input to parse from. ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/accept/#return-value","title":"Return value","text":"

    Whether the input is valid JSON.

    "},{"location":"api/basic_json/accept/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/accept/#exceptions","title":"Exceptions","text":"

    Throws parse_error.101 in case of an empty input like a null FILE* or char* pointer.

    "},{"location":"api/basic_json/accept/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser.

    "},{"location":"api/basic_json/accept/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/accept/#examples","title":"Examples","text":"Example

    The example below demonstrates the accept() function reading from a string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a valid JSON text\n    auto valid_text = R\"(\n    {\n        \"numbers\": [1, 2, 3]\n    }\n    )\";\n\n    // an invalid JSON text\n    auto invalid_text = R\"(\n    {\n        \"strings\": [\"extra\", \"comma\", ]\n    }\n    )\";\n\n    std::cout << std::boolalpha\n              << json::accept(valid_text) << ' '\n              << json::accept(invalid_text) << '\\n';\n}\n

    Output:

    true false\n
    "},{"location":"api/basic_json/accept/#see-also","title":"See also","text":"
    • parse - deserialize from a compatible input
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/accept/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to accept with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like accept({ptr, ptr+len}, ...); with accept(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/array/","title":"nlohmann::basic_json::array","text":"
    static basic_json array(initializer_list_t init = {});\n

    Creates a JSON array value from a given initializer list. That is, given a list of values a, b, c, creates the JSON value [a, b, c]. If the initializer list is empty, the empty array [] is created.

    "},{"location":"api/basic_json/array/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an array from (optional)"},{"location":"api/basic_json/array/#return-value","title":"Return value","text":"

    JSON array value

    "},{"location":"api/basic_json/array/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/array/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/array/#notes","title":"Notes","text":"

    This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (basic_json(initializer_list_t, bool, value_t)). These cases are:

    1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys
    2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object
    "},{"location":"api/basic_json/array/#examples","title":"Examples","text":"Example

    The following code shows an example for the array function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON arrays\n    json j_no_init_list = json::array();\n    json j_empty_init_list = json::array({});\n    json j_nonempty_init_list = json::array({1, 2, 3, 4});\n    json j_list_of_pairs = json::array({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON arrays\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_nonempty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n}\n

    Output:

    []\n[]\n[1,2,3,4]\n[[\"one\",1],[\"two\",2]]\n
    "},{"location":"api/basic_json/array/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • object - create a JSON object value from an initializer list
    "},{"location":"api/basic_json/array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/array_t/","title":"nlohmann::basic_json::array_t","text":"
    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n

    The type used to store JSON arrays.

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    To store objects in C++, a type is defined by the template parameters explained below.

    "},{"location":"api/basic_json/array_t/#template-parameters","title":"Template parameters","text":"ArrayType container type to store arrays (e.g., std::vector or std::list) AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/array_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/array_t/#default-type","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"api/basic_json/array_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"api/basic_json/array_t/#storage","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"api/basic_json/array_t/#examples","title":"Examples","text":"Example

    The following code shows that array_t is by default, a typedef to std::vector<nlohmann::json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/array_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/at/","title":"nlohmann::basic_json::at","text":"
    // (1)\nreference at(size_type idx);\nconst_reference at(size_type idx) const;\n\n// (2)\nreference at(const typename object_t::key_type& key);\nconst_reference at(const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference at(KeyType&& key);\ntemplate<typename KeyType>\nconst_reference at(KeyType&& key) const;\n\n// (4)\nreference at(const json_pointer& ptr);\nconst_reference at(const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx, with bounds checking.
    2. Returns a reference to the object element with specified key key, with bounds checking.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element at specified JSON pointer ptr, with bounds checking.
    "},{"location":"api/basic_json/at/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/at/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the elements to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/at/#return-value","title":"Return value","text":"
    1. reference to the element at index idx
    2. reference to the element at key key
    3. reference to the element at key key
    4. reference to the element pointed to by ptr
    "},{"location":"api/basic_json/at/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/at/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an array; in this case, calling at with an index makes no sense. See example below.
      • Throws out_of_range.401 if the index idx is out of range of the array; that is, idx >= size(). See example below.
    2. The function can throw the following exceptions:
      • Throws type_error.304 if the JSON value is not an object; in this case, calling at with a key makes no sense. See example below.
      • Throws out_of_range.403 if the key key is not stored in the object; that is, find(key) == end(). See example below.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'. See example below.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number. See example below.
      • Throws out_of_range.401 if an array index in the passed JSON pointer ptr is out of range. See example below.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr. As at provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below.
      • Throws out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved. See example below.
    "},{"location":"api/basic_json/at/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/at/#examples","title":"Examples","text":"Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // change element at index 1 (second element) to \"second\"\n    array.at(1) = \"second\";\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        json str = \"I am a string\";\n        str.at(0) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write beyond the array limit\n        array.at(5) = \"sixth\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[\"first\",\"second\",\"third\",\"fourth\"]\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (1) access specified array element with bounds checking

    The example below shows how array elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-array type\n        const json str = \"I am a string\";\n        std::cout << str.at(0) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read beyond the array limit\n        std::cout << array.at(5) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"third\"\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.401] array index 5 is out of range\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // change element with key \"the bad\"\n    object.at(\"the bad\") = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\") = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key\n        object.at(\"the fast\") = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (2) access specified object element with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\"\n    std::cout << object.at(\"the ugly\") << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\") << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key\n        std::cout << object.at(\"the fast\") << '\\n';\n    }\n    catch (const json::out_of_range)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // change element with key \"the bad\" using string_view\n    object.at(\"the bad\"sv) = \"il cattivo\";\n\n    // output changed array\n    std::cout << object << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        json str = \"I am a string\";\n        str.at(\"the good\"sv) = \"Another string\";\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to write at a nonexisting key using string_view\n        object.at(\"the fast\"sv) = \"il rapido\";\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n{\"the bad\":\"il cattivo\",\"the good\":\"il buono\",\"the ugly\":\"il brutto\"}\n[json.exception.type_error.304] cannot use at() with string\n[json.exception.out_of_range.403] key 'the fast' not found\n
    Example: (3) access specified object element using string_view with bounds checking

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON object\n    const json object =\n    {\n        {\"the good\", \"il buono\"},\n        {\"the bad\", \"il cattivo\"},\n        {\"the ugly\", \"il brutto\"}\n    };\n\n    // output element with key \"the ugly\" using string_view\n    std::cout << object.at(\"the ugly\"sv) << '\\n';\n\n    // exception type_error.304\n    try\n    {\n        // use at() with string_view on a non-object type\n        const json str = \"I am a string\";\n        std::cout << str.at(\"the good\"sv) << '\\n';\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // exception out_of_range.401\n    try\n    {\n        // try to read from a nonexisting key using string_view\n        std::cout << object.at(\"the fast\"sv) << '\\n';\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << \"out of range\" << '\\n';\n    }\n}\n

    Output:

    \"il brutto\"\n[json.exception.type_error.304] cannot use at() with string\nout of range\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read and written using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // writing access\n\n    // change the string\n    j.at(\"/string\"_json_pointer) = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // change an array element\n    j.at(\"/array/1\"_json_pointer) = 21;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // out_of_range.106\n    try\n    {\n        // try to use an array index with leading '0'\n        json::reference ref = j.at(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n[1,21]\n[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how object elements can be read using at(). It also demonstrates the different exceptions that can be thrown.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j.at(\"/number\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j.at(\"/string\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j.at(\"/array\"_json_pointer) << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j.at(\"/array/1\"_json_pointer) << '\\n';\n\n    // out_of_range.109\n    try\n    {\n        // try to use an array index that is not a number\n        json::const_reference ref = j.at(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.401\n    try\n    {\n        // try to use an invalid array index\n        json::const_reference ref = j.at(\"/array/4\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.402\n    try\n    {\n        // try to use the array index '-'\n        json::const_reference ref = j.at(\"/array/-\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.403\n    try\n    {\n        // try to use a JSON pointer to a nonexistent object key\n        json::const_reference ref = j.at(\"/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // out_of_range.404\n    try\n    {\n        // try to use a JSON pointer that cannot be resolved\n        json::const_reference ref = j.at(\"/number/foo\"_json_pointer);\n    }\n    catch (const json::out_of_range& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n[json.exception.parse_error.109] parse error: array index 'one' is not a number\n[json.exception.out_of_range.401] array index 4 is out of range\n[json.exception.out_of_range.402] array index '-' (2) is out of range\n[json.exception.out_of_range.403] key 'foo' not found\n[json.exception.out_of_range.404] unresolved reference token 'foo'\n
    "},{"location":"api/basic_json/at/#see-also","title":"See also","text":"
    • documentation on checked access
    • see operator[] for unchecked access by reference
    • see value for access with default value
    "},{"location":"api/basic_json/at/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/back/","title":"nlohmann::basic_json::back","text":"
    reference back();\n\nconst_reference back() const;\n

    Returns a reference to the last element in the container. For a JSON container c, the expression c.back() is equivalent to

    auto tmp = c.end();\n--tmp;\nreturn *tmp;\n
    "},{"location":"api/basic_json/back/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/back/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/back/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/back/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling back on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/back/#examples","title":"Examples","text":"Example

    The following code shows an example for back().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call back()\n    std::cout << j_boolean.back() << '\\n';\n    std::cout << j_number_integer.back() << '\\n';\n    std::cout << j_number_float.back() << '\\n';\n    std::cout << j_object.back() << '\\n';\n    //std::cout << j_object_empty.back() << '\\n';  // undefined behavior\n    std::cout << j_array.back() << '\\n';\n    //std::cout << j_array_empty.back() << '\\n';   // undefined behavior\n    std::cout << j_string.back() << '\\n';\n\n    // back() called on a null value\n    try\n    {\n        json j_null;\n        j_null.back();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\n17\n23.42\n2\n16\n\"Hello, world\"\n[json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"api/basic_json/back/#see-also","title":"See also","text":"
    • front to access the first element
    "},{"location":"api/basic_json/back/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/basic_json/","title":"nlohmann::basic_json::basic_json","text":"
    // (1)\nbasic_json(const value_t v);\n\n// (2)\nbasic_json(std::nullptr_t = nullptr) noexcept;\n\n// (3)\ntemplate<typename CompatibleType>\nbasic_json(CompatibleType&& val) noexcept(noexcept(\n           JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),\n                                      std::forward<CompatibleType>(val))));\n\n// (4)\ntemplate<typename BasicJsonType>\nbasic_json(const BasicJsonType& val);\n\n// (5)\nbasic_json(initializer_list_t init,\n           bool type_deduction = true,\n           value_t manual_type = value_t::array);\n\n// (6)\nbasic_json(size_type cnt, const basic_json& val);\n\n// (7)\nbasic_json(iterator first, iterator last);\nbasic_json(const_iterator first, const_iterator last);\n\n// (8)\nbasic_json(const basic_json& other);\n\n// (9)\nbasic_json(basic_json&& other) noexcept;\n
    1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type:

      Value type initial value null null boolean false string \"\" number 0 object {} array [] binary empty array

      The postcondition of this constructor can be restored by calling clear().

    2. Create a null JSON value. It either takes a null pointer as parameter (explicitly creating null) or no parameter (implicitly creating null). The passed null pointer itself is not read -- it is only used to choose the right constructor.

    3. This is a \"catch all\" constructor for all compatible JSON types; that is, types for which a to_json() method exists. The constructor forwards the parameter val to that method (to json_serializer<U>::to_json method with U = uncvref_t<CompatibleType>, to be exact).

      Template type CompatibleType includes, but is not limited to, the following types:

      • arrays: array_t and all kinds of compatible containers such as std::vector, std::deque, std::list, std::forward_list, std::array, std::valarray, std::set, std::unordered_set, std::multiset, and std::unordered_multiset with a value_type from which a basic_json value can be constructed.
      • objects: object_t and all kinds of compatible associative containers such as std::map, std::unordered_map, std::multimap, and std::unordered_multimap with a key_type compatible to string_t and a value_type from which a basic_json value can be constructed.
      • strings: string_t, string literals, and all compatible string containers can be used.
      • numbers: number_integer_t, number_unsigned_t, number_float_t, and all convertible number types such as int, size_t, int64_t, float or double can be used.
      • boolean: boolean_t / bool can be used.
      • binary: binary_t / std::vector<uint8_t> may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with const char* will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type.

      See the examples below.

    4. This is a constructor for existing basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones.

      The constructor tries to convert the internal m_value of the parameter.

    5. Creates a JSON value of type array or object from the passed initializer list init. In case type_deduction is true (default), the type of the JSON value to be created is deducted from the initializer list init according to the following rules:

      1. If the list is empty, an empty JSON object value {} is created.
      2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values.
      3. In all other cases, an array is created.

      The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:

      1. The empty initializer list is written as {} which is exactly an empty JSON object.
      2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object.
      3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe.

      With the rules described above, the following JSON values cannot be expressed by an initializer list:

      • the empty array ([]): use array(initializer_list_t) with an empty initializer list in this case
      • arrays whose elements satisfy rule 2: use array(initializer_list_t) with the same initializer list in this case

      Function array() and object() force array and object creation from initializer lists, respectively.

    6. Constructs a JSON array value by creating cnt copies of a passed value. In case cnt is 0, an empty array is created.

    7. Constructs the JSON value with the contents of the range [first, last). The semantics depends on the different types a JSON value can have:

      • In case of a null type, invalid_iterator.206 is thrown.
      • In case of other primitive types (number, boolean, or string), first must be begin() and last must be end(). In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown.
      • In case of structured types (array, object), the constructor behaves as similar versions for std::vector or std::map; that is, a JSON array or object is constructed from the values in the range.
    8. Creates a copy of a given JSON value.

    9. Move constructor. Constructs a JSON value with the contents of the given value other using move semantics. It \"steals\" the resources from other and leaves it as JSON null value.

    "},{"location":"api/basic_json/basic_json/#template-parameters","title":"Template parameters","text":"CompatibleType

    a type such that:

    • CompatibleType is not derived from std::istream,
    • CompatibleType is not basic_json (to avoid hijacking copy/move constructors),
    • CompatibleType is not a different basic_json type (i.e. with different template arguments)
    • CompatibleType is not a basic_json nested type (e.g., json_pointer, iterator, etc.)
    • json_serializer<U> (with U = uncvref_t<CompatibleType>) has a to_json(basic_json_t&, CompatibleType&&) method
    BasicJsonType:

    a type such that:

    • BasicJsonType is a basic_json type.
    • BasicJsonType has different template arguments than basic_json_t.
    U: uncvref_t<CompatibleType>"},{"location":"api/basic_json/basic_json/#parameters","title":"Parameters","text":"v (in) the type of the value to create val (in) the value to be forwarded to the respective constructor init (in) initializer list with JSON values type_deduction (in) internal parameter; when set to true, the type of the JSON value is deducted from the initializer list init; when set to false, the type provided via manual_type is forced. This mode is used by the functions array(initializer_list_t) and object(initializer_list_t). manual_type (in) internal parameter; when type_deduction is set to false, the created JSON value will use the provided type (only value_t::array and value_t::object are valid); when type_deduction is set to true, this parameter has no effect cnt (in) the number of JSON copies of val to create first (in) begin of the range to copy from (included) last (in) end of the range to copy from (excluded) other (in) the JSON value to copy/move"},{"location":"api/basic_json/basic_json/#exception-safety","title":"Exception safety","text":"
    1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    2. No-throw guarantee: this constructor never throws exceptions.
    3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no to_json() function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value.
    5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
    9. No-throw guarantee: this constructor never throws exceptions.
    "},{"location":"api/basic_json/basic_json/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function does not throw exceptions.
    3. (none)
    4. (none)
    5. The function can throw the following exceptions:
      • Throws type_error.301 if type_deduction is false, manual_type is value_t::object, but init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If type_deduction would have been true, an array would have been created. See object(initializer_list_t) for an example.
    6. (none)
    7. The function can throw the following exceptions:
      • Throws invalid_iterator.201 if iterators first and last are not compatible (i.e., do not belong to the same JSON value). In this case, the range [first, last) is undefined.
      • Throws invalid_iterator.204 if iterators first and last belong to a primitive type (number, boolean, or string), but first does not point to the first element anymore. In this case, the range [first, last) is undefined. See example code below.
      • Throws invalid_iterator.206 if iterators first and last belong to a null value. In this case, the range [first, last) is undefined.
    8. (none)
    9. The function does not throw exceptions.
    "},{"location":"api/basic_json/basic_json/#complexity","title":"Complexity","text":"
    1. Constant.
    2. Constant.
    3. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    4. Usually linear in the size of the passed val, also depending on the implementation of the called to_json() method.
    5. Linear in the size of the initializer list init.
    6. Linear in cnt.
    7. Linear in distance between first and last.
    8. Linear in the size of other.
    9. Constant.
    "},{"location":"api/basic_json/basic_json/#notes","title":"Notes","text":"
    • Overload 5:

      Empty initializer list

      When used without parentheses around an empty initializer list, basic_json() is called instead of this function, yielding the JSON null value.

    • Overload 7:

      Preconditions

      • Iterators first and last must be initialized. **This precondition is enforced with a runtime assertion.
      • Range [first, last) is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior.

      Runtime assertion

      A precondition is enforced with a runtime assertion.

    • Overload 8:

      Postcondition

      *this == other

    • Overload 9:

      Postconditions

      • `*this has the same value as other before the call.
      • other is a JSON null value
    "},{"location":"api/basic_json/basic_json/#examples","title":"Examples","text":"Example: (1) create an empty value with a given type

    The following code shows the constructor for different value_t values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create the different JSON values with default values\n    json j_null(json::value_t::null);\n    json j_boolean(json::value_t::boolean);\n    json j_number_integer(json::value_t::number_integer);\n    json j_number_float(json::value_t::number_float);\n    json j_object(json::value_t::object);\n    json j_array(json::value_t::array);\n    json j_string(json::value_t::string);\n\n    // serialize the JSON values\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    Example: (2) create a null object

    The following code shows the constructor with and without a null pointer parameter.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // implicitly create a JSON null value\n    json j1;\n\n    // explicitly create a JSON null value\n    json j2(nullptr);\n\n    // serialize the JSON null value\n    std::cout << j1 << '\\n' << j2 << '\\n';\n}\n

    Output:

    null\nnull\n
    Example: (3) create a JSON value from compatible types

    The following code shows the constructor with several compatible types.

    #include <iostream>\n#include <deque>\n#include <list>\n#include <forward_list>\n#include <set>\n#include <unordered_map>\n#include <unordered_set>\n#include <valarray>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // ============\n    // object types\n    // ============\n\n    // create an object from an object_t value\n    json::object_t object_value = { {\"one\", 1}, {\"two\", 2} };\n    json j_object_t(object_value);\n\n    // create an object from std::map\n    std::map<std::string, int> c_map\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 3}\n    };\n    json j_map(c_map);\n\n    // create an object from std::unordered_map\n    std::unordered_map<const char*, double> c_umap\n    {\n        {\"one\", 1.2}, {\"two\", 2.3}, {\"three\", 3.4}\n    };\n    json j_umap(c_umap);\n\n    // create an object from std::multimap\n    std::multimap<std::string, bool> c_mmap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_mmap(c_mmap); // only one entry for key \"three\" is used\n\n    // create an object from std::unordered_multimap\n    std::unordered_multimap<std::string, bool> c_ummap\n    {\n        {\"one\", true}, {\"two\", true}, {\"three\", false}, {\"three\", true}\n    };\n    json j_ummap(c_ummap); // only one entry for key \"three\" is used\n\n    // serialize the JSON objects\n    std::cout << j_object_t << '\\n';\n    std::cout << j_map << '\\n';\n    std::cout << j_umap << '\\n';\n    std::cout << j_mmap << '\\n';\n    std::cout << j_ummap << \"\\n\\n\";\n\n    // ===========\n    // array types\n    // ===========\n\n    // create an array from an array_t value\n    json::array_t array_value = {\"one\", \"two\", 3, 4.5, false};\n    json j_array_t(array_value);\n\n    // create an array from std::vector\n    std::vector<int> c_vector {1, 2, 3, 4};\n    json j_vec(c_vector);\n\n    // create an array from std::valarray\n    std::valarray<short> c_valarray {10, 9, 8, 7};\n    json j_valarray(c_valarray);\n\n    // create an array from std::deque\n    std::deque<double> c_deque {1.2, 2.3, 3.4, 5.6};\n    json j_deque(c_deque);\n\n    // create an array from std::list\n    std::list<bool> c_list {true, true, false, true};\n    json j_list(c_list);\n\n    // create an array from std::forward_list\n    std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};\n    json j_flist(c_flist);\n\n    // create an array from std::array\n    std::array<unsigned long, 4> c_array {{1, 2, 3, 4}};\n    json j_array(c_array);\n\n    // create an array from std::set\n    std::set<std::string> c_set {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_set(c_set); // only one entry for \"one\" is used\n\n    // create an array from std::unordered_set\n    std::unordered_set<std::string> c_uset {\"one\", \"two\", \"three\", \"four\", \"one\"};\n    json j_uset(c_uset); // only one entry for \"one\" is used\n\n    // create an array from std::multiset\n    std::multiset<std::string> c_mset {\"one\", \"two\", \"one\", \"four\"};\n    json j_mset(c_mset); // both entries for \"one\" are used\n\n    // create an array from std::unordered_multiset\n    std::unordered_multiset<std::string> c_umset {\"one\", \"two\", \"one\", \"four\"};\n    json j_umset(c_umset); // both entries for \"one\" are used\n\n    // serialize the JSON arrays\n    std::cout << j_array_t << '\\n';\n    std::cout << j_vec << '\\n';\n    std::cout << j_valarray << '\\n';\n    std::cout << j_deque << '\\n';\n    std::cout << j_list << '\\n';\n    std::cout << j_flist << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_set << '\\n';\n    std::cout << j_uset << '\\n';\n    std::cout << j_mset << '\\n';\n    std::cout << j_umset << \"\\n\\n\";\n\n    // ============\n    // string types\n    // ============\n\n    // create string from a string_t value\n    json::string_t string_value = \"The quick brown fox jumps over the lazy dog.\";\n    json j_string_t(string_value);\n\n    // create a JSON string directly from a string literal\n    json j_string_literal(\"The quick brown fox jumps over the lazy dog.\");\n\n    // create string from std::string\n    std::string s_stdstring = \"The quick brown fox jumps over the lazy dog.\";\n    json j_stdstring(s_stdstring);\n\n    // serialize the JSON strings\n    std::cout << j_string_t << '\\n';\n    std::cout << j_string_literal << '\\n';\n    std::cout << j_stdstring << \"\\n\\n\";\n\n    // ============\n    // number types\n    // ============\n\n    // create a JSON number from number_integer_t\n    json::number_integer_t value_integer_t = -42;\n    json j_integer_t(value_integer_t);\n\n    // create a JSON number from number_unsigned_t\n    json::number_integer_t value_unsigned_t = 17;\n    json j_unsigned_t(value_unsigned_t);\n\n    // create a JSON number from an anonymous enum\n    enum { enum_value = 17 };\n    json j_enum(enum_value);\n\n    // create values of different integer types\n    short n_short = 42;\n    int n_int = -23;\n    long n_long = 1024;\n    int_least32_t n_int_least32_t = -17;\n    uint8_t n_uint8_t = 8;\n\n    // create (integer) JSON numbers\n    json j_short(n_short);\n    json j_int(n_int);\n    json j_long(n_long);\n    json j_int_least32_t(n_int_least32_t);\n    json j_uint8_t(n_uint8_t);\n\n    // create values of different floating-point types\n    json::number_float_t v_ok = 3.141592653589793;\n    json::number_float_t v_nan = NAN;\n    json::number_float_t v_infinity = INFINITY;\n\n    // create values of different floating-point types\n    float n_float = 42.23;\n    float n_float_nan = 1.0f / 0.0f;\n    double n_double = 23.42;\n\n    // create (floating point) JSON numbers\n    json j_ok(v_ok);\n    json j_nan(v_nan);\n    json j_infinity(v_infinity);\n    json j_float(n_float);\n    json j_float_nan(n_float_nan);\n    json j_double(n_double);\n\n    // serialize the JSON numbers\n    std::cout << j_integer_t << '\\n';\n    std::cout << j_unsigned_t << '\\n';\n    std::cout << j_enum << '\\n';\n    std::cout << j_short << '\\n';\n    std::cout << j_int << '\\n';\n    std::cout << j_long << '\\n';\n    std::cout << j_int_least32_t << '\\n';\n    std::cout << j_uint8_t << '\\n';\n    std::cout << j_ok << '\\n';\n    std::cout << j_nan << '\\n';\n    std::cout << j_infinity << '\\n';\n    std::cout << j_float << '\\n';\n    std::cout << j_float_nan << '\\n';\n    std::cout << j_double << \"\\n\\n\";\n\n    // =============\n    // boolean types\n    // =============\n\n    // create boolean values\n    json j_truth = true;\n    json j_falsity = false;\n\n    // serialize the JSON booleans\n    std::cout << j_truth << '\\n';\n    std::cout << j_falsity << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\n{\"one\":1,\"three\":3,\"two\":2}\n{\"one\":1.2,\"three\":3.4,\"two\":2.3}\n{\"one\":true,\"three\":false,\"two\":true}\n{\"one\":true,\"three\":false,\"two\":true}\n\n[\"one\",\"two\",3,4.5,false]\n[1,2,3,4]\n[10,9,8,7]\n[1.2,2.3,3.4,5.6]\n[true,true,false,true]\n[12345678909876,23456789098765,34567890987654,45678909876543]\n[1,2,3,4]\n[\"four\",\"one\",\"three\",\"two\"]\n[\"four\",\"three\",\"two\",\"one\"]\n[\"four\",\"one\",\"one\",\"two\"]\n[\"four\",\"two\",\"one\",\"one\"]\n\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\"The quick brown fox jumps over the lazy dog.\"\n\n-42\n17\n17\n42\n-23\n1024\n-17\n8\n3.141592653589793\nnull\nnull\n42.22999954223633\nnull\n23.42\n\ntrue\nfalse\n

    Note the output is platform-dependent.

    Example: (5) create a container (array or object) from an initializer list

    The example below shows how JSON values are created from initializer lists.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_empty_init_list = json({});\n    json j_object = { {\"one\", 1}, {\"two\", 2} };\n    json j_array = {1, 2, 3, 4};\n    json j_nested_object = { {\"one\", {1}}, {\"two\", {1, 2}} };\n    json j_nested_array = { {{1}, \"one\"}, {{1, 2}, \"two\"} };\n\n    // serialize the JSON value\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_nested_object << '\\n';\n    std::cout << j_nested_array << '\\n';\n}\n

    Output:

    {}\n{\"one\":1,\"two\":2}\n[1,2,3,4]\n{\"one\":[1],\"two\":[1,2]}\n[[[1],\"one\"],[[1,2],\"two\"]]\n
    Example: (6) construct an array with count copies of given value

    The following code shows examples for creating arrays with several copies of a given value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array by creating copies of a JSON value\n    json value = \"Hello\";\n    json array_0 = json(0, value);\n    json array_1 = json(1, value);\n    json array_5 = json(5, value);\n\n    // serialize the JSON arrays\n    std::cout << array_0 << '\\n';\n    std::cout << array_1 << '\\n';\n    std::cout << array_5 << '\\n';\n}\n

    Output:

    []\n[\"Hello\"]\n[\"Hello\",\"Hello\",\"Hello\",\"Hello\",\"Hello\"]\n
    Example: (7) construct a JSON container given an iterator range

    The example below shows several ways to create JSON values by specifying a subrange with iterators.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_array = {\"alpha\", \"bravo\", \"charly\", \"delta\", \"easy\"};\n    json j_number = 42;\n    json j_object = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n\n    // create copies using iterators\n    json j_array_range(j_array.begin() + 1, j_array.end() - 2);\n    json j_number_range(j_number.begin(), j_number.end());\n    json j_object_range(j_object.begin(), j_object.find(\"two\"));\n\n    // serialize the values\n    std::cout << j_array_range << '\\n';\n    std::cout << j_number_range << '\\n';\n    std::cout << j_object_range << '\\n';\n\n    // example for an exception\n    try\n    {\n        json j_invalid(j_number.begin() + 1, j_number.end());\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [\"bravo\",\"charly\"]\n42\n{\"one\":\"eins\"}\n[json.exception.invalid_iterator.204] iterators out of range\n
    Example: (8) copy constructor

    The following code shows an example for the copy constructor.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j1 = {\"one\", \"two\", 3, 4.5, false};\n\n    // create a copy\n    json j2(j1);\n\n    // serialize the JSON array\n    std::cout << j1 << \" = \" << j2 << '\\n';\n    std::cout << std::boolalpha << (j1 == j2) << '\\n';\n}\n

    Output:

    [\"one\",\"two\",3,4.5,false] = [\"one\",\"two\",3,4.5,false]\ntrue\n
    Example: (9) move constructor

    The code below shows the move constructor explicitly called via std::move.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json a = 23;\n\n    // move contents of a to b\n    json b(std::move(a));\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    null\n23\n
    "},{"location":"api/basic_json/basic_json/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.1.0.
    4. Since version 3.2.0.
    5. Since version 1.0.0.
    6. Since version 1.0.0.
    7. Since version 1.0.0.
    8. Since version 1.0.0.
    9. Since version 1.0.0.
    "},{"location":"api/basic_json/begin/","title":"nlohmann::basic_json::begin","text":"
    iterator begin() noexcept;\nconst_iterator begin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/begin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/begin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/begin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/begin/#examples","title":"Examples","text":"Example

    The following code shows an example for begin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::iterator it = array.begin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/begin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/binary/","title":"nlohmann::basic_json::binary","text":"
    // (1)\nstatic basic_json binary(const typename binary_t::container_type& init);\nstatic basic_json binary(typename binary_t::container_type&& init);\n\n// (2)\nstatic basic_json binary(const typename binary_t::container_type& init,\n                         std::uint8_t subtype);\nstatic basic_json binary(typename binary_t::container_type&& init,\n                         std::uint8_t subtype);\n
    1. Creates a JSON binary array value from a given binary container.
    2. Creates a JSON binary array value from a given binary container with subtype.

    Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats.

    "},{"location":"api/basic_json/binary/#parameters","title":"Parameters","text":"init (in) container containing bytes to use as binary type subtype (in) subtype to use in CBOR, MessagePack, and BSON"},{"location":"api/basic_json/binary/#return-value","title":"Return value","text":"

    JSON binary array value

    "},{"location":"api/basic_json/binary/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/binary/#complexity","title":"Complexity","text":"

    Linear in the size of init; constant for typename binary_t::container_type&& init versions.

    "},{"location":"api/basic_json/binary/#notes","title":"Notes","text":"

    Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a std::vector. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident.

    "},{"location":"api/basic_json/binary/#examples","title":"Examples","text":"Example

    The following code shows how to create a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/binary_t/","title":"nlohmann::basic_json::binary_t","text":"
    using binary_t = byte_container_with_subtype<BinaryType>;\n

    This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values.

    Additionally, as an implementation detail, the subtype of the binary data is carried around as a std::uint64_t, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to BinaryType via the helper type byte_container_with_subtype.

    CBOR's RFC 7049 describes this type as:

    Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers (major type 0).

    MessagePack's documentation on the bin type family describes this type as:

    Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array.

    BSON's specifications describe several binary types; however, this type is intended to represent the generic binary type which has the description:

    Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and tools.

    None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes.

    The default representation of this binary format is a std::vector<std::uint8_t>, which is a very common way to represent a byte array in modern C++.

    "},{"location":"api/basic_json/binary_t/#template-parameters","title":"Template parameters","text":"BinaryType container type to store arrays"},{"location":"api/basic_json/binary_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/binary_t/#default-type","title":"Default type","text":"

    The default values for BinaryType is std::vector<std::uint8_t>.

    "},{"location":"api/basic_json/binary_t/#storage","title":"Storage","text":"

    Binary Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of the type binary_t* must be dereferenced.

    "},{"location":"api/basic_json/binary_t/#notes-on-subtypes","title":"Notes on subtypes","text":"
    • CBOR

      • Binary values are represented as byte strings. Subtypes are written as tags.
    • MessagePack

      • If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer.
      • If no subtype is given, the bin family (bin8, bin16, bin32) is used.
    • BSON

      • If a subtype is given, it is used and added as unsigned 8-bit integer.
      • If no subtype is given, the generic binary subtype 0x00 is used.
    "},{"location":"api/basic_json/binary_t/#examples","title":"Examples","text":"Example

    The following code shows that binary_t is by default, a typedef to nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/binary_t/#see-also","title":"See also","text":"
    • byte_container_with_subtype
    "},{"location":"api/basic_json/binary_t/#version-history","title":"Version history","text":"
    • Added in version 3.8.0. Changed type of subtype to std::uint64_t in version 3.10.0.
    "},{"location":"api/basic_json/boolean_t/","title":"nlohmann::basic_json::boolean_t","text":"
    using boolean_t = BooleanType;\n

    The type used to store JSON booleans.

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    To store objects in C++, a type is defined by the template parameter BooleanType which chooses the type to use.

    "},{"location":"api/basic_json/boolean_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/boolean_t/#default-type","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"api/basic_json/boolean_t/#storage","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/boolean_t/#examples","title":"Examples","text":"Example

    The following code shows that boolean_t is by default, a typedef to bool.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/boolean_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbegin/","title":"nlohmann::basic_json::cbegin","text":"
    const_iterator cbegin() const noexcept;\n

    Returns an iterator to the first element.

    "},{"location":"api/basic_json/cbegin/#return-value","title":"Return value","text":"

    iterator to the first element

    "},{"location":"api/basic_json/cbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for cbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    const json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the first element\n    json::const_iterator it = array.cbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/cbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/cbor_tag_handler_t/","title":"nlohmann::basic_json::cbor_tag_handler_t","text":"
    enum class cbor_tag_handler_t\n{\n    error,\n    ignore,\n    store\n};\n

    This enumeration is used in the from_cbor function to choose how to treat tags:

    error throw a parse_error exception in case of a tag ignore ignore tags store store tagged values as binary container with subtype (for bytes 0xd8..0xdb)"},{"location":"api/basic_json/cbor_tag_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the cbor_tag_handler_t influence the behavior of from_cbor when reading a tagged byte string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // tagged byte string\n    std::vector<std::uint8_t> vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // cbor_tag_handler_t::error throws\n    try\n    {\n        auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // cbor_tag_handler_t::ignore ignores the tag\n    auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);\n    std::cout << b_ignore_tag << std::endl;\n\n    // cbor_tag_handler_t::store stores the tag as binary subtype\n    auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store);\n    std::cout << b_store_tag << std::endl;\n}\n

    Output:

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":66}\n
    "},{"location":"api/basic_json/cbor_tag_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.9.0. Added value store in 3.10.0.
    "},{"location":"api/basic_json/cend/","title":"nlohmann::basic_json::cend","text":"
    const_iterator cend() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/cend/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/cend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/cend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/cend/#examples","title":"Examples","text":"Example

    The following code shows an example for cend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::const_iterator it = array.cend();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/cend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/clear/","title":"nlohmann::basic_json::clear","text":"
    void clear() noexcept;\n

    Clears the content of a JSON value and resets it to the default value as if basic_json(value_t) would have been called with the current value type from type():

    Value type initial value null null boolean false string \"\" number 0 binary An empty byte vector object {} array []

    Has the same effect as calling

    *this = basic_json(type());\n
    "},{"location":"api/basic_json/clear/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/clear/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/clear/#notes","title":"Notes","text":"

    All iterators, pointers and references related to this container are invalidated.

    "},{"location":"api/basic_json/clear/#examples","title":"Examples","text":"Example

    The example below shows the effect of clear() to different JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call clear()\n    j_null.clear();\n    j_boolean.clear();\n    j_number_integer.clear();\n    j_number_float.clear();\n    j_object.clear();\n    j_array.clear();\n    j_string.clear();\n\n    // serialize the cleared values()\n    std::cout << j_null << '\\n';\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nfalse\n0\n0.0\n{}\n[]\n\"\"\n
    "},{"location":"api/basic_json/clear/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added support for binary types in version 3.8.0.
    "},{"location":"api/basic_json/contains/","title":"nlohmann::basic_json::contains","text":"
    // (1)\nbool contains(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nbool contains(KeyType&& key) const;\n\n// (3)\nbool contains(const json_pointer& ptr) const;\n
    1. Check whether an element exists in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, false is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    3. Check whether the given JSON pointer ptr can be resolved in the current JSON value.
    "},{"location":"api/basic_json/contains/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/contains/#parameters","title":"Parameters","text":"key (in) key value to check its existence. ptr (in) JSON pointer to check its existence."},{"location":"api/basic_json/contains/#return-value","title":"Return value","text":"
    1. true if an element with specified key exists. If no such element with such key is found or the JSON value is not an object, false is returned.
    2. See 1.
    3. true if the JSON pointer can be resolved to a stored value, false otherwise.
    "},{"location":"api/basic_json/contains/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/contains/#exceptions","title":"Exceptions","text":"
    1. The function does not throw exceptions.
    2. The function does not throw exceptions.
    3. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index begins with 0.
      • Throws parse_error.109 if an array index was not a number.
    "},{"location":"api/basic_json/contains/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/contains/#notes","title":"Notes","text":"
    • This method always returns false when executed on a JSON type that is not an object.
    • This method can be executed on any JSON value type.

    Postconditions

    If j.contains(x) returns true for a key or JSON pointer x, then it is safe to call j[x].

    "},{"location":"api/basic_json/contains/#examples","title":"Examples","text":"Example: (1) check with key

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\") << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\") << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\") << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (2) check with key using string_view

    The example shows how contains() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create some JSON values\n    json j_object = R\"( {\"key\": \"value\"} )\"_json;\n    json j_array = R\"( [1, 2, 3] )\"_json;\n\n    // call contains\n    std::cout << std::boolalpha <<\n              \"j_object contains 'key': \" << j_object.contains(\"key\"sv) << '\\n' <<\n              \"j_object contains 'another': \" << j_object.contains(\"another\"sv) << '\\n' <<\n              \"j_array contains 'key': \" << j_array.contains(\"key\"sv) << std::endl;\n}\n

    Output:

    j_object contains 'key': true\nj_object contains 'another': false\nj_array contains 'key': false\n
    Example: (3) check with JSON pointer

    The example shows how contains() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    std::cout << std::boolalpha\n              << j.contains(\"/number\"_json_pointer) << '\\n'\n              << j.contains(\"/string\"_json_pointer) << '\\n'\n              << j.contains(\"/array\"_json_pointer) << '\\n'\n              << j.contains(\"/array/1\"_json_pointer) << '\\n'\n              << j.contains(\"/array/-\"_json_pointer) << '\\n'\n              << j.contains(\"/array/4\"_json_pointer) << '\\n'\n              << j.contains(\"/baz\"_json_pointer) << std::endl;\n\n    try\n    {\n        // try to use an array index with leading '0'\n        j.contains(\"/array/01\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    try\n    {\n        // try to use an array index that is not a number\n        j.contains(\"/array/one\"_json_pointer);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    true\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/contains/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.6.0. Extended template KeyType to support comparable types in version 3.11.0.
    3. Added in version 3.7.0.
    "},{"location":"api/basic_json/count/","title":"nlohmann::basic_json::count","text":"
    // (1)\nsize_type count(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\nsize_type count(KeyType&& key) const;\n
    1. Returns the number of elements with key key. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/count/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/count/#parameters","title":"Parameters","text":"key (in) key value of the element to count."},{"location":"api/basic_json/count/#return-value","title":"Return value","text":"

    Number of elements with key key. If the JSON value is not an object, the return value will be 0.

    "},{"location":"api/basic_json/count/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/count/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/count/#notes","title":"Notes","text":"

    This method always returns 0 when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/count/#examples","title":"Examples","text":"Example: (1) count number of elements

    The example shows how count() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\");\n    auto count_three = j_object.count(\"three\");\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    Example: (2) count number of elements using string_view

    The example shows how count() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call count()\n    auto count_two = j_object.count(\"two\"sv);\n    auto count_three = j_object.count(\"three\"sv);\n\n    // print values\n    std::cout << \"number of elements with key \\\"two\\\": \" << count_two << '\\n';\n    std::cout << \"number of elements with key \\\"three\\\": \" << count_three << '\\n';\n}\n

    Output:

    number of elements with key \"two\": 1\nnumber of elements with key \"three\": 0\n
    "},{"location":"api/basic_json/count/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed parameter key type to KeyType&& in version 3.11.0.
    "},{"location":"api/basic_json/crbegin/","title":"nlohmann::basic_json::crbegin","text":"
    const_reverse_iterator crbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/crbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/crbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for crbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::const_reverse_iterator it = array.crbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/crbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/crend/","title":"nlohmann::basic_json::crend","text":"
    const_reverse_iterator crend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/crend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/crend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/crend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/crend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::const_reverse_iterator it = array.crend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/crend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/default_object_comparator_t/","title":"nlohmann::basic_json::default_object_comparator_t","text":"
    using default_object_comparator_t = std::less<StringType>;  // until C++14\n\nusing default_object_comparator_t = std::less<>;            // since C++14\n

    The default comparator used by object_t.

    Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object.

    The actual comparator used depends on object_t and can be obtained via object_comparator_t.

    "},{"location":"api/basic_json/default_object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the default comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"one < two : \" << json::default_object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"three < four : \" << json::default_object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    one < two : true\nthree < four : false\n
    "},{"location":"api/basic_json/default_object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/diff/","title":"nlohmann::basic_json::diff","text":"
    static basic_json diff(const basic_json& source,\n                       const basic_json& target);\n

    Creates a JSON Patch so that value source can be changed into the value target by calling patch function.

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n

    "},{"location":"api/basic_json/diff/#parameters","title":"Parameters","text":"source (in) JSON value to compare from target (in) JSON value to compare against"},{"location":"api/basic_json/diff/#return-value","title":"Return value","text":"

    a JSON patch to convert the source to target

    "},{"location":"api/basic_json/diff/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/diff/#complexity","title":"Complexity","text":"

    Linear in the lengths of source and target.

    "},{"location":"api/basic_json/diff/#notes","title":"Notes","text":"

    Currently, only remove, add, and replace operations are generated.

    "},{"location":"api/basic_json/diff/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/diff/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    "},{"location":"api/basic_json/diff/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/dump/","title":"nlohmann::basic_json::dump","text":"
    string_t dump(const int indent = -1,\n              const char indent_char = ' ',\n              const bool ensure_ascii = false,\n              const error_handler_t error_handler = error_handler_t::strict) const;\n

    Serialization function for JSON values. The function tries to mimic Python's json.dumps() function, and currently supports its indent and ensure_ascii parameters.

    "},{"location":"api/basic_json/dump/#parameters","title":"Parameters","text":"indent (in) If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. -1 (the default) selects the most compact representation. indent_char (in) The character to use for indentation if indent is greater than 0. The default is (space). ensure_ascii (in) If ensure_ascii is true, all non-ASCII characters in the output are escaped with \\uXXXX sequences, and the result consists of ASCII characters only. error_handler (in) how to react on decoding errors; there are three possible values (see error_handler_t: strict (throws and exception in case a decoding error occurs; default), replace (replace invalid UTF-8 sequences with U+FFFD), and ignore (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged))."},{"location":"api/basic_json/dump/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/dump/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/dump/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and error_handler is set to strict

    "},{"location":"api/basic_json/dump/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/dump/#notes","title":"Notes","text":"

    Binary values are serialized as object containing two keys:

    • \"bytes\": an array of bytes as integers
    • \"subtype\": the subtype as integer or null if the binary has no subtype
    "},{"location":"api/basic_json/dump/#examples","title":"Examples","text":"Example

    The following example shows the effect of different indent, indent_char, and ensure_ascii parameters to the result of the serialization.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hell\u00f6 \ud83d\ude00!\";\n\n    // call dump()\n    std::cout << \"objects:\" << '\\n'\n              << j_object.dump() << \"\\n\\n\"\n              << j_object.dump(-1) << \"\\n\\n\"\n              << j_object.dump(0) << \"\\n\\n\"\n              << j_object.dump(4) << \"\\n\\n\"\n              << j_object.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"arrays:\" << '\\n'\n              << j_array.dump() << \"\\n\\n\"\n              << j_array.dump(-1) << \"\\n\\n\"\n              << j_array.dump(0) << \"\\n\\n\"\n              << j_array.dump(4) << \"\\n\\n\"\n              << j_array.dump(1, '\\t') << \"\\n\\n\";\n\n    std::cout << \"strings:\" << '\\n'\n              << j_string.dump() << '\\n'\n              << j_string.dump(-1, ' ', true) << '\\n';\n\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    objects:\n{\"one\":1,\"two\":2}\n\n{\"one\":1,\"two\":2}\n\n{\n\"one\": 1,\n\"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\n{\n    \"one\": 1,\n    \"two\": 2\n}\n\narrays:\n[1,2,4,8,16]\n\n[1,2,4,8,16]\n\n[\n1,\n2,\n4,\n8,\n16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\n[\n    1,\n    2,\n    4,\n    8,\n    16\n]\n\nstrings:\n\"Hell\u00f6 \ud83d\ude00!\"\n\"Hell\\u00f6 \\ud83d\\ude00!\"\n[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/dump/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Indentation character indent_char, option ensure_ascii and exceptions added in version 3.0.0.
    • Error handlers added in version 3.4.0.
    • Serialization of binary values added in version 3.8.0.
    "},{"location":"api/basic_json/emplace/","title":"nlohmann::basic_json::emplace","text":"
    template<class... Args>\nstd::pair<iterator, bool> emplace(Args&& ... args);\n

    Inserts a new element into a JSON object constructed in-place with the given args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/emplace/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace/#return-value","title":"Return value","text":"

    a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.

    "},{"location":"api/basic_json/emplace/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON object or null; example: \"cannot use emplace() with number\"

    "},{"location":"api/basic_json/emplace/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the container, O(log(size())).

    "},{"location":"api/basic_json/emplace/#examples","title":"Examples","text":"Example

    The example shows how emplace() can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    auto res1 = object.emplace(\"three\", 3);\n    null.emplace(\"A\", \"a\");\n    null.emplace(\"B\", \"b\");\n\n    // the following call will not add an object, because there is already\n    // a value stored at key \"B\"\n    auto res2 = null.emplace(\"B\", \"c\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << *res1.first << \" \" << std::boolalpha << res1.second << '\\n';\n\n    std::cout << null << '\\n';\n    std::cout << *res2.first << \" \" << std::boolalpha << res2.second << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"one\":1,\"three\":3,\"two\":2}\n3 true\n{\"A\":\"a\",\"B\":\"b\"}\n\"b\" false\n
    "},{"location":"api/basic_json/emplace/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    "},{"location":"api/basic_json/emplace_back/","title":"nlohmann::basic_json::emplace_back","text":"
    template<class... Args>\nreference emplace_back(Args&& ... args);\n

    Creates a JSON value from the passed parameters args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from args.

    "},{"location":"api/basic_json/emplace_back/#template-parameters","title":"Template parameters","text":"Args compatible types to create a basic_json object"},{"location":"api/basic_json/emplace_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    "},{"location":"api/basic_json/emplace_back/#parameters","title":"Parameters","text":"args (in) arguments to forward to a constructor of basic_json"},{"location":"api/basic_json/emplace_back/#return-value","title":"Return value","text":"

    reference to the inserted element

    "},{"location":"api/basic_json/emplace_back/#exceptions","title":"Exceptions","text":"

    Throws type_error.311 when called on a type other than JSON array or null; example: \"cannot use emplace_back() with number\"

    "},{"location":"api/basic_json/emplace_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/basic_json/emplace_back/#examples","title":"Examples","text":"Example

    The example shows how emplace_back() can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.emplace_back(6);\n    null.emplace_back(\"first\");\n    null.emplace_back(3, \"second\");\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6]\n[\"first\",[\"second\",\"second\",\"second\"]]\n
    "},{"location":"api/basic_json/emplace_back/#see-also","title":"See also","text":"
    • operator+= add a value to an array/object
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/emplace_back/#version-history","title":"Version history","text":"
    • Since version 2.0.8.
    • Returns reference since 3.7.0.
    "},{"location":"api/basic_json/empty/","title":"nlohmann::basic_json::empty","text":"
    bool empty() const noexcept;\n

    Checks if a JSON value has no elements (i.e. whether its size() is 0).

    "},{"location":"api/basic_json/empty/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null true boolean false string false number false binary false object result of function object_t::empty() array result of function array_t::empty()"},{"location":"api/basic_json/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/empty/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their empty() functions have constant complexity.

    "},{"location":"api/basic_json/empty/#possible-implementation","title":"Possible implementation","text":"
    bool empty() const noexcept\n{\n    return size() == 0;\n}\n
    "},{"location":"api/basic_json/empty/#notes","title":"Notes","text":"

    This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is false in the case of a string.

    "},{"location":"api/basic_json/empty/#examples","title":"Examples","text":"Example

    The following code uses empty() to check if a JSON object contains any elements.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call empty()\n    std::cout << std::boolalpha;\n    std::cout << j_null.empty() << '\\n';\n    std::cout << j_boolean.empty() << '\\n';\n    std::cout << j_number_integer.empty() << '\\n';\n    std::cout << j_number_float.empty() << '\\n';\n    std::cout << j_object.empty() << '\\n';\n    std::cout << j_object_empty.empty() << '\\n';\n    std::cout << j_array.empty() << '\\n';\n    std::cout << j_array_empty.empty() << '\\n';\n    std::cout << j_string.empty() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/empty/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return false for binary types in version 3.8.0.
    "},{"location":"api/basic_json/end/","title":"nlohmann::basic_json::end","text":"
    iterator end() noexcept;\nconst_iterator end() const noexcept;\n

    Returns an iterator to one past the last element.

    "},{"location":"api/basic_json/end/#return-value","title":"Return value","text":"

    iterator one past the last element

    "},{"location":"api/basic_json/end/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end/#examples","title":"Examples","text":"Example

    The following code shows an example for end().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to one past the last element\n    json::iterator it = array.end();\n\n    // decrement the iterator to point to the last element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/end/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/end_pos/","title":"nlohmann::basic_json::end_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t end_pos() const noexcept;\n#endif\n

    Returns the position immediately following the last character of the JSON string from which the value was parsed from.

    JSON type return value object position after the closing } array position after the closing ] string position after the closing \" number position after the last character boolean position after e null position after l"},{"location":"api/basic_json/end_pos/#return-value","title":"Return value","text":"

    the position of the character following the last character of the given value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/end_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/end_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/end_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/end_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/end_pos/#see-also","title":"See also","text":"
    • start_pos to access the start position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/end_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/erase/","title":"nlohmann::basic_json::erase","text":"
    // (1)\niterator erase(iterator pos);\nconst_iterator erase(const_iterator pos);\n\n// (2)\niterator erase(iterator first, iterator last);\nconst_iterator erase(const_iterator first, const_iterator last);\n\n// (3)\nsize_type erase(const typename object_t::key_type& key);\n\n// (4)\ntemplate<typename KeyType>\nsize_type erase(KeyType&& key);\n\n// (5)\nvoid erase(const size_type idx);\n
    1. Removes an element from a JSON value specified by iterator pos. The iterator pos must be valid and dereferenceable. Thus, the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

      If called on a primitive type other than null, the resulting JSON value will be null.

    2. Remove an element range specified by [first; last) from a JSON value. The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op.

      If called on a primitive type other than null, the resulting JSON value will be null.

    3. Removes an element from a JSON object by key.

    4. See 3. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    5. Removes an element from a JSON array by index.

    "},{"location":"api/basic_json/erase/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/erase/#parameters","title":"Parameters","text":"pos (in) iterator to the element to remove first (in) iterator to the beginning of the range to remove last (in) iterator past the end of the range to remove key (in) object key of the elements to remove idx (in) array index of the element to remove"},{"location":"api/basic_json/erase/#return-value","title":"Return value","text":"
    1. Iterator following the last removed element. If the iterator pos refers to the last element, the end() iterator is returned.
    2. Iterator following the last removed element. If the iterator last refers to the last element, the end() iterator is returned.
    3. Number of elements removed. If ObjectType is the default std::map type, the return value will always be 0 (key was not found) or 1 (key was found).
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/erase/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not begin()); example: \"iterator out of range\"
    2. The function can throw the following exceptions:
      • Throws type_error.307 if called on a null value; example: \"cannot use erase() with null\"
      • Throws invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: \"iterators do not fit current value\"
      • Throws invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if first != begin() and last != end()); example: \"iterators out of range\"
    3. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
    4. See 3.
    5. The function can throw the following exceptions:
      • Throws type_error.307 when called on a type other than JSON object; example: \"cannot use erase() with null\"
      • Throws out_of_range.401 when idx >= size(); example: \"array index 17 is out of range\"
    "},{"location":"api/basic_json/erase/#complexity","title":"Complexity","text":"
    1. The complexity depends on the type:
      • objects: amortized constant
      • arrays: linear in distance between pos and the end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    2. The complexity depends on the type:
      • objects: log(size()) + std::distance(first, last)
      • arrays: linear in the distance between first and last, plus linear in the distance between last and end of the container
      • strings and binary: linear in the length of the member
      • other types: constant
    3. log(size()) + count(key)
    4. log(size()) + count(key)
    5. Linear in distance between idx and the end of the container.
    "},{"location":"api/basic_json/erase/#notes","title":"Notes","text":"
    1. Invalidates iterators and references at or after the point of the erase, including the end() iterator.
    2. (none)
    3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
    4. See 3.
    5. (none)
    "},{"location":"api/basic_json/erase/#examples","title":"Examples","text":"Example: (1) remove element given an iterator

    The example shows the effect of erase() for different JSON types using an iterator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin());\n    j_number_integer.erase(j_number_integer.begin());\n    j_number_float.erase(j_number_float.begin());\n    j_object.erase(j_object.find(\"two\"));\n    j_array.erase(j_array.begin() + 2);\n    j_string.erase(j_string.begin());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,2,8,16]\nnull\n
    Example: (2) remove elements given an iterator range

    The example shows the effect of erase() for different JSON types using an iterator range.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call erase()\n    j_boolean.erase(j_boolean.begin(), j_boolean.end());\n    j_number_integer.erase(j_number_integer.begin(), j_number_integer.end());\n    j_number_float.erase(j_number_float.begin(), j_number_float.end());\n    j_object.erase(j_object.find(\"two\"), j_object.end());\n    j_array.erase(j_array.begin() + 1, j_array.begin() + 3);\n    j_string.erase(j_string.begin(), j_string.end());\n\n    // print values\n    std::cout << j_boolean << '\\n';\n    std::cout << j_number_integer << '\\n';\n    std::cout << j_number_float << '\\n';\n    std::cout << j_object << '\\n';\n    std::cout << j_array << '\\n';\n    std::cout << j_string << '\\n';\n}\n

    Output:

    null\nnull\nnull\n{\"one\":1}\n[1,8,16]\nnull\n
    Example: (3) remove element from a JSON object given a key

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\");\n    auto count_three = j_object.erase(\"three\");\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (4) remove element from a JSON object given a key using string_view

    The example shows the effect of erase() for different JSON types using an object key.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call erase()\n    auto count_one = j_object.erase(\"one\"sv);\n    auto count_three = j_object.erase(\"three\"sv);\n\n    // print values\n    std::cout << j_object << '\\n';\n    std::cout << count_one << \" \" << count_three << '\\n';\n}\n

    Output:

    {\"two\":2}\n1 0\n
    Example: (5) remove element from a JSON array given an index

    The example shows the effect of erase() using an array index.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json j_array = {0, 1, 2, 3, 4, 5};\n\n    // call erase()\n    j_array.erase(2);\n\n    // print values\n    std::cout << j_array << '\\n';\n}\n

    Output:

    [0,1,3,4,5]\n
    "},{"location":"api/basic_json/erase/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    2. Added in version 1.0.0. Added support for binary types in version 3.8.0.
    3. Added in version 1.0.0.
    4. Added in version 3.11.0.
    5. Added in version 1.0.0.
    "},{"location":"api/basic_json/error_handler_t/","title":"nlohmann::basic_json::error_handler_t","text":"
    enum class error_handler_t {\n    strict,\n    replace,\n    ignore\n};\n

    This enumeration is used in the dump function to choose how to treat decoding errors while serializing a basic_json value. Three values are differentiated:

    strict throw a type_error exception in case of invalid UTF-8 replace replace invalid UTF-8 sequences with U+FFFD (\ufffd REPLACEMENT CHARACTER) ignore ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged"},{"location":"api/basic_json/error_handler_t/#examples","title":"Examples","text":"Example

    The example below shows how the different values of the error_handler_t influence the behavior of dump when reading serializing an invalid UTF-8 sequence.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value with invalid UTF-8 byte sequence\n    json j_invalid = \"\u00e4\\xA9\u00fc\";\n    try\n    {\n        std::cout << j_invalid.dump() << std::endl;\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    std::cout << \"string with replaced invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace)\n              << \"\\nstring with ignored invalid characters: \"\n              << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore)\n              << '\\n';\n}\n

    Output:

    [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9\nstring with replaced invalid characters: \"\u00e4\ufffd\u00fc\"\nstring with ignored invalid characters: \"\u00e4\u00fc\"\n
    "},{"location":"api/basic_json/error_handler_t/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/exception/","title":"nlohmann::basic_json::exception","text":"
    class exception : public std::exception;\n

    This class is an extension of std::exception objects with a member id for exception ids. It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions, see example below.

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_exception fill:#CCCCFF

    Subclasses:

    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/exception/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/exception/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/exception/#notes","title":"Notes","text":"

    To have nothrow-copy-constructible exceptions, we internally use std::runtime_error which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor.

    "},{"location":"api/basic_json/exception/#examples","title":"Examples","text":"Example

    The following code shows how arbitrary library exceptions can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for a non-existing key\n        json j = {{\"foo\", \"bar\"}};\n        json k = j.at(\"non-existing\");\n    }\n    catch (const json::exception& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.403] key 'non-existing' not found\nexception id: 403\n
    "},{"location":"api/basic_json/exception/#see-also","title":"See also","text":"

    List of exceptions

    "},{"location":"api/basic_json/exception/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/find/","title":"nlohmann::basic_json::find","text":"
    // (1)\niterator find(const typename object_t::key_type& key);\nconst_iterator find(const typename object_t::key_type& key) const;\n\n// (2)\ntemplate<typename KeyType>\niterator find(KeyType&& key);\ntemplate<typename KeyType>\nconst_iterator find(KeyType&& key) const;\n
    1. Finds an element in a JSON object with a key equivalent to key. If the element is not found or the JSON value is not an object, end() is returned.
    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    "},{"location":"api/basic_json/find/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/find/#parameters","title":"Parameters","text":"key (in) key value of the element to search for."},{"location":"api/basic_json/find/#return-value","title":"Return value","text":"

    Iterator to an element with a key equivalent to key. If no such element is found or the JSON value is not an object, a past-the-end iterator (see end()) is returned.

    "},{"location":"api/basic_json/find/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/find/#complexity","title":"Complexity","text":"

    Logarithmic in the size of the JSON object.

    "},{"location":"api/basic_json/find/#notes","title":"Notes","text":"

    This method always returns end() when executed on a JSON type that is not an object.

    "},{"location":"api/basic_json/find/#examples","title":"Examples","text":"Example: (1) find object element by key

    The example shows how find() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\");\n    auto it_three = j_object.find(\"three\");\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    Example: (2) find object element by key using string_view

    The example shows how find() is used.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n\n    // call find\n    auto it_two = j_object.find(\"two\"sv);\n    auto it_three = j_object.find(\"three\"sv);\n\n    // print values\n    std::cout << std::boolalpha;\n    std::cout << \"\\\"two\\\" was found: \" << (it_two != j_object.end()) << '\\n';\n    std::cout << \"value at key \\\"two\\\": \" << *it_two << '\\n';\n    std::cout << \"\\\"three\\\" was found: \" << (it_three != j_object.end()) << '\\n';\n}\n

    Output:

    \"two\" was found: true\nvalue at key \"two\": 2\n\"three\" was found: false\n
    "},{"location":"api/basic_json/find/#see-also","title":"See also","text":"
    • contains checks whether a key exists
    "},{"location":"api/basic_json/find/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
    "},{"location":"api/basic_json/flatten/","title":"nlohmann::basic_json::flatten","text":"
    basic_json flatten() const;\n

    The function creates a JSON object whose keys are JSON pointers (see RFC 6901) and whose values are all primitive (see is_primitive() for more information). The original JSON value can be restored using the unflatten() function.

    "},{"location":"api/basic_json/flatten/#return-value","title":"Return value","text":"

    an object that maps JSON pointers to primitive values

    "},{"location":"api/basic_json/flatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/flatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/flatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened to null and will not be reconstructed correctly by the unflatten() function.

    "},{"location":"api/basic_json/flatten/#examples","title":"Examples","text":"Example

    The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j =\n    {\n        {\"pi\", 3.141},\n        {\"happy\", true},\n        {\"name\", \"Niels\"},\n        {\"nothing\", nullptr},\n        {\n            \"answer\", {\n                {\"everything\", 42}\n            }\n        },\n        {\"list\", {1, 0, 2}},\n        {\n            \"object\", {\n                {\"currency\", \"USD\"},\n                {\"value\", 42.99}\n            }\n        }\n    };\n\n    // call flatten()\n    std::cout << std::setw(4) << j.flatten() << '\\n';\n}\n

    Output:

    {\n    \"/answer/everything\": 42,\n    \"/happy\": true,\n    \"/list/0\": 1,\n    \"/list/1\": 0,\n    \"/list/2\": 2,\n    \"/name\": \"Niels\",\n    \"/nothing\": null,\n    \"/object/currency\": \"USD\",\n    \"/object/value\": 42.99,\n    \"/pi\": 3.141\n}\n
    "},{"location":"api/basic_json/flatten/#see-also","title":"See also","text":"
    • unflatten the reverse function
    "},{"location":"api/basic_json/flatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/from_bjdata/","title":"nlohmann::basic_json::from_bjdata","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bjdata(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bjdata(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bjdata/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bjdata/#parameters","title":"Parameters","text":"i (in) an input in BJData format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bjdata/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bjdata/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bjdata/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BJData format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/from_bson/","title":"nlohmann::basic_json::from_bson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_bson(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_bson(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_bson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_bson/#parameters","title":"Parameters","text":"i (in) an input in BSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_bson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_bson/#exceptions","title":"Exceptions","text":"

    Throws parse_error.114 if an unsupported BSON record type is encountered.

    "},{"location":"api/basic_json/from_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_bson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in BSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_bson/#see-also","title":"See also","text":"
    • BSON specification
    • to_bson for the analogous serialization
    • from_cbor for the related CBOR format
    • from_msgpack for the related MessagePack format
    • from_ubjson for the related UBJSON format
    "},{"location":"api/basic_json/from_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.

    Deprecation

    • Overload (2) replaces calls to from_bson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson(ptr, len, ...); with from_bson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_bson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_bson({ptr, ptr+len}, ...); with from_bson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_cbor/","title":"nlohmann::basic_json::from_cbor","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_cbor(InputType&& i,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_cbor(IteratorType first, IteratorType last,\n                            const bool strict = true,\n                            const bool allow_exceptions = true,\n                            const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error);\n

    Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_cbor/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_cbor/#parameters","title":"Parameters","text":"i (in) an input in CBOR format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) tag_handler (in) how to treat CBOR tags (optional, error by default); see cbor_tag_handler_t for more information"},{"location":"api/basic_json/from_cbor/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_cbor/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from CBOR were used in the given input or if the input is not valid CBOR
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_cbor/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in CBOR format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.
    • Added tag_handler parameter in version 3.9.0.

    Deprecation

    • Overload (2) replaces calls to from_cbor with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor(ptr, len, ...); with from_cbor(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_cbor({ptr, ptr+len}, ...); with from_cbor(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_msgpack/","title":"nlohmann::basic_json::from_msgpack","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_msgpack(InputType&& i,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_msgpack(IteratorType first, IteratorType last,\n                               const bool strict = true,\n                               const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the MessagePack serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_msgpack/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_msgpack/#parameters","title":"Parameters","text":"i (in) an input in MessagePack format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_msgpack/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_msgpack/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack
    • Throws parse_error.113 if a string was expected as map key, but not found
    "},{"location":"api/basic_json/from_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_msgpack/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in MessagePack format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Parameter start_index since version 2.1.1.
    • Changed to consume input adapters, removed start_index parameter, and added strict parameter in version 3.0.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_msgpack with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack(ptr, len, ...); with from_msgpack(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_cbor with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_msgpack({ptr, ptr+len}, ...); with from_msgpack(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/from_ubjson/","title":"nlohmann::basic_json::from_ubjson","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json from_ubjson(InputType&& i,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json from_ubjson(IteratorType first, IteratorType last,\n                              const bool strict = true,\n                              const bool allow_exceptions = true);\n

    Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format.

    1. Reads from a compatible input.
    2. Reads from an iterator range.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/from_ubjson/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType a compatible iterator type"},{"location":"api/basic_json/from_ubjson/#parameters","title":"Parameters","text":"i (in) an input in UBJSON format convertible to an input adapter first (in) iterator to start of the input last (in) iterator to end of the input strict (in) whether to expect the input to be consumed until EOF (true by default) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default)"},{"location":"api/basic_json/from_ubjson/#return-value","title":"Return value","text":"

    deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/from_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/from_ubjson/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.110 if the given input ends prematurely or the end of file was not reached when strict was set to true
    • Throws parse_error.112 if a parse error occurs
    • Throws parse_error.113 if a string could not be parsed successfully
    "},{"location":"api/basic_json/from_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the input.

    "},{"location":"api/basic_json/from_ubjson/#examples","title":"Examples","text":"Example

    The example shows the deserialization of a byte vector in UBJSON format to a JSON value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"api/basic_json/from_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    • Added allow_exceptions parameter in version 3.2.0.

    Deprecation

    • Overload (2) replaces calls to from_ubjson with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson(ptr, len, ...); with from_ubjson(ptr, ptr+len, ...);.
    • Overload (2) replaces calls to from_ubjson with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like from_ubjson({ptr, ptr+len}, ...); with from_ubjson(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/front/","title":"nlohmann::basic_json::front","text":"
    reference front();\nconst_reference front() const;\n

    Returns a reference to the first element in the container. For a JSON container c, the expression c.front() is equivalent to *c.begin().

    "},{"location":"api/basic_json/front/#return-value","title":"Return value","text":"

    In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned.

    "},{"location":"api/basic_json/front/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/front/#exceptions","title":"Exceptions","text":"

    If the JSON value is null, exception invalid_iterator.214 is thrown.

    "},{"location":"api/basic_json/front/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/front/#notes","title":"Notes","text":"

    Precondition

    The array or object must not be empty. Calling front on an empty array or object yields undefined behavior.

    "},{"location":"api/basic_json/front/#examples","title":"Examples","text":"Example

    The following code shows an example for front().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call front()\n    //std::cout << j_null.front() << '\\n';          // would throw\n    std::cout << j_boolean.front() << '\\n';\n    std::cout << j_number_integer.front() << '\\n';\n    std::cout << j_number_float.front() << '\\n';\n    std::cout << j_object.front() << '\\n';\n    //std::cout << j_object_empty.front() << '\\n';  // undefined behavior\n    std::cout << j_array.front() << '\\n';\n    //std::cout << j_array_empty.front() << '\\n';   // undefined behavior\n    std::cout << j_string.front() << '\\n';\n}\n

    Output:

    true\n17\n23.42\n1\n1\n\"Hello, world\"\n
    "},{"location":"api/basic_json/front/#see-also","title":"See also","text":"
    • back to access the last element
    "},{"location":"api/basic_json/front/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Adjusted code to return reference to binary values in version 3.8.0.
    "},{"location":"api/basic_json/get/","title":"nlohmann::basic_json::get","text":"
    // (1)\ntemplate<typename ValueType>\nValueType get() const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), std::declval<ValueType&>())));\n\n// (2)\ntemplate<typename BasicJsonType>\nBasicJsonType get() const;\n\n// (3)\ntemplate<typename PointerType>\nPointerType get_ptr();\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n
    1. Explicit type conversion between the JSON value and a compatible value which is CopyConstructible and DefaultConstructible. The value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is equivalent to executing

      ValueType ret;\nJSONSerializer<ValueType>::from_json(*this, ret);\nreturn ret;\n

      This overload is chosen if:

      • ValueType is not basic_json,
      • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&), and
      • json_serializer<ValueType> does not have a from_json() method of the form ValueType from_json(const basic_json&)

      If the type is not CopyConstructible and not DefaultConstructible, the value is converted by calling the json_serializer<ValueType> from_json() method.

      The function is then equivalent to executing

      return JSONSerializer<ValueTypeCV>::from_json(*this);\n

      This overload is chosen if:

      • ValueType is not basic_json and
      • json_serializer<ValueType> has a from_json() method of the form ValueType from_json(const basic_json&)

      If json_serializer<ValueType> has both overloads of from_json(), the latter one is chosen.

    2. Overload for basic_json specializations. The function is equivalent to executing

      return *this;\n

    3. Explicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get/#template-parameters","title":"Template parameters","text":"ValueType the value type to return BasicJsonType a specialization of basic_json PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get/#return-value","title":"Return value","text":"
    1. copy of the JSON value, converted to ValueType
    2. a copy of *this, converted into BasicJsonType
    3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise
    "},{"location":"api/basic_json/get/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get/#notes","title":"Notes","text":"

    Undefined behavior

    Writing data to the pointee (overload 3) of the result yields an undefined state.

    "},{"location":"api/basic_json/get/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use explicit conversions\n    auto v1 = json_types[\"boolean\"].template get<bool>();\n    auto v2 = json_types[\"number\"][\"integer\"].template get<int>();\n    auto v3 = json_types[\"number\"][\"integer\"].template get<short>();\n    auto v4 = json_types[\"number\"][\"floating-point\"].template get<float>();\n    auto v5 = json_types[\"number\"][\"floating-point\"].template get<int>();\n    auto v6 = json_types[\"string\"].template get<std::string>();\n    auto v7 = json_types[\"array\"].template get<std::vector<short>>();\n    auto v8 = json_types.template get<std::unordered_map<std::string, json>>();\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a #cpp nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.template get<const json::number_integer_t*>();\n    auto p2 = value.template get<json::number_integer_t*>();\n    auto p3 = value.template get<json::number_integer_t* const>();\n    auto p4 = value.template get<const json::number_integer_t* const>();\n    auto p5 = value.template get<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get/#version-history","title":"Version history","text":"
    1. Since version 2.1.0.
    2. Since version 2.1.0. Extended to work with other specializations of basic_json in version 3.2.0.
    3. Since version 1.0.0.
    "},{"location":"api/basic_json/get_allocator/","title":"nlohmann::basic_json::get_allocator","text":"
    static allocator_type get_allocator();\n

    Returns the allocator associated with the container.

    "},{"location":"api/basic_json/get_allocator/#return-value","title":"Return value","text":"

    associated allocator

    "},{"location":"api/basic_json/get_allocator/#examples","title":"Examples","text":"Example

    The example shows how get_allocator() is used to created json values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    auto alloc = json::get_allocator();\n    using traits_t = std::allocator_traits<decltype(alloc)>;\n\n    json* j = traits_t::allocate(alloc, 1);\n    traits_t::construct(alloc, j, \"Hello, world!\");\n\n    std::cout << *j << std::endl;\n\n    traits_t::destroy(alloc, j);\n    traits_t::deallocate(alloc, j, 1);\n}\n

    Output:

    \"Hello, world!\"\n
    "},{"location":"api/basic_json/get_allocator/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/get_binary/","title":"nlohmann::basic_json::get_binary","text":"
    binary_t& get_binary();\n\nconst binary_t& get_binary() const;\n

    Returns a reference to the stored binary value.

    "},{"location":"api/basic_json/get_binary/#return-value","title":"Return value","text":"

    Reference to binary value.

    "},{"location":"api/basic_json/get_binary/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_binary/#exceptions","title":"Exceptions","text":"

    Throws type_error.302 if the value is not binary

    "},{"location":"api/basic_json/get_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_binary/#examples","title":"Examples","text":"Example

    The following code shows how to query a binary value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary vector\n    std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};\n\n    // create a binary JSON value with subtype 42\n    json j = json::binary(vec, 42);\n\n    // output type and subtype\n    std::cout << \"type: \" << j.type_name() << \", subtype: \" << j.get_binary().subtype() << std::endl;\n}\n

    Output:

    type: binary, subtype: 42\n
    "},{"location":"api/basic_json/get_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/get_ptr/","title":"nlohmann::basic_json::get_ptr","text":"
    template<typename PointerType>\nPointerType get_ptr() noexcept;\n\ntemplate<typename PointerType>\nconstexpr const PointerType get_ptr() const noexcept;\n

    Implicit pointer access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ptr/#template-parameters","title":"Template parameters","text":"PointerType pointer type; must be a pointer to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Other types will not compile."},{"location":"api/basic_json/get_ptr/#return-value","title":"Return value","text":"

    pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; nullptr otherwise

    "},{"location":"api/basic_json/get_ptr/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/get_ptr/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ptr/#notes","title":"Notes","text":"

    Undefined behavior

    The pointer becomes invalid if the underlying JSON object changes.

    Consider the following example code where the pointer ptr changes after the array is resized. As a result, reading or writing to ptr after the array change would be undefined behavior. The address of the first array element changes, because the underlying std::vector is resized after adding a fifth element.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j = {1, 2, 3, 4};\n    auto* ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n\n    j.push_back(5);\n\n    ptr = j[0].get_ptr<std::int64_t*>();\n    std::cout << \"value at \" << ptr << \" is \" << *ptr << std::endl;\n}\n

    Output:

    value at 0x6000012fc1c8 is 1\nvalue at 0x6000029fc088 is 1\n
    "},{"location":"api/basic_json/get_ptr/#examples","title":"Examples","text":"Example

    The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a nullptr is returned if the value and the requested pointer type does not match.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting pointers\n    auto p1 = value.get_ptr<const json::number_integer_t*>();\n    auto p2 = value.get_ptr<json::number_integer_t*>();\n    auto p3 = value.get_ptr<json::number_integer_t* const>();\n    auto p4 = value.get_ptr<const json::number_integer_t* const>();\n    auto p5 = value.get_ptr<json::number_float_t*>();\n\n    // print the pointees\n    std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\\n';\n    std::cout << std::boolalpha << (p5 == nullptr) << '\\n';\n}\n

    Output:

    17 17 17 17\ntrue\n
    "},{"location":"api/basic_json/get_ptr/#see-also","title":"See also","text":"
    • get_ref() get a reference value
    "},{"location":"api/basic_json/get_ptr/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_ref/","title":"nlohmann::basic_json::get_ref","text":"
    template<typename ReferenceType>\nReferenceType get_ref();\n\ntemplate<typename ReferenceType>\nconst ReferenceType get_ref() const;\n

    Implicit reference access to the internally stored JSON value. No copies are made.

    "},{"location":"api/basic_json/get_ref/#template-parameters","title":"Template parameters","text":"ReferenceType reference type; must be a reference to array_t, object_t, string_t, boolean_t, number_integer_t, or number_unsigned_t, number_float_t, or binary_t. Enforced by a static assertion."},{"location":"api/basic_json/get_ref/#return-value","title":"Return value","text":"

    reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws type_error.303 otherwise

    "},{"location":"api/basic_json/get_ref/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/get_ref/#exceptions","title":"Exceptions","text":"

    Throws type_error.303 if the requested reference type does not match the stored JSON value type; example: \"incompatible ReferenceType for get_ref, actual type is binary\".

    "},{"location":"api/basic_json/get_ref/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/get_ref/#notes","title":"Notes","text":"

    Undefined behavior

    The reference becomes invalid if the underlying JSON object changes.

    "},{"location":"api/basic_json/get_ref/#examples","title":"Examples","text":"Example

    The example shows several calls to get_ref().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON number\n    json value = 17;\n\n    // explicitly getting references\n    auto r1 = value.get_ref<const json::number_integer_t&>();\n    auto r2 = value.get_ref<json::number_integer_t&>();\n\n    // print the values\n    std::cout << r1 << ' ' << r2 << '\\n';\n\n    // incompatible type throws exception\n    try\n    {\n        auto r3 = value.get_ref<json::number_float_t&>();\n    }\n    catch (const json::type_error& ex)\n    {\n        std::cout << ex.what() << '\\n';\n    }\n}\n

    Output:

    17 17\n[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\n
    "},{"location":"api/basic_json/get_ref/#see-also","title":"See also","text":"
    • get_ptr() get a pointer value
    "},{"location":"api/basic_json/get_ref/#version-history","title":"Version history","text":"
    • Added in version 1.1.0.
    • Extended to binary types in version 3.8.0.
    "},{"location":"api/basic_json/get_to/","title":"nlohmann::basic_json::get_to","text":"
    template<typename ValueType>\nValueType& get_to(ValueType& v) const noexcept(\n    noexcept(JSONSerializer<ValueType>::from_json(\n        std::declval<const basic_json_t&>(), v)));\n

    Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the json_serializer<ValueType> from_json() method.

    The function is equivalent to executing

    ValueType v;\nJSONSerializer<ValueType>::from_json(*this, v);\n

    This overload is chosen if:

    • ValueType is not basic_json,
    • json_serializer<ValueType> has a from_json() method of the form void from_json(const basic_json&, ValueType&)
    "},{"location":"api/basic_json/get_to/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/get_to/#return-value","title":"Return value","text":"

    the input parameter, allowing chaining calls

    "},{"location":"api/basic_json/get_to/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/get_to/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as #cpp std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    bool v1;\n    int v2;\n    short v3;\n    float v4;\n    int v5;\n    std::string v6;\n    std::vector<short> v7;\n    std::unordered_map<std::string, json> v8;\n\n    // use explicit conversions\n    json_types[\"boolean\"].get_to(v1);\n    json_types[\"number\"][\"integer\"].get_to(v2);\n    json_types[\"number\"][\"integer\"].get_to(v3);\n    json_types[\"number\"][\"floating-point\"].get_to(v4);\n    json_types[\"number\"][\"floating-point\"].get_to(v5);\n    json_types[\"string\"].get_to(v6);\n    json_types[\"array\"].get_to(v7);\n    json_types.get_to(v8);\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n
    "},{"location":"api/basic_json/get_to/#version-history","title":"Version history","text":"
    • Since version 3.3.0.
    "},{"location":"api/basic_json/input_format_t/","title":"nlohmann::basic_json::input_format_t","text":"
    enum class input_format_t {\n    json,\n    cbor,\n    msgpack,\n    ubjson,\n    bson,\n    bjdata\n};\n

    This enumeration is used in the sax_parse function to choose the input format to parse:

    json JSON (JavaScript Object Notation) cbor CBOR (Concise Binary Object Representation) msgpack MessagePack ubjson UBJSON (Universal Binary JSON) bson BSON (Binary JSON) bjdata BJData (Binary JData)"},{"location":"api/basic_json/input_format_t/#examples","title":"Examples","text":"Example

    The example below shows how an input_format_t enum value is passed to sax_parse to set the input format to CBOR.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/basic_json/input_format_t/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/basic_json/insert/","title":"nlohmann::basic_json::insert","text":"
    // (1)\niterator insert(const_iterator pos, const basic_json& val);\niterator insert(const_iterator pos, basic_json&& val);\n\n// (2)\niterator insert(const_iterator pos, size_type cnt, const basic_json& val);\n\n// (3)\niterator insert(const_iterator pos, const_iterator first, const_iterator last);\n\n// (4)\niterator insert(const_iterator pos, initializer_list_t ilist);\n\n// (5)\nvoid insert(const_iterator first, const_iterator last);\n
    1. Inserts element val into array before iterator pos.
    2. Inserts cnt copies of val into array before iterator pos.
    3. Inserts elements from range [first, last) into array before iterator pos.
    4. Inserts elements from initializer list ilist into array before iterator pos.
    5. Inserts elements from range [first, last) into object.
    "},{"location":"api/basic_json/insert/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value.

    "},{"location":"api/basic_json/insert/#parameters","title":"Parameters","text":"pos (in) iterator before which the content will be inserted; may be the end() iterator val (in) value to insert cnt (in) number of copies of val to insert first (in) begin of the range of elements to insert last (in) end of the range of elements to insert ilist (in) initializer list to insert the values from"},{"location":"api/basic_json/insert/#return-value","title":"Return value","text":"
    1. iterator pointing to the inserted val.
    2. iterator pointing to the first element inserted, or pos if cnt==0
    3. iterator pointing to the first element inserted, or pos if first==last
    4. iterator pointing to the first element inserted, or pos if ilist is empty
    5. (none)
    "},{"location":"api/basic_json/insert/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/insert/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    2. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    3. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
      • Throws invalid_iterator.211 if first or last are iterators into container for which insert is called; example: \"passed iterators may not belong to container\"
    4. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than arrays; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
    5. The function can throw the following exceptions:
      • Throws type_error.309 if called on JSON values other than objects; example: \"cannot use insert() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/insert/#complexity","title":"Complexity","text":"
    1. Constant plus linear in the distance between pos and end of the container.
    2. Linear in cnt plus linear in the distance between pos and end of the container.
    3. Linear in std::distance(first, last) plus linear in the distance between pos and end of the container.
    4. Linear in ilist.size() plus linear in the distance between pos and end of the container.
    5. Logarithmic: O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/insert/#examples","title":"Examples","text":"Example (1): insert element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 10 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 10);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    10\n[1,2,10,3,4]\n
    Example (2): insert copies of element into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert number 7 copies of number 7 before number 3\n    auto new_pos = v.insert(v.begin() + 2, 7, 7);\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,7,7,7,7,7,7,7,3,4]\n
    Example (3): insert range of elements into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // create a JSON array to copy values from\n    json v2 = {\"one\", \"two\", \"three\", \"four\"};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), v2.begin(), v2.end());\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    \"one\"\n[1,2,3,4,\"one\",\"two\",\"three\",\"four\"]\n
    Example (4): insert elements from initializer list into array

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json v = {1, 2, 3, 4};\n\n    // insert range from v2 before the end of array v\n    auto new_pos = v.insert(v.end(), {7, 8, 9});\n\n    // output new array and result of insert call\n    std::cout << *new_pos << '\\n';\n    std::cout << v << '\\n';\n}\n

    Output:

    7\n[1,2,3,4,7,8,9]\n
    Example (5): insert range of elements into object

    The example shows how insert() is used.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON objects\n    json j1 = {{\"one\", \"eins\"}, {\"two\", \"zwei\"}};\n    json j2 = {{\"eleven\", \"elf\"}, {\"seventeen\", \"siebzehn\"}};\n\n    // output objects\n    std::cout << j1 << '\\n';\n    std::cout << j2 << '\\n';\n\n    // insert range from j2 to j1\n    j1.insert(j2.begin(), j2.end());\n\n    // output result of insert call\n    std::cout << j1 << '\\n';\n}\n

    Output:

    {\"one\":\"eins\",\"two\":\"zwei\"}\n{\"eleven\":\"elf\",\"seventeen\":\"siebzehn\"}\n{\"eleven\":\"elf\",\"one\":\"eins\",\"seventeen\":\"siebzehn\",\"two\":\"zwei\"}\n
    "},{"location":"api/basic_json/insert/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0.
    3. Added in version 1.0.0.
    4. Added in version 1.0.0.
    5. Added in version 3.0.0.
    "},{"location":"api/basic_json/invalid_iterator/","title":"nlohmann::basic_json::invalid_iterator","text":"
    class invalid_iterator : public exception;\n

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx (see list of iterator errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_invalid_iterator fill:#CCCCFF
    "},{"location":"api/basic_json/invalid_iterator/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/invalid_iterator/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/invalid_iterator/#examples","title":"Examples","text":"Example

    The following code shows how a invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"api/basic_json/invalid_iterator/#see-also","title":"See also","text":"
    • List of iterator errors
    • parse_error for exceptions indicating a parse error
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/invalid_iterator/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/is_array/","title":"nlohmann::basic_json::is_array","text":"
    constexpr bool is_array() const noexcept;\n

    This function returns true if and only if the JSON value is an array.

    "},{"location":"api/basic_json/is_array/#return-value","title":"Return value","text":"

    true if type is an array, false otherwise.

    "},{"location":"api/basic_json/is_array/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_array/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_array/#examples","title":"Examples","text":"Example

    The following code exemplifies is_array() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_array()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_array() << '\\n';\n    std::cout << j_boolean.is_array() << '\\n';\n    std::cout << j_number_integer.is_array() << '\\n';\n    std::cout << j_number_unsigned_integer.is_array() << '\\n';\n    std::cout << j_number_float.is_array() << '\\n';\n    std::cout << j_object.is_array() << '\\n';\n    std::cout << j_array.is_array() << '\\n';\n    std::cout << j_string.is_array() << '\\n';\n    std::cout << j_binary.is_array() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_array/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_binary/","title":"nlohmann::basic_json::is_binary","text":"
    constexpr bool is_binary() const noexcept;\n

    This function returns true if and only if the JSON value is binary array.

    "},{"location":"api/basic_json/is_binary/#return-value","title":"Return value","text":"

    true if type is binary, false otherwise.

    "},{"location":"api/basic_json/is_binary/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_binary/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_binary/#examples","title":"Examples","text":"Example

    The following code exemplifies is_binary() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_binary()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_binary() << '\\n';\n    std::cout << j_boolean.is_binary() << '\\n';\n    std::cout << j_number_integer.is_binary() << '\\n';\n    std::cout << j_number_unsigned_integer.is_binary() << '\\n';\n    std::cout << j_number_float.is_binary() << '\\n';\n    std::cout << j_object.is_binary() << '\\n';\n    std::cout << j_array.is_binary() << '\\n';\n    std::cout << j_string.is_binary() << '\\n';\n    std::cout << j_binary.is_binary() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\n
    "},{"location":"api/basic_json/is_binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/basic_json/is_boolean/","title":"nlohmann::basic_json::is_boolean","text":"
    constexpr bool is_boolean() const noexcept;\n

    This function returns true if and only if the JSON value is true or false.

    "},{"location":"api/basic_json/is_boolean/#return-value","title":"Return value","text":"

    true if type is boolean, false otherwise.

    "},{"location":"api/basic_json/is_boolean/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_boolean/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_boolean/#examples","title":"Examples","text":"Example

    The following code exemplifies is_boolean() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_boolean()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_boolean() << '\\n';\n    std::cout << j_boolean.is_boolean() << '\\n';\n    std::cout << j_number_integer.is_boolean() << '\\n';\n    std::cout << j_number_unsigned_integer.is_boolean() << '\\n';\n    std::cout << j_number_float.is_boolean() << '\\n';\n    std::cout << j_object.is_boolean() << '\\n';\n    std::cout << j_array.is_boolean() << '\\n';\n    std::cout << j_string.is_boolean() << '\\n';\n    std::cout << j_binary.is_boolean() << '\\n';\n}\n

    Output:

    false\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_boolean/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_discarded/","title":"nlohmann::basic_json::is_discarded","text":"
    constexpr bool is_discarded() const noexcept;\n

    This function returns true for a JSON value if either:

    • the value was discarded during parsing with a callback function (see parser_callback_t), or
    • the value is the result of parsing invalid JSON with parameter allow_exceptions set to false; see parse for more information.
    "},{"location":"api/basic_json/is_discarded/#return-value","title":"Return value","text":"

    true if type is discarded, false otherwise.

    "},{"location":"api/basic_json/is_discarded/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_discarded/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_discarded/#notes","title":"Notes","text":"

    Comparisons

    Discarded values are never compared equal with operator==. That is, checking whether a JSON value j is discarded will only work via:

    j.is_discarded()\n

    because

    j == json::value_t::discarded\n

    will always be false.

    Removal during parsing with callback functions

    When a value is discarded by a callback function (see parser_callback_t) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of [null, discarded, false], the array [null, false] is returned. Only if the top-level value is discarded, the return value of the parse call is discarded.

    This function will always be false for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases.

    "},{"location":"api/basic_json/is_discarded/#examples","title":"Examples","text":"Example

    The following code exemplifies is_discarded() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_discarded()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_discarded() << '\\n';\n    std::cout << j_boolean.is_discarded() << '\\n';\n    std::cout << j_number_integer.is_discarded() << '\\n';\n    std::cout << j_number_unsigned_integer.is_discarded() << '\\n';\n    std::cout << j_number_float.is_discarded() << '\\n';\n    std::cout << j_object.is_discarded() << '\\n';\n    std::cout << j_array.is_discarded() << '\\n';\n    std::cout << j_string.is_discarded() << '\\n';\n    std::cout << j_binary.is_discarded() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_discarded/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_null/","title":"nlohmann::basic_json::is_null","text":"
    constexpr bool is_null() const noexcept;\n

    This function returns true if and only if the JSON value is null.

    "},{"location":"api/basic_json/is_null/#return-value","title":"Return value","text":"

    true if type is null, false otherwise.

    "},{"location":"api/basic_json/is_null/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_null/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_null/#examples","title":"Examples","text":"Example

    The following code exemplifies is_null() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_null()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_null() << '\\n';\n    std::cout << j_boolean.is_null() << '\\n';\n    std::cout << j_number_integer.is_null() << '\\n';\n    std::cout << j_number_unsigned_integer.is_null() << '\\n';\n    std::cout << j_number_float.is_null() << '\\n';\n    std::cout << j_object.is_null() << '\\n';\n    std::cout << j_array.is_null() << '\\n';\n    std::cout << j_string.is_null() << '\\n';\n    std::cout << j_binary.is_null() << '\\n';\n}\n

    Output:

    true\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_null/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number/","title":"nlohmann::basic_json::is_number","text":"
    constexpr bool is_number() const noexcept;\n

    This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values.

    "},{"location":"api/basic_json/is_number/#return-value","title":"Return value","text":"

    true if type is number (regardless whether integer, unsigned integer or floating-type), false otherwise.

    "},{"location":"api/basic_json/is_number/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_number() const noexcept\n{\n    return is_number_integer() || is_number_float();\n}\n
    "},{"location":"api/basic_json/is_number/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number() << '\\n';\n    std::cout << j_boolean.is_number() << '\\n';\n    std::cout << j_number_integer.is_number() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number() << '\\n';\n    std::cout << j_number_float.is_number() << '\\n';\n    std::cout << j_object.is_number() << '\\n';\n    std::cout << j_array.is_number() << '\\n';\n    std::cout << j_string.is_number() << '\\n';\n    std::cout << j_binary.is_number() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number/#see-also","title":"See also","text":"
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_float/","title":"nlohmann::basic_json::is_number_float","text":"
    constexpr bool is_number_float() const noexcept;\n

    This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values.

    "},{"location":"api/basic_json/is_number_float/#return-value","title":"Return value","text":"

    true if type is a floating-point number, false otherwise.

    "},{"location":"api/basic_json/is_number_float/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_float/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_float/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_float() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_float()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_float() << '\\n';\n    std::cout << j_boolean.is_number_float() << '\\n';\n    std::cout << j_number_integer.is_number_float() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_float() << '\\n';\n    std::cout << j_number_float.is_number_float() << '\\n';\n    std::cout << j_object.is_number_float() << '\\n';\n    std::cout << j_array.is_number_float() << '\\n';\n    std::cout << j_string.is_number_float() << '\\n';\n    std::cout << j_binary.is_number_float() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_float/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_unsigned() check if value is an unsigned integer number
    "},{"location":"api/basic_json/is_number_float/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_number_integer/","title":"nlohmann::basic_json::is_number_integer","text":"
    constexpr bool is_number_integer() const noexcept;\n

    This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values.

    "},{"location":"api/basic_json/is_number_integer/#return-value","title":"Return value","text":"

    true if type is an integer or unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_integer/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_integer/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_integer/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_integer() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_integer()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_integer() << '\\n';\n    std::cout << j_boolean.is_number_integer() << '\\n';\n    std::cout << j_number_integer.is_number_integer() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_integer() << '\\n';\n    std::cout << j_number_float.is_number_integer() << '\\n';\n    std::cout << j_object.is_number_integer() << '\\n';\n    std::cout << j_array.is_number_integer() << '\\n';\n    std::cout << j_string.is_number_integer() << '\\n';\n    std::cout << j_binary.is_number_integer() << '\\n';\n}\n

    Output:

    false\nfalse\ntrue\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_integer/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_unsigned() check if value is an unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_integer/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to also return true for unsigned integers in 2.0.0.
    "},{"location":"api/basic_json/is_number_unsigned/","title":"nlohmann::basic_json::is_number_unsigned","text":"
    constexpr bool is_number_unsigned() const noexcept;\n

    This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values.

    "},{"location":"api/basic_json/is_number_unsigned/#return-value","title":"Return value","text":"

    true if type is an unsigned integer number, false otherwise.

    "},{"location":"api/basic_json/is_number_unsigned/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_number_unsigned/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_number_unsigned/#examples","title":"Examples","text":"Example

    The following code exemplifies is_number_unsigned() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_number_unsigned()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_number_unsigned() << '\\n';\n    std::cout << j_boolean.is_number_unsigned() << '\\n';\n    std::cout << j_number_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_unsigned_integer.is_number_unsigned() << '\\n';\n    std::cout << j_number_float.is_number_unsigned() << '\\n';\n    std::cout << j_object.is_number_unsigned() << '\\n';\n    std::cout << j_array.is_number_unsigned() << '\\n';\n    std::cout << j_string.is_number_unsigned() << '\\n';\n    std::cout << j_binary.is_number_unsigned() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_number_unsigned/#see-also","title":"See also","text":"
    • is_number() check if value is a number
    • is_number_integer() check if value is an integer or unsigned integer number
    • is_number_float() check if value is a floating-point number
    "},{"location":"api/basic_json/is_number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/is_object/","title":"nlohmann::basic_json::is_object","text":"
    constexpr bool is_object() const noexcept;\n

    This function returns true if and only if the JSON value is an object.

    "},{"location":"api/basic_json/is_object/#return-value","title":"Return value","text":"

    true if type is an object, false otherwise.

    "},{"location":"api/basic_json/is_object/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_object/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_object/#examples","title":"Examples","text":"Example

    The following code exemplifies is_object() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_object()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_object() << '\\n';\n    std::cout << j_boolean.is_object() << '\\n';\n    std::cout << j_number_integer.is_object() << '\\n';\n    std::cout << j_number_unsigned_integer.is_object() << '\\n';\n    std::cout << j_number_float.is_object() << '\\n';\n    std::cout << j_object.is_object() << '\\n';\n    std::cout << j_array.is_object() << '\\n';\n    std::cout << j_string.is_object() << '\\n';\n    std::cout << j_binary.is_object() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_primitive/","title":"nlohmann::basic_json::is_primitive","text":"
    constexpr bool is_primitive() const noexcept;\n

    This function returns true if and only if the JSON type is primitive (string, number, boolean, null, binary).

    "},{"location":"api/basic_json/is_primitive/#return-value","title":"Return value","text":"

    true if type is primitive (string, number, boolean, null, or binary), false otherwise.

    "},{"location":"api/basic_json/is_primitive/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_primitive/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_primitive/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_primitive() const noexcept\n{\n    return is_null() || is_string() || is_boolean() || is_number() || is_binary();\n}\n
    "},{"location":"api/basic_json/is_primitive/#notes","title":"Notes","text":"

    The term primitive stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, is_primitive() returns true for binary values.

    "},{"location":"api/basic_json/is_primitive/#examples","title":"Examples","text":"Example

    The following code exemplifies is_primitive() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_primitive()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_primitive() << '\\n';\n    std::cout << j_boolean.is_primitive() << '\\n';\n    std::cout << j_number_integer.is_primitive() << '\\n';\n    std::cout << j_number_unsigned_integer.is_primitive() << '\\n';\n    std::cout << j_number_float.is_primitive() << '\\n';\n    std::cout << j_object.is_primitive() << '\\n';\n    std::cout << j_array.is_primitive() << '\\n';\n    std::cout << j_string.is_primitive() << '\\n';\n    std::cout << j_binary.is_primitive() << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\nfalse\nfalse\ntrue\ntrue\n
    "},{"location":"api/basic_json/is_primitive/#see-also","title":"See also","text":"
    • is_structured() returns whether JSON value is structured
    • is_null() returns whether JSON value is null
    • is_string() returns whether JSON value is a string
    • is_boolean() returns whether JSON value is a boolean
    • is_number() returns whether JSON value is a number
    • is_binary() returns whether JSON value is a binary array
    "},{"location":"api/basic_json/is_primitive/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return true for binary types in version 3.8.0.
    "},{"location":"api/basic_json/is_string/","title":"nlohmann::basic_json::is_string","text":"
    constexpr bool is_string() const noexcept;\n

    This function returns true if and only if the JSON value is a string.

    "},{"location":"api/basic_json/is_string/#return-value","title":"Return value","text":"

    true if type is a string, false otherwise.

    "},{"location":"api/basic_json/is_string/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_string/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_string/#examples","title":"Examples","text":"Example

    The following code exemplifies is_string() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_string()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_string() << '\\n';\n    std::cout << j_boolean.is_string() << '\\n';\n    std::cout << j_number_integer.is_string() << '\\n';\n    std::cout << j_number_unsigned_integer.is_string() << '\\n';\n    std::cout << j_number_float.is_string() << '\\n';\n    std::cout << j_object.is_string() << '\\n';\n    std::cout << j_array.is_string() << '\\n';\n    std::cout << j_string.is_string() << '\\n';\n    std::cout << j_binary.is_string() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\nfalse\nfalse\ntrue\nfalse\n
    "},{"location":"api/basic_json/is_string/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/is_structured/","title":"nlohmann::basic_json::is_structured","text":"
    constexpr bool is_structured() const noexcept;\n

    This function returns true if and only if the JSON type is structured (array or object).

    "},{"location":"api/basic_json/is_structured/#return-value","title":"Return value","text":"

    true if type is structured (array or object), false otherwise.

    "},{"location":"api/basic_json/is_structured/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/is_structured/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/is_structured/#possible-implementation","title":"Possible implementation","text":"
    constexpr bool is_structured() const noexcept\n{\n    return is_array() || is_object();\n}\n
    "},{"location":"api/basic_json/is_structured/#notes","title":"Notes","text":"

    The term structured stems from RFC 8259:

    JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays).

    Note that though strings are containers in C++, they are treated as primitive values in JSON.

    "},{"location":"api/basic_json/is_structured/#examples","title":"Examples","text":"Example

    The following code exemplifies is_structured() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_number_unsigned_integer = 12345678987654321u;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n    json j_binary = json::binary({1, 2, 3});\n\n    // call is_structured()\n    std::cout << std::boolalpha;\n    std::cout << j_null.is_structured() << '\\n';\n    std::cout << j_boolean.is_structured() << '\\n';\n    std::cout << j_number_integer.is_structured() << '\\n';\n    std::cout << j_number_unsigned_integer.is_structured() << '\\n';\n    std::cout << j_number_float.is_structured() << '\\n';\n    std::cout << j_object.is_structured() << '\\n';\n    std::cout << j_array.is_structured() << '\\n';\n    std::cout << j_string.is_structured() << '\\n';\n    std::cout << j_binary.is_structured() << '\\n';\n}\n

    Output:

    false\nfalse\nfalse\nfalse\nfalse\ntrue\ntrue\nfalse\nfalse\n
    "},{"location":"api/basic_json/is_structured/#see-also","title":"See also","text":"
    • is_primitive() returns whether JSON value is primitive
    • is_array() returns whether value is an array
    • is_object() returns whether value is an object
    "},{"location":"api/basic_json/is_structured/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/items/","title":"nlohmann::basic_json::items","text":"
    iteration_proxy<iterator> items() noexcept;\niteration_proxy<const_iterator> items() const noexcept;\n

    This function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    For loop without items() function:

    for (auto it = j_object.begin(); it != j_object.end(); ++it)\n{\n    std::cout << \"key: \" << it.key() << \", value:\" << it.value() << '\\n';\n}\n

    Range-based for loop without items() function:

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    Range-based for loop with items() function:

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n
    "},{"location":"api/basic_json/items/#return-value","title":"Return value","text":"

    iteration proxy object wrapping the current value with an interface to use in range-based for loops

    "},{"location":"api/basic_json/items/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/items/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/items/#notes","title":"Notes","text":"

    When iterating over an array, key() will return the index of the element as string (see example). For primitive types (e.g., numbers), key() returns an empty string.

    Lifetime issues

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"api/basic_json/items/#examples","title":"Examples","text":"Example

    The following code shows an example for items().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n\n    // example for an object\n    for (auto& x : j_object.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n\n    // example for an array\n    for (auto& x : j_array.items())\n    {\n        std::cout << \"key: \" << x.key() << \", value: \" << x.value() << '\\n';\n    }\n}\n

    Output:

    key: one, value: 1\nkey: two, value: 2\nkey: 0, value: 1\nkey: 1, value: 2\nkey: 2, value: 4\nkey: 3, value: 8\nkey: 4, value: 16\n
    "},{"location":"api/basic_json/items/#version-history","title":"Version history","text":"
    • Added iterator_wrapper in version 3.0.0.
    • Added items and deprecated iterator_wrapper in version 3.1.0.
    • Added structured binding support in version 3.5.0.

    Deprecation

    This function replaces the static function iterator_wrapper which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function iterator_wrapper will be removed in version 4.0.0. Please replace all occurrences of iterator_wrapper(j) with j.items().

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/json_base_class_t/","title":"nlohmann::basic_json::json_base_class_t","text":"
    using json_base_class_t = detail::json_base_class<CustomBaseClass>;\n

    The base class used to inject custom functionality into each instance of basic_json. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code.

    "},{"location":"api/basic_json/json_base_class_t/#template-parameters","title":"Template parameters","text":"CustomBaseClass the base class to be added to basic_json"},{"location":"api/basic_json/json_base_class_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_base_class_t/#default-type","title":"Default type","text":"

    The default value for CustomBaseClass is void. In this case an empty base class is used and no additional functionality is injected.

    "},{"location":"api/basic_json/json_base_class_t/#limitations","title":"Limitations","text":"

    The type CustomBaseClass has to be a default-constructible class. basic_json only supports copy/move construction/assignment if CustomBaseClass does so as well.

    "},{"location":"api/basic_json/json_base_class_t/#examples","title":"Examples","text":"Example

    The following code shows how to inject custom data and methods for each node.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nclass visitor_adaptor_with_metadata\n{\n  public:\n    template <class Fnc>\n    void visit(const Fnc& fnc) const;\n\n    int metadata = 42;\n  private:\n    template <class Ptr, class Fnc>\n    void do_visit(const Ptr& ptr, const Fnc& fnc) const;\n};\n\nusing json = nlohmann::basic_json <\n             std::map,\n             std::vector,\n             std::string,\n             bool,\n             std::int64_t,\n             std::uint64_t,\n             double,\n             std::allocator,\n             nlohmann::adl_serializer,\n             std::vector<std::uint8_t>,\n             visitor_adaptor_with_metadata\n             >;\n\ntemplate <class Fnc>\nvoid visitor_adaptor_with_metadata::visit(const Fnc& fnc) const\n{\n    do_visit(json::json_pointer{}, fnc);\n}\n\ntemplate <class Ptr, class Fnc>\nvoid visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const\n{\n    using value_t = nlohmann::detail::value_t;\n    const json& j = *static_cast<const json*>(this);\n    switch (j.type())\n    {\n        case value_t::object:\n            fnc(ptr, j);\n            for (const auto& entry : j.items())\n            {\n                entry.value().do_visit(ptr / entry.key(), fnc);\n            }\n            break;\n        case value_t::array:\n            fnc(ptr, j);\n            for (std::size_t i = 0; i < j.size(); ++i)\n            {\n                j.at(i).do_visit(ptr / std::to_string(i), fnc);\n            }\n            break;\n        case value_t::null:\n        case value_t::string:\n        case value_t::boolean:\n        case value_t::number_integer:\n        case value_t::number_unsigned:\n        case value_t::number_float:\n        case value_t::binary:\n            fnc(ptr, j);\n            break;\n        case value_t::discarded:\n        default:\n            break;\n    }\n}\n\nint main()\n{\n    // create a json object\n    json j;\n    j[\"null\"];\n    j[\"object\"][\"uint\"] = 1U;\n    j[\"object\"].metadata = 21;\n\n    // visit and output\n    j.visit(\n         [&](const json::json_pointer & p,\n             const json & j)\n    {\n        std::cout << (p.empty() ? std::string{\"/\"} : p.to_string())\n                  << \" - metadata = \" << j.metadata << \" -> \" << j.dump() << '\\n';\n    });\n}\n

    Output:

    / - metadata = 42 -> {\"null\":null,\"object\":{\"uint\":1}}\n/null - metadata = 42 -> null\n/object - metadata = 21 -> {\"uint\":1}\n/object/uint - metadata = 42 -> 1\n
    "},{"location":"api/basic_json/json_base_class_t/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/json_serializer/","title":"nlohmann::basic_json::json_serializer","text":"
    template<typename T, typename SFINAE>\nusing json_serializer = JSONSerializer<T, SFINAE>;\n
    "},{"location":"api/basic_json/json_serializer/#template-parameters","title":"Template parameters","text":"T type to convert; will be used in the to_json/from_json functions SFINAE type to add compile type checks via SFINAE; usually void"},{"location":"api/basic_json/json_serializer/#notes","title":"Notes","text":""},{"location":"api/basic_json/json_serializer/#default-type","title":"Default type","text":"

    The default values for json_serializer is adl_serializer.

    "},{"location":"api/basic_json/json_serializer/#examples","title":"Examples","text":"Example

    The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the adl_serializer.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\n// a simple struct to model a person (not default constructible)\nstruct person\n{\n    person(std::string n, std::string a, int aa)\n        : name(std::move(n)), address(std::move(a)), age(aa)\n    {}\n\n    std::string name;\n    std::string address;\n    int age;\n};\n} // namespace ns\n\nnamespace nlohmann\n{\ntemplate <>\nstruct adl_serializer<ns::person>\n{\n    static ns::person from_json(const json& j)\n    {\n        return {j.at(\"name\"), j.at(\"address\"), j.at(\"age\")};\n    }\n\n    // Here's the catch! You must provide a to_json method! Otherwise, you\n    // will not be able to convert person to json, since you fully\n    // specialized adl_serializer on that type\n    static void to_json(json& j, ns::person p)\n    {\n        j[\"name\"] = p.name;\n        j[\"address\"] = p.address;\n        j[\"age\"] = p.age;\n    }\n};\n} // namespace nlohmann\n\nint main()\n{\n    json j;\n    j[\"name\"] = \"Ned Flanders\";\n    j[\"address\"] = \"744 Evergreen Terrace\";\n    j[\"age\"] = 60;\n\n    auto p = j.template get<ns::person>();\n\n    std::cout << p.name << \" (\" << p.age << \") lives in \" << p.address << std::endl;\n}\n

    Output:

    Ned Flanders (60) lives in 744 Evergreen Terrace\n
    "},{"location":"api/basic_json/json_serializer/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    "},{"location":"api/basic_json/max_size/","title":"nlohmann::basic_json::max_size","text":"
    size_type max_size() const noexcept;\n

    Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. std::distance(begin(), end()) for the JSON value.

    "},{"location":"api/basic_json/max_size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 (same as size()) boolean 1 (same as size()) string 1 (same as size()) number 1 (same as size()) binary 1 (same as size()) object result of function object_t::max_size() array result of function array_t::max_size()"},{"location":"api/basic_json/max_size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/max_size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their max_size() functions have constant complexity.

    "},{"location":"api/basic_json/max_size/#notes","title":"Notes","text":"

    This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is 1.

    "},{"location":"api/basic_json/max_size/#examples","title":"Examples","text":"Example

    The following code calls max_size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call max_size()\n    std::cout << j_null.max_size() << '\\n';\n    std::cout << j_boolean.max_size() << '\\n';\n    std::cout << j_number_integer.max_size() << '\\n';\n    std::cout << j_number_float.max_size() << '\\n';\n    std::cout << j_object.max_size() << '\\n';\n    std::cout << j_array.max_size() << '\\n';\n    std::cout << j_string.max_size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n115292150460684697\n576460752303423487\n1\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/max_size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/merge_patch/","title":"nlohmann::basic_json::merge_patch","text":"
    void merge_patch(const basic_json& apply_patch);\n

    The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    The function implements the following algorithm from Section 2 of RFC 7396 (JSON Merge Patch):

    define MergePatch(Target, Patch):\n  if Patch is an Object:\n    if Target is not an Object:\n      Target = {} // Ignore the contents and set it to an empty Object\n    for each Name/Value pair in Patch:\n      if Value is null:\n        if Name exists in Target:\n          remove the Name/Value pair from Target\n      else:\n        Target[Name] = MergePatch(Target[Name], Value)\n    return Target\n  else:\n    return Patch\n

    Thereby, Target is the current object; that is, the patch is applied to the current value.

    "},{"location":"api/basic_json/merge_patch/#parameters","title":"Parameters","text":"apply_patch (in) the patch to apply"},{"location":"api/basic_json/merge_patch/#complexity","title":"Complexity","text":"

    Linear in the lengths of apply_patch.

    "},{"location":"api/basic_json/merge_patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"api/basic_json/merge_patch/#see-also","title":"See also","text":"
    • RFC 7396 (JSON Merge Patch)
    • patch apply a JSON patch
    "},{"location":"api/basic_json/merge_patch/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    "},{"location":"api/basic_json/meta/","title":"nlohmann::basic_json::meta","text":"
    static basic_json meta();\n

    This function returns a JSON object with information about the library, including the version number and information on the platform and compiler.

    "},{"location":"api/basic_json/meta/#return-value","title":"Return value","text":"

    JSON object holding version information

    key description compiler Information on the used compiler. It is an object with the following keys: c++ (the used C++ standard), family (the compiler family; possible values are clang, icc, gcc, ilecpp, msvc, pgcpp, sunpro, and unknown), and version (the compiler version). copyright The copyright line for the library as string. name The name of the library as string. platform The used platform as string. Possible values are win32, linux, apple, unix, and unknown. url The URL of the project as string. version The version of the library. It is an object with the following keys: major, minor, and patch as defined by Semantic Versioning, and string (the version string)."},{"location":"api/basic_json/meta/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/meta/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/meta/#examples","title":"Examples","text":"Example

    The following code shows an example output of the meta() function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // call meta()\n    std::cout << std::setw(4) << json::meta() << '\\n';\n}\n

    Output:

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/meta/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_VERSION_MAJOR/NLOHMANN_JSON_VERSION_MINOR/NLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/basic_json/meta/#version-history","title":"Version history","text":"
    • Added in version 2.1.0.
    "},{"location":"api/basic_json/number_float_t/","title":"nlohmann::basic_json::number_float_t","text":"
    using number_float_t = NumberFloatType;\n

    The type used to store JSON numbers (floating-point).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store floating-point numbers in C++, a type is defined by the template parameter NumberFloatType which chooses the type to use.

    "},{"location":"api/basic_json/number_float_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_float_t/#default-type","title":"Default type","text":"

    With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"api/basic_json/number_float_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal 01.2 will be serialized to 1.2. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_float_t/#limits","title":"Limits","text":"

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"api/basic_json/number_float_t/#storage","title":"Storage","text":"

    Floating-point number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_float_t/#examples","title":"Examples","text":"Example

    The following code shows that number_float_t is by default, a typedef to double.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<double, json::number_float_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_float_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_integer_t/","title":"nlohmann::basic_json::number_integer_t","text":"
    using number_integer_t = NumberIntegerType;\n

    The type used to store JSON numbers (integers).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store integer numbers in C++, a type is defined by the template parameter NumberIntegerType which chooses the type to use.

    "},{"location":"api/basic_json/number_integer_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_integer_t/#default-type","title":"Default type","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t.

    "},{"location":"api/basic_json/number_integer_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_integer_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_integer_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_integer_t/#examples","title":"Examples","text":"Example

    The following code shows that number_integer_t is by default, a typedef to std::int64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::int64_t, json::number_integer_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_integer_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/number_unsigned_t/","title":"nlohmann::basic_json::number_unsigned_t","text":"
    using number_unsigned_t = NumberUnsignedType;\n

    The type used to store JSON numbers (unsigned).

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t and number_float_t are used.

    To store unsigned integer numbers in C++, a type is defined by the template parameter NumberUnsignedType which chooses the type to use.

    "},{"location":"api/basic_json/number_unsigned_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/number_unsigned_t/#default-type","title":"Default type","text":"

    With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t.

    "},{"location":"api/basic_json/number_unsigned_t/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"api/basic_json/number_unsigned_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range \\f[-2^{53}+1, 2^{53}-1]\\f are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable.

    "},{"location":"api/basic_json/number_unsigned_t/#storage","title":"Storage","text":"

    Integer number values are stored directly inside a basic_json type.

    "},{"location":"api/basic_json/number_unsigned_t/#examples","title":"Examples","text":"Example

    The following code shows that number_unsigned_t is by default, a typedef to std::uint64_t.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::uint64_t, json::number_unsigned_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/number_unsigned_t/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/object/","title":"nlohmann::basic_json::object","text":"
    static basic_json object(initializer_list_t init = {});\n

    Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object {} is created.

    "},{"location":"api/basic_json/object/#parameters","title":"Parameters","text":"init (in) initializer list with JSON values to create an object from (optional)"},{"location":"api/basic_json/object/#return-value","title":"Return value","text":"

    JSON object value

    "},{"location":"api/basic_json/object/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/object/#exceptions","title":"Exceptions","text":"

    Throws type_error.301 if init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list init. See example below.

    "},{"location":"api/basic_json/object/#complexity","title":"Complexity","text":"

    Linear in the size of init.

    "},{"location":"api/basic_json/object/#notes","title":"Notes","text":"

    This function is only added for symmetry reasons. In contrast to the related function array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list init can also be passed to the initializer list constructor basic_json(initializer_list_t, bool, value_t).

    "},{"location":"api/basic_json/object/#examples","title":"Examples","text":"Example

    The following code shows an example for the object function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON objects\n    json j_no_init_list = json::object();\n    json j_empty_init_list = json::object({});\n    json j_list_of_pairs = json::object({ {\"one\", 1}, {\"two\", 2} });\n\n    // serialize the JSON objects\n    std::cout << j_no_init_list << '\\n';\n    std::cout << j_empty_init_list << '\\n';\n    std::cout << j_list_of_pairs << '\\n';\n\n    // example for an exception\n    try\n    {\n        // can only create an object from a list of pairs\n        json j_invalid_object = json::object({{ \"one\", 1, 2 }});\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    {}\n{}\n{\"one\":1,\"two\":2}\n[json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"api/basic_json/object/#see-also","title":"See also","text":"
    • basic_json(initializer_list_t) - create a JSON value from an initializer list
    • array - create a JSON array value from an initializer list
    "},{"location":"api/basic_json/object/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/object_comparator_t/","title":"nlohmann::basic_json::object_comparator_t","text":"
    using object_comparator_t = typename object_t::key_compare;\n// or\nusing object_comparator_t = default_object_comparator_t;\n

    The comparator used by object_t. Defined as typename object_t::key_compare if available, and default_object_comparator_t otherwise.

    "},{"location":"api/basic_json/object_comparator_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the used object comparator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha\n              << \"json::object_comparator_t(\\\"one\\\", \\\"two\\\") = \" << json::object_comparator_t{}(\"one\", \"two\") << \"\\n\"\n              << \"json::object_comparator_t(\\\"three\\\", \\\"four\\\") = \" << json::object_comparator_t{}(\"three\", \"four\") << std::endl;\n}\n

    Output:

    json::object_comparator_t(\"one\", \"two\") = true\njson::object_comparator_t(\"three\", \"four\") = false\n
    "},{"location":"api/basic_json/object_comparator_t/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Changed to be conditionally defined as typename object_t::key_compare or default_object_comparator_t in version 3.11.0.
    "},{"location":"api/basic_json/object_t/","title":"nlohmann::basic_json::object_t","text":"
    using object_t = ObjectType<StringType,\n                            basic_json,\n                            default_object_comparator_t,\n                            AllocatorType<std::pair<const StringType, basic_json>>>;\n

    The type used to store JSON objects.

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    To store objects in C++, a type is defined by the template parameters described below.

    "},{"location":"api/basic_json/object_t/#template-parameters","title":"Template parameters","text":"ObjectType the container to store objects (e.g., std::map or std::unordered_map) StringType the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container. AllocatorType the allocator to use for objects (e.g., std::allocator)"},{"location":"api/basic_json/object_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/object_t/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    // until C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<std::string>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n\n// since C++14\nstd::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n

    See default_object_comparator_t for more information.

    "},{"location":"api/basic_json/object_t/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"api/basic_json/object_t/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"api/basic_json/object_t/#storage","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"api/basic_json/object_t/#object-key-order","title":"Object key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"api/basic_json/object_t/#examples","title":"Examples","text":"Example

    The following code shows that object_t is by default, a typedef to std::map<json::string_t, json>.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::map<json::string_t, json>, json::object_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/object_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%2B%3D/","title":"nlohmann::basic_json::operator+=","text":"
    // (1)\nreference operator+=(basic_json&& val);\nreference operator+=(const basic_json& val);\n\n// (2)\nreference operator+=(const typename object_t::value_type& val);\n\n// (3)\nreference operator+=(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using operator+= with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using operator+=(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using operator+=(basic_json&&).

    "},{"location":"api/basic_json/operator%2B%3D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%2B%3D/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/operator%2B%3D/#return-value","title":"Return value","text":"

    *this

    "},{"location":"api/basic_json/operator%2B%3D/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use operator+=() with number\"

    "},{"location":"api/basic_json/operator%2B%3D/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/operator%2B%3D/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/operator%2B%3D/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/operator%2B%3D/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • push_back add a value to an array/object
    "},{"location":"api/basic_json/operator%2B%3D/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/operator%3D/","title":"nlohmann::basic_json::operator=","text":"
    basic_json& operator=(basic_json other) noexcept (\n    std::is_nothrow_move_constructible<value_t>::value &&\n    std::is_nothrow_move_assignable<value_t>::value &&\n    std::is_nothrow_move_constructible<json_value>::value &&\n    std::is_nothrow_move_assignable<json_value>::value\n);\n

    Copy assignment operator. Copies a JSON value via the \"copy and swap\" strategy: It is expressed in terms of the copy constructor, destructor, and the swap() member function.

    "},{"location":"api/basic_json/operator%3D/#parameters","title":"Parameters","text":"other (in) value to copy from"},{"location":"api/basic_json/operator%3D/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator%3D/#examples","title":"Examples","text":"Example

    The code below shows and example for the copy assignment. It creates a copy of value a which is then swapped with b. Finally, the copy of a (which is the null value after the swap) is destroyed.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json a = 23;\n    json b = 42;\n\n    // copy-assign a to b\n    b = a;\n\n    // serialize the JSON arrays\n    std::cout << a << '\\n';\n    std::cout << b << '\\n';\n}\n

    Output:

    23\n23\n
    "},{"location":"api/basic_json/operator%3D/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/operator%5B%5D/","title":"nlohmann::basic_json::operator[]","text":"
    // (1)\nreference operator[](size_type idx);\nconst_reference operator[](size_type idx) const;\n\n// (2)\nreference operator[](typename object_t::key_type key);\nconst_reference operator[](const typename object_t::key_type& key) const;\n\n// (3)\ntemplate<typename KeyType>\nreference operator[](KeyType&& key);\ntemplate<typename KeyType>\nconst_reference operator[](KeyType&& key) const;\n\n// (4)\nreference operator[](const json_pointer& ptr);\nconst_reference operator[](const json_pointer& ptr) const;\n
    1. Returns a reference to the array element at specified location idx.
    2. Returns a reference to the object element with specified key key. The non-const qualified overload takes the key by value.
    3. See 2. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.
    4. Returns a reference to the element with specified JSON pointer ptr.
    "},{"location":"api/basic_json/operator%5B%5D/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17)."},{"location":"api/basic_json/operator%5B%5D/#iterator-invalidation","title":"Iterator invalidation","text":"

    For the non-const versions 1. and 4., when passing an array index that does not exist, it is created and filled with a null value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    For ordered_json, also passing an object key to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/operator%5B%5D/#parameters","title":"Parameters","text":"idx (in) index of the element to access key (in) object key of the element to access ptr (in) JSON pointer to the desired element"},{"location":"api/basic_json/operator%5B%5D/#return-value","title":"Return value","text":"
    1. (const) reference to the element at index idx
    2. (const) reference to the element at key key
    3. (const) reference to the element at key key
    4. (const) reference to the element pointed to by ptr
    "},{"location":"api/basic_json/operator%5B%5D/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/operator%5B%5D/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an array or null; in that case, using the [] operator with an index makes no sense.
    2. The function can throw the following exceptions:
      • Throws type_error.305 if the JSON value is not an object or null; in that case, using the [] operator with a key makes no sense.
    3. See 2.
    4. The function can throw the following exceptions:
      • Throws parse_error.106 if an array index in the passed JSON pointer ptr begins with '0'.
      • Throws parse_error.109 if an array index in the passed JSON pointer ptr is not a number.
      • Throws out_of_range.402 if the array index '-' is used in the passed JSON pointer ptr for the const version.
      • Throws out_of_range.404 if the JSON pointer ptr can not be resolved.
    "},{"location":"api/basic_json/operator%5B%5D/#complexity","title":"Complexity","text":"
    1. Constant if idx is in the range of the array. Otherwise, linear in idx - size().
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    4. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/operator%5B%5D/#notes","title":"Notes","text":"

    Undefined behavior and runtime assertions

    1. If the element with key idx does not exist, the behavior is undefined.
    2. If the element with key key does not exist, the behavior is undefined and is guarded by a runtime assertion!
    1. The non-const version may add values: If idx is beyond the range of the array (i.e., idx >= size()), then the array is silently filled up with null values to make idx a valid reference to the last stored element. In case the value was null before, it is converted to an array.

    2. If key is not found in the object, then it is silently added to the object and filled with a null value to make key a valid reference. In case the value was null before, it is converted to an object.

    3. See 2.

    4. null values are created in arrays and objects if necessary.

      In particular:

      • If the JSON pointer points to an object key that does not exist, it is created and filled with a null value before a reference to it is returned.
      • If the JSON pointer points to an array index that does not exist, it is created and filled with a null value before a reference to it is returned. All indices between the current maximum and the given index are also filled with null.
      • The special value - is treated as a synonym for the index past the end.
    "},{"location":"api/basic_json/operator%5B%5D/#examples","title":"Examples","text":"Example: (1) access specified array element

    The example below shows how array elements can be read and written using [] operator. Note the addition of null values.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON array\n    json array = {1, 2, 3, 4, 5};\n\n    // output element at index 3 (fourth element)\n    std::cout << array[3] << '\\n';\n\n    // change last element to 6\n    array[array.size() - 1] = 6;\n\n    // output changed array\n    std::cout << array << '\\n';\n\n    // write beyond array limit\n    array[10] = 11;\n\n    // output changed array\n    std::cout << array << '\\n';\n}\n

    Output:

    4\n[1,2,3,4,6]\n[1,2,3,4,6,null,null,null,null,null,11]\n
    Example: (1) access specified array element (const)

    The example below shows how array elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON array\n    const json array = {\"first\", \"2nd\", \"third\", \"fourth\"};\n\n    // output element at index 2 (third element)\n    std::cout << array.at(2) << '\\n';\n}\n

    Output:

    \"third\"\n
    Example: (2) access specified object element

    The example below shows how object elements can be read and written using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"];\n\n    // write to nonexisting key\n    object[\"five\"][\"really\"][\"nested\"] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (2) access specified object element (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"] << '\\n';\n}\n

    Output:

    2\n
    Example: (3) access specified object element using string_view

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <iomanip>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << \"\\n\\n\";\n\n    // change element with key \"three\"\n    object[\"three\"sv] = 3;\n\n    // output changed array\n    std::cout << std::setw(4) << object << \"\\n\\n\";\n\n    // mention nonexisting key\n    object[\"four\"sv];\n\n    // write to nonexisting key\n    object[\"five\"sv][\"really\"sv][\"nested\"sv] = true;\n\n    // output changed object\n    std::cout << std::setw(4) << object << '\\n';\n}\n

    Output:

    2\n\n{\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n\n{\n    \"five\": {\n        \"really\": {\n            \"nested\": true\n        }\n    },\n    \"four\": null,\n    \"one\": 1,\n    \"three\": 3,\n    \"two\": 2\n}\n
    Example: (3) access specified object element using string_view (const)

    The example below shows how object elements can be read using the [] operator.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object\n    const json object =\n    {\n        {\"one\", 1}, {\"two\", 2}, {\"three\", 2.9}\n    };\n\n    // output element with key \"two\"\n    std::cout << object[\"two\"sv] << '\\n';\n}\n

    Output:

    2\n
    Example: (4) access specified element via JSON Pointer

    The example below shows how values can be read and written using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n\n    // writing access\n\n    // change the string\n    j[\"/string\"_json_pointer] = \"bar\";\n    // output the changed string\n    std::cout << j[\"string\"] << '\\n';\n\n    // \"change\" a nonexisting object entry\n    j[\"/boolean\"_json_pointer] = true;\n    // output the changed object\n    std::cout << j << '\\n';\n\n    // change an array element\n    j[\"/array/1\"_json_pointer] = 21;\n    // \"change\" an array element with nonexisting index\n    j[\"/array/4\"_json_pointer] = 44;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n\n    // \"change\" the array element past the end\n    j[\"/array/-\"_json_pointer] = 55;\n    // output the changed array\n    std::cout << j[\"array\"] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n\"bar\"\n{\"array\":[1,2],\"boolean\":true,\"number\":1,\"string\":\"bar\"}\n[1,21,null,null,44]\n[1,21,null,null,44,55]\n
    Example: (4) access specified element via JSON Pointer (const)

    The example below shows how values can be read using JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    const json j =\n    {\n        {\"number\", 1}, {\"string\", \"foo\"}, {\"array\", {1, 2}}\n    };\n\n    // read-only access\n\n    // output element with JSON pointer \"/number\"\n    std::cout << j[\"/number\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/string\"\n    std::cout << j[\"/string\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array\"\n    std::cout << j[\"/array\"_json_pointer] << '\\n';\n    // output element with JSON pointer \"/array/1\"\n    std::cout << j[\"/array/1\"_json_pointer] << '\\n';\n}\n

    Output:

    1\n\"foo\"\n[1,2]\n2\n
    "},{"location":"api/basic_json/operator%5B%5D/#see-also","title":"See also","text":"
    • documentation on unchecked access
    • documentation on runtime assertions
    • see at for access by reference with range checking
    • see value for access with default value
    "},{"location":"api/basic_json/operator%5B%5D/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0.
    2. Added in version 1.0.0. Added overloads for T* key in version 1.1.0. Removed overloads for T* key (replaced by 3) in version 3.11.0.
    3. Added in version 3.11.0.
    4. Added in version 2.0.0.
    "},{"location":"api/basic_json/operator_ValueType/","title":"nlohmann::basic_json::operator ValueType","text":"
    template<typename ValueType>\nJSON_EXPLICIT operator ValueType() const;\n

    Implicit type conversion between the JSON value and a compatible value. The call is realized by calling get(). See Notes for the meaning of JSON_EXPLICIT.

    "},{"location":"api/basic_json/operator_ValueType/#template-parameters","title":"Template parameters","text":"ValueType the value type to return"},{"location":"api/basic_json/operator_ValueType/#return-value","title":"Return value","text":"

    copy of the JSON value, converted to ValueType

    "},{"location":"api/basic_json/operator_ValueType/#exceptions","title":"Exceptions","text":"

    Depends on what json_serializer<ValueType> from_json() method throws

    "},{"location":"api/basic_json/operator_ValueType/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value.

    "},{"location":"api/basic_json/operator_ValueType/#notes","title":"Notes","text":"

    Definition of JSON_EXPLICIT

    By default JSON_EXPLICIT is defined to the empty string, so the signature is:

    template<typename ValueType>\noperator ValueType() const;\n

    If JSON_USE_IMPLICIT_CONVERSIONS is set to 0, JSON_EXPLICIT is defined to explicit:

    template<typename ValueType>\nexplicit operator ValueType() const;\n

    That is, implicit conversions can be switched off by defining JSON_USE_IMPLICIT_CONVERSIONS to 0.

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library. That is, JSON_EXPLICIT will be set to explicit by default.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"api/basic_json/operator_ValueType/#examples","title":"Examples","text":"Example

    The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard std::vector<short>, (3) A JSON object can be converted to C++ associative containers such as std::unordered_map<std::string, json>.

    #include <iostream>\n#include <unordered_map>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value with different types\n    json json_types =\n    {\n        {\"boolean\", true},\n        {\n            \"number\", {\n                {\"integer\", 42},\n                {\"floating-point\", 17.23}\n            }\n        },\n        {\"string\", \"Hello, world!\"},\n        {\"array\", {1, 2, 3, 4, 5}},\n        {\"null\", nullptr}\n    };\n\n    // use implicit conversions\n    bool v1 = json_types[\"boolean\"];\n    int v2 = json_types[\"number\"][\"integer\"];\n    short v3 = json_types[\"number\"][\"integer\"];\n    float v4 = json_types[\"number\"][\"floating-point\"];\n    int v5 = json_types[\"number\"][\"floating-point\"];\n    std::string v6 = json_types[\"string\"];\n    std::vector<short> v7 = json_types[\"array\"];\n    std::unordered_map<std::string, json> v8 = json_types;\n\n    // print the conversion results\n    std::cout << v1 << '\\n';\n    std::cout << v2 << ' ' << v3 << '\\n';\n    std::cout << v4 << ' ' << v5 << '\\n';\n    std::cout << v6 << '\\n';\n\n    for (auto i : v7)\n    {\n        std::cout << i << ' ';\n    }\n    std::cout << \"\\n\\n\";\n\n    for (auto i : v8)\n    {\n        std::cout << i.first << \": \" << i.second << '\\n';\n    }\n\n    // example for an exception\n    try\n    {\n        bool v1 = json_types[\"string\"];\n    }\n    catch (const json::type_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    1\n42 42\n17.23 17\nHello, world!\n1 2 3 4 5 \n\nstring: \"Hello, world!\"\nnumber: {\"floating-point\":17.23,\"integer\":42}\nnull: null\nboolean: true\narray: [1,2,3,4,5]\n[json.exception.type_error.302] type must be boolean, but is string\n
    "},{"location":"api/basic_json/operator_ValueType/#version-history","title":"Version history","text":"
    • Since version 1.0.0.
    • Macros JSON_EXPLICIT/JSON_USE_IMPLICIT_CONVERSIONS added in version 3.9.0.
    "},{"location":"api/basic_json/operator_eq/","title":"nlohmann::basic_json::operator==","text":"
    // until C++20\nbool operator==(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator==(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator==(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator==(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator==(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for equality according to the following rules:

      • Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective operator==.
      • Integer and floating-point numbers are automatically converted before comparison.
    2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_eq/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/basic_json/operator_eq/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_eq/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_eq/#notes","title":"Notes","text":"

    Comparing special values

    • NaN values are unordered within the domain of numbers. The following comparisons all yield false:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    • JSON null values are all equal.
    • Discarded values never compare equal to themselves.

    Comparing floating-point numbers

    Floating-point numbers inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default. To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n

    Or you can self-defined operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n            // other cases remain the same with the original\n            ...\n    }\n...\n}\n

    Comparing different basic_json specializations

    Comparing different basic_json specializations can have surprising effects. For instance, the result of comparing the JSON objects

    {\n   \"version\": 1,\n   \"type\": \"integer\"\n}\n

    and

    {\n   \"type\": \"integer\",\n   \"version\": 1\n}\n

    depends on whether nlohmann::json or nlohmann::ordered_json is used:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    nlohmann::json uj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::json uj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    nlohmann::ordered_json oj1 = {{\"version\", 1}, {\"type\", \"integer\"}};\n    nlohmann::ordered_json oj2 = {{\"type\", \"integer\"}, {\"version\", 1}};\n\n    std::cout << std::boolalpha << (uj1 == uj2) << '\\n' << (oj1 == oj2) << std::endl;\n}\n

    Output:

    true\nfalse\n
    "},{"location":"api/basic_json/operator_eq/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 == array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 == object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 == number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 == string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} true\n17 == 17.0 true\n\"foo\" == \"bar\" false\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" == nullptr \" << (array == nullptr) << '\\n';\n    std::cout << object << \" == nullptr \" << (object == nullptr) << '\\n';\n    std::cout << number << \" == nullptr \" << (number == nullptr) << '\\n';\n    std::cout << string << \" == nullptr \" << (string == nullptr) << '\\n';\n    std::cout << null << \" == nullptr \" << (null == nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] == nullptr false\n{\"A\":\"a\",\"B\":\"b\"} == nullptr false\n17 == nullptr false\n\"foo\" == nullptr false\nnull == nullptr true\n
    "},{"location":"api/basic_json/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_ge/","title":"nlohmann::basic_json::operator>=","text":"
    // until C++20\nbool operator>=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs < rhs) (see operator<).
    2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ge/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ge/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ge/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_ge/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ge/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ge/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_ge/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" >= \" << array_2 << \" \" << (array_1 >= array_2) << '\\n';\n    std::cout << object_1 << \" >= \" << object_2 << \" \" << (object_1 >= object_2) << '\\n';\n    std::cout << number_1 << \" >= \" << number_2 << \" \" << (number_1 >= number_2) << '\\n';\n    std::cout << string_1 << \" >= \" << string_2 << \" \" << (string_1 >= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] >= [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} >= {\"A\":\"a\",\"B\":\"b\"} true\n17 >= 17.0000000000001 false\n\"foo\" >= \"bar\" true\n
    "},{"location":"api/basic_json/operator_ge/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_ge/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_gt/","title":"nlohmann::basic_json::operator>","text":"
    // until C++20\nbool operator>(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator>(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator>(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is greater than another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs <= rhs) (see operator<=).
    2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_gt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_gt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_gt/#return-value","title":"Return value","text":"

    whether lhs is greater than rhs

    "},{"location":"api/basic_json/operator_gt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_gt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_gt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_gt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" > \" << array_2 << \" \" << (array_1 > array_2) << '\\n';\n    std::cout << object_1 << \" > \" << object_2 << \" \" << (object_1 > object_2) << '\\n';\n    std::cout << number_1 << \" > \" << number_2 << \" \" << (number_1 > number_2) << '\\n';\n    std::cout << string_1 << \" > \" << string_2 << \" \" << (string_1 > string_2) << '\\n';\n}\n

    Output:

    [1,2,3] > [1,2,4] false\n{\"A\":\"a\",\"B\":\"b\"} > {\"A\":\"a\",\"B\":\"b\"} false\n17 > 17.0000000000001 false\n\"foo\" > \"bar\" true\n
    "},{"location":"api/basic_json/operator_gt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_gt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_le/","title":"nlohmann::basic_json::operator<=","text":"
    // until C++20\nbool operator<=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than or equal to another JSON value rhs according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(rhs < lhs) (see operator<).
    2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_le/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_le/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_le/#return-value","title":"Return value","text":"

    whether lhs is less than or equal to rhs

    "},{"location":"api/basic_json/operator_le/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_le/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_le/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_le/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" <= \" << array_2 << \" \" << (array_1 <= array_2) << '\\n';\n    std::cout << object_1 << \" <= \" << object_2 << \" \" << (object_1 <= object_2) << '\\n';\n    std::cout << number_1 << \" <= \" << number_2 << \" \" << (number_1 <= number_2) << '\\n';\n    std::cout << string_1 << \" <= \" << string_2 << \" \" << (string_1 <= string_2) << '\\n';\n}\n

    Output:

    [1,2,3] <= [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} <= {\"A\":\"a\",\"B\":\"b\"} true\n17 <= 17.0000000000001 true\n\"foo\" <= \"bar\" false\n
    "},{"location":"api/basic_json/operator_le/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_le/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_lt/","title":"nlohmann::basic_json::operator<","text":"
    // until C++20\nbool operator<(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator<(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator<(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n
    1. Compares whether one JSON value lhs is less than another JSON value rhs according to the following rules:

      • If either operand is discarded, the comparison yields false.
      • If both operands have the same type, the values are compared using their respective operator<.
      • Integer and floating-point numbers are automatically converted before comparison.
      • In case lhs and rhs have different types, the values are ignored and the order of the types is considered, which is:
        1. null
        2. boolean
        3. number (all types)
        4. object
        5. array
        6. string
        7. binary For instance, any boolean value is considered less than any string.
    2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_lt/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_lt/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_lt/#return-value","title":"Return value","text":"

    whether lhs is less than rhs

    "},{"location":"api/basic_json/operator_lt/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_lt/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_lt/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator<=>.

    "},{"location":"api/basic_json/operator_lt/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.0000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" == \" << array_2 << \" \" << (array_1 < array_2) << '\\n';\n    std::cout << object_1 << \" == \" << object_2 << \" \" << (object_1 < object_2) << '\\n';\n    std::cout << number_1 << \" == \" << number_2 << \" \" << (number_1 < number_2) << '\\n';\n    std::cout << string_1 << \" == \" << string_2 << \" \" << (string_1 < string_2) << '\\n';\n}\n

    Output:

    [1,2,3] == [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} == {\"A\":\"a\",\"B\":\"b\"} false\n17 == 17.0000000000001 true\n\"foo\" == \"bar\" false\n
    "},{"location":"api/basic_json/operator_lt/#see-also","title":"See also","text":"
    • operator<=> comparison: 3-way
    "},{"location":"api/basic_json/operator_lt/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0.
    "},{"location":"api/basic_json/operator_ne/","title":"nlohmann::basic_json::operator!=","text":"
    // until C++20\nbool operator!=(const_reference lhs, const_reference rhs) noexcept;   // (1)\n\ntemplate<typename ScalarType>\nbool operator!=(const_reference lhs, const ScalarType rhs) noexcept;  // (2)\n\ntemplate<typename ScalarType>\nbool operator!=(ScalarType lhs, const const_reference rhs) noexcept;  // (2)\n\n// since C++20\nclass basic_json {\n    bool operator!=(const_reference rhs) const noexcept;              // (1)\n\n    template<typename ScalarType>\n    bool operator!=(ScalarType rhs) const noexcept;                   // (2)\n};\n
    1. Compares two JSON values for inequality according to the following rules:

      • The comparison always yields false if (1) either operand is discarded, or (2) either operand is NaN and the other operand is either NaN or any other number.
      • Otherwise, returns the result of !(lhs == rhs) (until C++20) or !(*this == rhs) (since C++20).
    2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1.

    "},{"location":"api/basic_json/operator_ne/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/basic_json/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/basic_json/operator_ne/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_ne/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_ne/#notes","title":"Notes","text":"

    Comparing NaN

    NaN values are unordered within the domain of numbers. The following comparisons all yield false: 1. Comparing a NaN with itself. 2. Comparing a NaN with another NaN. 3. Comparing a NaN and any other number.

    "},{"location":"api/basic_json/operator_ne/#examples","title":"Examples","text":"Example

    The example demonstrates comparing several JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number_1 = 17;\n    json number_2 = 17.000000000000001L;\n    json string_1 = \"foo\";\n    json string_2 = \"bar\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array_1 << \" != \" << array_2 << \" \" << (array_1 != array_2) << '\\n';\n    std::cout << object_1 << \" != \" << object_2 << \" \" << (object_1 != object_2) << '\\n';\n    std::cout << number_1 << \" != \" << number_2 << \" \" << (number_1 != number_2) << '\\n';\n    std::cout << string_1 << \" != \" << string_2 << \" \" << (string_1 != string_2) << '\\n';\n}\n

    Output:

    [1,2,3] != [1,2,4] true\n{\"A\":\"a\",\"B\":\"b\"} != {\"A\":\"a\",\"B\":\"b\"} false\n17 != 17.0 false\n\"foo\" != \"bar\" true\n
    Example

    The example demonstrates comparing several JSON types against the null pointer (JSON null).

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create several JSON values\n    json array = {1, 2, 3};\n    json object = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json number = 17;\n    json string = \"foo\";\n    json null;\n\n    // output values and comparisons\n    std::cout << std::boolalpha;\n    std::cout << array << \" != nullptr \" << (array != nullptr) << '\\n';\n    std::cout << object << \" != nullptr \" << (object != nullptr) << '\\n';\n    std::cout << number << \" != nullptr \" << (number != nullptr) << '\\n';\n    std::cout << string << \" != nullptr \" << (string != nullptr) << '\\n';\n    std::cout << null << \" != nullptr \" << (null != nullptr) << '\\n';\n}\n

    Output:

    [1,2,3] != nullptr true\n{\"A\":\"a\",\"B\":\"b\"} != nullptr true\n17 != nullptr true\n\"foo\" != nullptr true\nnull != nullptr false\n
    "},{"location":"api/basic_json/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0.
    "},{"location":"api/basic_json/operator_spaceship/","title":"nlohmann::basic_json::operator<=>","text":"
    // since C++20\nclass basic_json {\n    std::partial_ordering operator<=>(const_reference rhs) const noexcept;  // (1)\n\n    template<typename ScalarType>\n    std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2)\n};\n
    1. 3-way compares two JSON values producing a result of type std::partial_ordering according to the following rules:

      • Two JSON values compare with a result of std::partial_ordering::unordered if either value is discarded.
      • If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective operator<=>.
      • Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective operator<=>. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value.
      • Otherwise, yields a result by comparing the type (see value_t).
    2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1).

    "},{"location":"api/basic_json/operator_spaceship/#template-parameters","title":"Template parameters","text":"ScalarType a scalar type according to std::is_scalar<ScalarType>::value"},{"location":"api/basic_json/operator_spaceship/#parameters","title":"Parameters","text":"rhs (in) second value to consider"},{"location":"api/basic_json/operator_spaceship/#return-value","title":"Return value","text":"

    the std::partial_ordering of the 3-way comparison of *this and rhs

    "},{"location":"api/basic_json/operator_spaceship/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/operator_spaceship/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/operator_spaceship/#notes","title":"Notes","text":"

    Comparing NaN

    • NaN values are unordered within the domain of numbers. The following comparisons all yield std::partial_ordering::unordered:
      1. Comparing a NaN with itself.
      2. Comparing a NaN with another NaN.
      3. Comparing a NaN and any other number.
    "},{"location":"api/basic_json/operator_spaceship/#examples","title":"Examples","text":"Example: (1) comparing JSON values

    The example demonstrates comparing several JSON values.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    // create several JSON values\n    json array_1 = {1, 2, 3};\n    json array_2 = {1, 2, 4};\n    json object_1 = {{\"A\", \"a\"}, {\"B\", \"b\"}};\n    json object_2 = {{\"B\", \"b\"}, {\"A\", \"a\"}};\n    json number = 17;\n    json string = \"foo\";\n    json discarded = json(json::value_t::discarded);\n\n    // output values and comparisons\n    std::cout << array_1 << \" <=> \" << array_2 << \" := \" << to_string(array_1 <=> array_2) << '\\n'; // *NOPAD*\n    std::cout << object_1 << \" <=> \" << object_2 << \" := \" << to_string(object_1 <=> object_2) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << number << \" := \" << to_string(string <=> number) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << discarded << \" := \" << to_string(string <=> discarded) << '\\n'; // *NOPAD*\n}\n

    Output:

    [1,2,3] <=> [1,2,4] := less\n{\"A\":\"a\",\"B\":\"b\"} <=> {\"A\":\"a\",\"B\":\"b\"} := equivalent\n\"foo\" <=> 17 := greater\n\"foo\" <=> <discarded> := unordered\n
    Example: (2) comparing JSON values and scalars

    The example demonstrates comparing several JSON values and scalars.

    #include <compare>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nconst char* to_string(const std::partial_ordering& po)\n{\n    if (std::is_lt(po))\n    {\n        return \"less\";\n    }\n    else if (std::is_gt(po))\n    {\n        return \"greater\";\n    }\n    else if (std::is_eq(po))\n    {\n        return \"equivalent\";\n    }\n    return \"unordered\";\n}\n\nint main()\n{\n    using float_limits = std::numeric_limits<json::number_float_t>;\n    constexpr auto nan = float_limits::quiet_NaN();\n\n    // create several JSON values\n    json boolean = false;\n    json number = 17;\n    json string = \"17\";\n\n    // output values and comparisons\n    std::cout << std::boolalpha << std::fixed;\n    std::cout << boolean << \" <=> \" << true << \" := \" << to_string(boolean <=> true) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << 17.0 << \" := \" << to_string(number <=> 17.0) << '\\n'; // *NOPAD*\n    std::cout << number << \" <=> \" << nan << \" := \" << to_string(number <=> nan) << '\\n'; // *NOPAD*\n    std::cout << string << \" <=> \" << 17 << \" := \" << to_string(string <=> 17) << '\\n'; // *NOPAD*\n}\n

    Output:

    false <=> true := less\n17 <=> 17.000000 := equivalent\n17 <=> nan := unordered\n\"17\" <=> 17 := greater\n
    "},{"location":"api/basic_json/operator_spaceship/#see-also","title":"See also","text":"
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • operator< - comparison: less than
    • operator<= - comparison: less than or equal
    • operator> - comparison: greater than
    • operator>= - comparison: greater than or equal
    "},{"location":"api/basic_json/operator_spaceship/#version-history","title":"Version history","text":"
    1. Added in version 3.11.0.
    2. Added in version 3.11.0.
    "},{"location":"api/basic_json/operator_value_t/","title":"nlohmann::basic_json::operator value_t","text":"
    constexpr operator value_t() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/operator_value_t/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/operator_value_t/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/operator_value_t/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/operator_value_t/#examples","title":"Examples","text":"Example

    The following code exemplifies operator value_t() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call operator value_t()\n    json::value_t t_null = j_null;\n    json::value_t t_boolean = j_boolean;\n    json::value_t t_number_integer = j_number_integer;\n    json::value_t t_number_unsigned = j_number_unsigned;\n    json::value_t t_number_float = j_number_float;\n    json::value_t t_object = j_object;\n    json::value_t t_array = j_array;\n    json::value_t t_string = j_string;\n\n    // print types\n    std::cout << std::boolalpha;\n    std::cout << (t_null == json::value_t::null) << '\\n';\n    std::cout << (t_boolean == json::value_t::boolean) << '\\n';\n    std::cout << (t_number_integer == json::value_t::number_integer) << '\\n';\n    std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\\n';\n    std::cout << (t_number_float == json::value_t::number_float) << '\\n';\n    std::cout << (t_object == json::value_t::object) << '\\n';\n    std::cout << (t_array == json::value_t::array) << '\\n';\n    std::cout << (t_string == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/operator_value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/other_error/","title":"nlohmann::basic_json::other_error","text":"
    class other_error : public exception;\n

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx (see list of other errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_other_error fill:#CCCCFF
    "},{"location":"api/basic_json/other_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/other_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/other_error/#examples","title":"Examples","text":"Example

    The following code shows how a other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"api/basic_json/other_error/#see-also","title":"See also","text":"
    • List of other errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    "},{"location":"api/basic_json/other_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/out_of_range/","title":"nlohmann::basic_json::out_of_range","text":"
    class out_of_range : public exception;\n

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx (see list of out-of-range errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_out_of_range fill:#CCCCFF
    "},{"location":"api/basic_json/out_of_range/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/out_of_range/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/out_of_range/#examples","title":"Examples","text":"Example

    The following code shows how a out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"api/basic_json/out_of_range/#see-also","title":"See also","text":"
    • List of out-of-range errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/out_of_range/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse/","title":"nlohmann::basic_json::parse","text":"
    // (1)\ntemplate<typename InputType>\nstatic basic_json parse(InputType&& i,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n\n// (2)\ntemplate<typename IteratorType>\nstatic basic_json parse(IteratorType first, IteratorType last,\n                        const parser_callback_t cb = nullptr,\n                        const bool allow_exceptions = true,\n                        const bool ignore_comments = false);\n
    1. Deserialize from a compatible input.
    2. Deserialize from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    "},{"location":"api/basic_json/parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer (throws if null)
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters (throws if null)
    • a std::string
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType

    a compatible iterator type, for instance.

    • a pair of std::string::iterator or std::vector<std::uint8_t>::iterator
    • a pair of pointers such as ptr and ptr + len
    "},{"location":"api/basic_json/parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. cb (in) a parser callback function of type parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) allow_exceptions (in) whether to throw exceptions in case of a parse error (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/parse/#return-value","title":"Return value","text":"

    Deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded. The latter can be checked with is_discarded.

    "},{"location":"api/basic_json/parse/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/parse/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.101 in case of an unexpected token, or empty input like a null FILE* or char* pointer.
    • Throws parse_error.102 if to_unicode fails or surrogate error.
    • Throws parse_error.103 if to_unicode fails.
    "},{"location":"api/basic_json/parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function cb or reading from (1) the input i or (2) the iterator range [first, last] has a super-linear complexity.

    "},{"location":"api/basic_json/parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/parse/#examples","title":"Examples","text":"Parsing from a character array

    The example below demonstrates the parse() function reading from an array.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    char text[] = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a string

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from an input stream

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // fill a stream with JSON text\n    std::stringstream ss;\n    ss << text;\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ss);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // fill a stream with JSON text\n    ss.clear();\n    ss << text;\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(ss, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    Parsing from a contiguous container

    The example below demonstrates the parse() function reading from a contiguous container.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as std::vector\n    std::vector<std::uint8_t> text = {'[', '1', ',', '2', ',', '3', ']', '\\0'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from a non null-terminated string

    The example below demonstrates the parse() function reading from a string that is not null-terminated.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given as string that is not null-terminated\n    const char* ptr = \"[1,2,3]another value\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(ptr, ptr + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Parsing from an iterator pair

    The example below demonstrates the parse() function reading from an iterator pair.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text given an input with other values\n    std::vector<std::uint8_t> input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'};\n\n    // parse and serialize JSON\n    json j_complete = json::parse(input.begin(), input.begin() + 7);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n}\n

    Output:

    [\n    1,\n    2,\n    3\n]\n
    Effect of allow_exceptions parameter

    The example below demonstrates the effect of the allow_exceptions parameter in the \u00b4parse()` function.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // an invalid JSON text\n    std::string text = R\"(\n    {\n        \"key\": \"value without closing quotes\n    }\n    )\";\n\n    // parse with exceptions\n    try\n    {\n        json j = json::parse(text);\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    // parse without exceptions\n    json j = json::parse(text, nullptr, false);\n\n    if (j.is_discarded())\n    {\n        std::cout << \"the input is invalid JSON\" << std::endl;\n    }\n    else\n    {\n        std::cout << \"the input is valid JSON: \" << j << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"value without closing quotes<U+000A>'\nthe input is invalid JSON\n
    "},{"location":"api/basic_json/parse/#see-also","title":"See also","text":"
    • accept - check if the input is valid JSON
    • operator>> - deserialize from stream
    "},{"location":"api/basic_json/parse/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Overload for contiguous containers (1) added in version 2.0.3.
    • Ignoring comments via ignore_comments added in version 3.9.0.
    • Changed runtime assertion in case of FILE* null pointers to exception in version 3.11.4.

    Deprecation

    Overload (2) replaces calls to parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like parse({ptr, ptr+len}, ...); with parse(ptr, ptr+len, ...);.

    You should be warned by your compiler with a -Wdeprecated-declarations warning if you are using a deprecated function.

    "},{"location":"api/basic_json/parse_error/","title":"nlohmann::basic_json::parse_error","text":"
    class parse_error : public exception;\n

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.

    Member byte holds the byte index of the last read character in the input file (see note below).

    Exceptions have ids 1xx (see list of parse errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_parse_error fill:#CCCCFF
    "},{"location":"api/basic_json/parse_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/parse_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    • byte - byte index of the parse error
    "},{"location":"api/basic_json/parse_error/#notes","title":"Notes","text":"

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats.

    "},{"location":"api/basic_json/parse_error/#examples","title":"Examples","text":"Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"api/basic_json/parse_error/#see-also","title":"See also","text":"
    • List of parse errors
    • invalid_iterator for exceptions indicating errors with iterators
    • type_error for exceptions indicating executing a member function with a wrong type
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/parse_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/parse_event_t/","title":"nlohmann::basic_json::parse_event_t","text":"
    enum class parse_event_t : std::uint8_t {\n    object_start,\n    object_end,\n    array_start,\n    array_end,\n    key,\n    value\n};\n

    The parser callback distinguishes the following events:

    • object_start: the parser read { and started to process a JSON object
    • key: the parser read a key of a value in an object
    • object_end: the parser read } and finished processing a JSON object
    • array_start: the parser read [ and started to process a JSON array
    • array_end: the parser read ] and finished processing a JSON array
    • value: the parser finished reading a JSON value
    "},{"location":"api/basic_json/parse_event_t/#examples","title":"Examples","text":""},{"location":"api/basic_json/parse_event_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/parser_callback_t/","title":"nlohmann::basic_json::parser_callback_t","text":"
    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value

    Discarding a value (i.e., returning false) has different effects depending on the context in which function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    "},{"location":"api/basic_json/parser_callback_t/#parameters","title":"Parameters","text":"depth (in) the depth of the recursion during parsing event (in) an event of type parse_event_t indicating the context in the callback function has been called parsed (in, out) the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events"},{"location":"api/basic_json/parser_callback_t/#return-value","title":"Return value","text":"

    Whether the JSON value which called the function during parsing should be kept (true) or not (false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

    "},{"location":"api/basic_json/parser_callback_t/#examples","title":"Examples","text":"Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"api/basic_json/parser_callback_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/patch/","title":"nlohmann::basic_json::patch","text":"
    basic_json patch(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    "},{"location":"api/basic_json/patch/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch/#return-value","title":"Return value","text":"

    patched document

    "},{"location":"api/basic_json/patch/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/patch/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch/#notes","title":"Notes","text":"

    The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value.

    "},{"location":"api/basic_json/patch/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch_inplace applies a JSON Patch without creating a copy of the document
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/patch_inplace/","title":"nlohmann::basic_json::patch_inplace","text":"
    void patch_inplace(const basic_json& json_patch) const;\n

    JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.

    "},{"location":"api/basic_json/patch_inplace/#parameters","title":"Parameters","text":"json_patch (in) JSON patch document"},{"location":"api/basic_json/patch_inplace/#exception-safety","title":"Exception safety","text":"

    No guarantees, value may be corrupted by an unsuccessful patch operation.

    "},{"location":"api/basic_json/patch_inplace/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.104 if the JSON patch does not consist of an array of objects.
    • Throws parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: \"operation add must have member path\".
    • Throws out_of_range.401 if an array index is out of range.
    • Throws out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: \"key baz not found\".
    • Throws out_of_range.405 if JSON pointer has no parent (\"add\", \"remove\", \"move\")
    • Throws out_of_range.501 if \"test\" operation was unsuccessful.
    "},{"location":"api/basic_json/patch_inplace/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected.

    "},{"location":"api/basic_json/patch_inplace/#notes","title":"Notes","text":"

    Unlike patch, patch_inplace applies the operation \"in place\" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception.

    "},{"location":"api/basic_json/patch_inplace/#examples","title":"Examples","text":"Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // output original document\n    std::cout << \"Before\\n\" << std::setw(4) << doc << std::endl;\n\n    // apply the patch\n    doc.patch_inplace(patch);\n\n    // output patched document\n    std::cout << \"\\nAfter\\n\" << std::setw(4) << doc << std::endl;\n}\n

    Output:

    Before\n{\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\nAfter\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"api/basic_json/patch_inplace/#see-also","title":"See also","text":"
    • RFC 6902 (JSON Patch)
    • RFC 6901 (JSON Pointer)
    • patch applies a JSON Merge Patch
    • merge_patch applies a JSON Merge Patch
    "},{"location":"api/basic_json/patch_inplace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/basic_json/push_back/","title":"nlohmann::basic_json::push_back","text":"
    // (1)\nvoid push_back(basic_json&& val);\nvoid push_back(const basic_json& val);\n\n// (2)\nvoid push_back(const typename object_t::value_type& val);\n\n// (3)\nvoid push_back(initializer_list_t init);\n
    1. Appends the given element val to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending val.

    2. Inserts the given element val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting val.

    3. This function allows using push_back with an initializer list. In case

      1. the current value is an object,
      2. the initializer list init contains only two elements, and
      3. the first element of init is a string,

      init is converted into an object element and added using push_back(const typename object_t::value_type&). Otherwise, init is converted to a JSON value and added using push_back(basic_json&&).

    "},{"location":"api/basic_json/push_back/#iterator-invalidation","title":"Iterator invalidation","text":"

    For all cases where an element is added to an array, a reallocation can happen, in which case all iterators (including the end() iterator) and all references to the elements are invalidated. Otherwise, only the end() iterator is invalidated.

    For ordered_json, also adding an element to an object can yield a reallocation which again invalidates all iterators and all references.

    "},{"location":"api/basic_json/push_back/#parameters","title":"Parameters","text":"val (in) the value to add to the JSON array/object init (in) an initializer list"},{"location":"api/basic_json/push_back/#exceptions","title":"Exceptions","text":"

    All functions can throw the following exception: - Throws type_error.308 when called on a type other than JSON array or null; example: \"cannot use push_back() with number\"

    "},{"location":"api/basic_json/push_back/#complexity","title":"Complexity","text":"
    1. Amortized constant.
    2. Logarithmic in the size of the container, O(log(size())).
    3. Linear in the size of the initializer list init.
    "},{"location":"api/basic_json/push_back/#notes","title":"Notes","text":"

    (3) This function is required to resolve an ambiguous overload error, because pairs like {\"key\", \"value\"} can be both interpreted as object_t::value_type or std::initializer_list<basic_json>, see #235 for more information.

    "},{"location":"api/basic_json/push_back/#examples","title":"Examples","text":"Example: (1) add element to array

    The example shows how push_back() and += can be used to add elements to a JSON array. Note how the null value was silently converted to a JSON array.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json array = {1, 2, 3, 4, 5};\n    json null;\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    array.push_back(6);\n    array += 7;\n    null += \"first\";\n    null += \"second\";\n\n    // print values\n    std::cout << array << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    [1,2,3,4,5]\nnull\n[1,2,3,4,5,6,7]\n[\"first\",\"second\"]\n
    Example: (2) add element to object

    The example shows how push_back() and += can be used to add elements to a JSON object. Note how the null value was silently converted to a JSON object.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values\n    object.push_back(json::object_t::value_type(\"three\", 3));\n    object += json::object_t::value_type(\"four\", 4);\n    null += json::object_t::value_type(\"A\", \"a\");\n    null += json::object_t::value_type(\"B\", \"b\");\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n{\"A\":\"a\",\"B\":\"b\"}\n
    Example: (3) add to object from initializer list

    The example shows how initializer lists are treated as objects when possible.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json object = {{\"one\", 1}, {\"two\", 2}};\n    json null;\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // add values:\n    object.push_back({\"three\", 3});  // object is extended\n    object += {\"four\", 4};           // object is extended\n    null.push_back({\"five\", 5});     // null is converted to array\n\n    // print values\n    std::cout << object << '\\n';\n    std::cout << null << '\\n';\n\n    // would throw:\n    //object.push_back({1, 2, 3});\n}\n

    Output:

    {\"one\":1,\"two\":2}\nnull\n{\"four\":4,\"one\":1,\"three\":3,\"two\":2}\n[[\"five\",5]]\n
    "},{"location":"api/basic_json/push_back/#see-also","title":"See also","text":"
    • emplace_back add a value to an array
    • operator+= add a value to an array/object
    "},{"location":"api/basic_json/push_back/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 2.0.0.
    "},{"location":"api/basic_json/rbegin/","title":"nlohmann::basic_json::rbegin","text":"
    reverse_iterator rbegin() noexcept;\nconst_reverse_iterator rbegin() const noexcept;\n

    Returns an iterator to the reverse-beginning; that is, the last element.

    "},{"location":"api/basic_json/rbegin/#return-value","title":"Return value","text":"

    reverse iterator to the first element

    "},{"location":"api/basic_json/rbegin/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rbegin/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rbegin/#examples","title":"Examples","text":"Example

    The following code shows an example for rbegin().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-beginning\n    json::reverse_iterator it = array.rbegin();\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    5\n
    "},{"location":"api/basic_json/rbegin/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/rend/","title":"nlohmann::basic_json::rend","text":"
    reverse_iterator rend() noexcept;\nconst_reverse_iterator rend() const noexcept;\n

    Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior.

    "},{"location":"api/basic_json/rend/#return-value","title":"Return value","text":"

    reverse iterator to the element following the last element

    "},{"location":"api/basic_json/rend/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/rend/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/rend/#examples","title":"Examples","text":"Example

    The following code shows an example for eend().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create an array value\n    json array = {1, 2, 3, 4, 5};\n\n    // get an iterator to the reverse-end\n    json::reverse_iterator it = array.rend();\n\n    // increment the iterator to point to the first element\n    --it;\n\n    // serialize the element that the iterator points to\n    std::cout << *it << '\\n';\n}\n

    Output:

    1\n
    "},{"location":"api/basic_json/rend/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/sax_parse/","title":"nlohmann::basic_json::sax_parse","text":"
    // (1)\ntemplate <typename InputType, typename SAX>\nstatic bool sax_parse(InputType&& i,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n\n// (2)\ntemplate<class IteratorType, class SAX>\nstatic bool sax_parse(IteratorType first, IteratorType last,\n                      SAX* sax,\n                      input_format_t format = input_format_t::json,\n                      const bool strict = true,\n                      const bool ignore_comments = false);\n

    Read from input and generate SAX events

    1. Read from a compatible input.
    2. Read from a pair of character iterators

      The value_type of the iterator must be an integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32.

    The SAX event lister must follow the interface of json_sax.

    "},{"location":"api/basic_json/sax_parse/#template-parameters","title":"Template parameters","text":"InputType

    A compatible input, for instance:

    • an std::istream object
    • a FILE pointer
    • a C-style array of characters
    • a pointer to a null-terminated string of single byte characters
    • an object obj for which begin(obj) and end(obj) produces a valid pair of iterators.
    IteratorType Description SAX Description"},{"location":"api/basic_json/sax_parse/#parameters","title":"Parameters","text":"i (in) Input to parse from. sax (in) SAX event listener format (in) the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, input_format_t::json by default), see input_format_t for more information strict (in) whether the input has to be consumed completely (optional, true by default) ignore_comments (in) whether comments should be ignored and treated like whitespace (true) or yield a parse error (false); (optional, false by default) first (in) iterator to start of character range last (in) iterator to end of character range"},{"location":"api/basic_json/sax_parse/#return-value","title":"Return value","text":"

    return value of the last processed SAX event

    "},{"location":"api/basic_json/sax_parse/#exception-safety","title":"Exception safety","text":""},{"location":"api/basic_json/sax_parse/#complexity","title":"Complexity","text":"

    Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer sax has a super-linear complexity.

    "},{"location":"api/basic_json/sax_parse/#notes","title":"Notes","text":"

    A UTF-8 byte order mark is silently ignored.

    "},{"location":"api/basic_json/sax_parse/#examples","title":"Examples","text":"Example

    The example below demonstrates the sax_parse() function reading from string and processing the events with a user-defined SAX event consumer.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/basic_json/sax_parse/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Ignoring comments via ignore_comments added in version 3.9.0.

    Deprecation

    Overload (2) replaces calls to sax_parse with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like sax_parse({ptr, ptr+len}); with sax_parse(ptr, ptr+len);.

    "},{"location":"api/basic_json/size/","title":"nlohmann::basic_json::size","text":"
    size_type size() const noexcept;\n

    Returns the number of elements in a JSON value.

    "},{"location":"api/basic_json/size/#return-value","title":"Return value","text":"

    The return value depends on the different types and is defined as follows:

    Value type return value null 0 boolean 1 string 1 number 1 binary 1 object result of function object_t::size() array result of function array_t::size()"},{"location":"api/basic_json/size/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/basic_json/size/#complexity","title":"Complexity","text":"

    Constant, as long as array_t and object_t satisfy the Container concept; that is, their size() functions have constant complexity.

    "},{"location":"api/basic_json/size/#notes","title":"Notes","text":"

    This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is 1 in the case of a string.

    "},{"location":"api/basic_json/size/#examples","title":"Examples","text":"Example

    The following code calls size() on the different value types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = 17;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_object_empty(json::value_t::object);\n    json j_array = {1, 2, 4, 8, 16};\n    json j_array_empty(json::value_t::array);\n    json j_string = \"Hello, world\";\n\n    // call size()\n    std::cout << j_null.size() << '\\n';\n    std::cout << j_boolean.size() << '\\n';\n    std::cout << j_number_integer.size() << '\\n';\n    std::cout << j_number_float.size() << '\\n';\n    std::cout << j_object.size() << '\\n';\n    std::cout << j_object_empty.size() << '\\n';\n    std::cout << j_array.size() << '\\n';\n    std::cout << j_array_empty.size() << '\\n';\n    std::cout << j_string.size() << '\\n';\n}\n

    Output:

    0\n1\n1\n1\n2\n0\n5\n0\n1\n
    "},{"location":"api/basic_json/size/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended to return 1 for binary types in version 3.8.0.
    "},{"location":"api/basic_json/start_pos/","title":"nlohmann::basic_json::start_pos","text":"
    #if JSON_DIAGNOSTIC_POSITIONS\nconstexpr std::size_t start_pos() const noexcept;\n#endif\n

    Returns the position of the first character in the JSON string from which the value was parsed from.

    JSON type return value object position of the opening { array position of the opening [ string position of the opening \" number position of the first character boolean position of t for true and f for false null position of n"},{"location":"api/basic_json/start_pos/#return-value","title":"Return value","text":"

    the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

    "},{"location":"api/basic_json/start_pos/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/start_pos/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/start_pos/#notes","title":"Notes","text":"

    Note

    The function is only available if macro JSON_DIAGNOSTIC_POSITIONS has been defined to 1 before including the library header.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/basic_json/start_pos/#examples","title":"Examples","text":"Example
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/basic_json/start_pos/#see-also","title":"See also","text":"
    • end_pos to access the end position
    • JSON_DIAGNOSTIC_POSITIONS for an overview of the diagnostic positions
    "},{"location":"api/basic_json/start_pos/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/basic_json/std_hash/","title":"std::hash<nlohmann::basic_json>","text":"
    namespace std {\n    struct hash<nlohmann::basic_json>;\n}\n

    Return a hash value for a JSON object. The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc.

    "},{"location":"api/basic_json/std_hash/#examples","title":"Examples","text":"Example

    The example shows how to calculate hash values for different JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    std::cout << \"hash(null) = \" << std::hash<json> {}(json(nullptr)) << '\\n'\n              << \"hash(false) = \" << std::hash<json> {}(json(false)) << '\\n'\n              << \"hash(0) = \" << std::hash<json> {}(json(0)) << '\\n'\n              << \"hash(0U) = \" << std::hash<json> {}(json(0U)) << '\\n'\n              << \"hash(\\\"\\\") = \" << std::hash<json> {}(json(\"\")) << '\\n'\n              << \"hash({}) = \" << std::hash<json> {}(json::object()) << '\\n'\n              << \"hash([]) = \" << std::hash<json> {}(json::array()) << '\\n'\n              << \"hash({\\\"hello\\\": \\\"world\\\"}) = \" << std::hash<json> {}(\"{\\\"hello\\\": \\\"world\\\"}\"_json)\n              << std::endl;\n}\n

    Output:

    hash(null) = 2654435769\nhash(false) = 2654436030\nhash(0) = 2654436095\nhash(0U) = 2654436156\nhash(\"\") = 6142509191626859748\nhash({}) = 2654435832\nhash([]) = 2654435899\nhash({\"hello\": \"world\"}) = 4469488738203676328\n

    Note the output is platform-dependent.

    "},{"location":"api/basic_json/std_hash/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/std_swap/","title":"std::swap<basic_json>","text":"
    namespace std {\n    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2);\n}\n

    Exchanges the values of two JSON objects.

    "},{"location":"api/basic_json/std_swap/#parameters","title":"Parameters","text":"j1 (in, out) value to be replaced by j2 j2 (in, out) value to be replaced by j1"},{"location":"api/basic_json/std_swap/#possible-implementation","title":"Possible implementation","text":"
    void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2)\n{\n    j1.swap(j2);\n}\n
    "},{"location":"api/basic_json/std_swap/#examples","title":"Examples","text":"Example

    The following code shows how two values are swapped with std::swap.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j1 = {{\"one\", 1}, {\"two\", 2}};\n    json j2 = {1, 2, 4, 8, 16};\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << '\\n';\n\n    // swap values\n    std::swap(j1, j2);\n\n    std::cout << \"j1 = \" << j1 << \" | j2 = \" << j2 << std::endl;\n}\n

    Output:

    j1 = {\"one\":1,\"two\":2} | j2 = [1,2,4,8,16]\nj1 = [1,2,4,8,16] | j2 = {\"one\":1,\"two\":2}\n
    "},{"location":"api/basic_json/std_swap/#see-also","title":"See also","text":"
    • swap
    "},{"location":"api/basic_json/std_swap/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Extended for arbitrary basic_json types in version 3.10.5.
    "},{"location":"api/basic_json/string_t/","title":"nlohmann::basic_json::string_t","text":"
    using string_t = StringType;\n

    The type used to store JSON strings.

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"api/basic_json/string_t/#template-parameters","title":"Template parameters","text":"StringType the container to store strings (e.g., std::string). Note this container is used for keys/names in objects, see object_t."},{"location":"api/basic_json/string_t/#notes","title":"Notes","text":""},{"location":"api/basic_json/string_t/#default-type","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"api/basic_json/string_t/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"api/basic_json/string_t/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"api/basic_json/string_t/#storage","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"api/basic_json/string_t/#examples","title":"Examples","text":"Example

    The following code shows that string_t is by default, a typedef to std::string.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::boolalpha << std::is_same<std::string, json::string_t>::value << std::endl;\n}\n

    Output:

    true\n
    "},{"location":"api/basic_json/string_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/basic_json/swap/","title":"nlohmann::basic_json::swap","text":"
    // (1)\nvoid swap(reference other) noexcept;\n\n// (2)\nvoid swap(reference left, reference right) noexcept;\n\n// (3)\nvoid swap(array_t& other);\n\n// (4)\nvoid swap(object_t& other);\n\n// (5)\nvoid swap(string_t& other);\n\n// (6)\nvoid swap(binary_t& other);\n\n// (7)\nvoid swap(typename binary_t::container_type& other);\n
    1. Exchanges the contents of the JSON value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    2. Exchanges the contents of the JSON value from left with those of right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL.
    3. Exchanges the contents of a JSON array with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    4. Exchanges the contents of a JSON object with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    5. Exchanges the contents of a JSON string with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    6. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
    7. Exchanges the contents of a binary value with those of other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved.
    "},{"location":"api/basic_json/swap/#parameters","title":"Parameters","text":"other (in, out) value to exchange the contents with left (in, out) value to exchange the contents with right (in, out) value to exchange the contents with"},{"location":"api/basic_json/swap/#exceptions","title":"Exceptions","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. No-throw guarantee: this function never throws exceptions.
    3. Throws type_error.310 if called on JSON values other than arrays; example: \"cannot use swap() with boolean\"
    4. Throws type_error.310 if called on JSON values other than objects; example: \"cannot use swap() with boolean\"
    5. Throws type_error.310 if called on JSON values other than strings; example: \"cannot use swap() with boolean\"
    6. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    7. Throws type_error.310 if called on JSON values other than binaries; example: \"cannot use swap() with boolean\"
    "},{"location":"api/basic_json/swap/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/swap/#examples","title":"Examples","text":"Example: Swap JSON value (1, 2)

    The example below shows how JSON values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create two JSON values\n    json j1 = {1, 2, 3, 4, 5};\n    json j2 = {{\"pi\", 3.141592653589793}, {\"e\", 2.718281828459045}};\n\n    // swap the values\n    j1.swap(j2);\n\n    // output the values\n    std::cout << \"j1 = \" << j1 << '\\n';\n    std::cout << \"j2 = \" << j2 << '\\n';\n}\n

    Output:

    j1 = {\"e\":2.718281828459045,\"pi\":3.141592653589793}\nj2 = [1,2,3,4,5]\n
    Example: Swap array (3)

    The example below shows how arrays can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = {{\"array\", {1, 2, 3, 4}}};\n\n    // create an array_t\n    json::array_t array = {\"Snap\", \"Crackle\", \"Pop\"};\n\n    // swap the array stored in the JSON value\n    value[\"array\"].swap(array);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"array = \" << array << '\\n';\n}\n

    Output:

    value = {\"array\":[\"Snap\",\"Crackle\",\"Pop\"]}\narray = [1,2,3,4]\n
    Example: Swap object (4)

    The example below shows how objects can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { {\"translation\", {{\"one\", \"eins\"}, {\"two\", \"zwei\"}}} };\n\n    // create an object_t\n    json::object_t object = {{\"cow\", \"Kuh\"}, {\"dog\", \"Hund\"}};\n\n    // swap the object stored in the JSON value\n    value[\"translation\"].swap(object);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"object = \" << object << '\\n';\n}\n

    Output:

    value = {\"translation\":{\"cow\":\"Kuh\",\"dog\":\"Hund\"}}\nobject = {\"one\":\"eins\",\"two\":\"zwei\"}\n
    Example: Swap string (5)

    The example below shows how strings can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON value\n    json value = { \"the good\", \"the bad\", \"the ugly\" };\n\n    // create string_t\n    json::string_t string = \"the fast\";\n\n    // swap the object stored in the JSON value\n    value[1].swap(string);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"string = \" << string << '\\n';\n}\n

    Output:

    value = [\"the good\",\"the fast\",\"the ugly\"]\nstring = the bad\n
    Example: Swap string (6)

    The example below shows how binary values can be swapped with swap().

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a binary value\n    json value = json::binary({1, 2, 3});\n\n    // create a binary_t\n    json::binary_t binary = {{4, 5, 6}};\n\n    // swap the object stored in the JSON value\n    value.swap(binary);\n\n    // output the values\n    std::cout << \"value = \" << value << '\\n';\n    std::cout << \"binary = \" << json(binary) << '\\n';\n}\n

    Output:

    value = {\"bytes\":[4,5,6],\"subtype\":null}\nbinary = {\"bytes\":[1,2,3],\"subtype\":null}\n
    "},{"location":"api/basic_json/swap/#see-also","title":"See also","text":"
    • std::swap<basic_json>
    "},{"location":"api/basic_json/swap/#version-history","title":"Version history","text":"
    1. Since version 1.0.0.
    2. Since version 1.0.0.
    3. Since version 1.0.0.
    4. Since version 1.0.0.
    5. Since version 1.0.0.
    6. Since version 3.8.0.
    7. Since version 3.8.0.
    "},{"location":"api/basic_json/to_bjdata/","title":"nlohmann::basic_json::to_bjdata","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bjdata(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false,\n                                           const bjdata_version_t version = bjdata_version_t::draft2);\n\n// (2)\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\nstatic void to_bjdata(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false,\n                      const bjdata_version_t version = bjdata_version_t::draft2);\n

    Serializes a given JSON value j to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the BJData serialization.
    2. Writes the BJData serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bjdata/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default. version (in) which version of BJData to use (see draft 3); optional, bjdata_version_t::draft2 by default."},{"location":"api/basic_json/to_bjdata/#return-value","title":"Return value","text":"
    1. BJData serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bjdata/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bjdata/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bjdata/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BJData format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_bjdata/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    • BJData version parameter (for draft3 binary encoding) added in version 3.12.0.
    "},{"location":"api/basic_json/to_bson/","title":"nlohmann::basic_json::to_bson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_bson(const basic_json& j);\n\n// (2)\nstatic void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_bson(const basic_json& j, detail::output_adapter<char> o);\n

    BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).

    1. Returns a byte vector containing the BSON serialization.
    2. Writes the BSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_bson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_bson/#return-value","title":"Return value","text":"
    1. BSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_bson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_bson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_bson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in BSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"api/basic_json/to_bson/#version-history","title":"Version history","text":"
    • Added in version 3.4.0.
    "},{"location":"api/basic_json/to_cbor/","title":"nlohmann::basic_json::to_cbor","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_cbor(const basic_json& j);\n\n// (2)\nstatic void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_cbor(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the CBOR serialization.
    2. Writes the CBOR serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_cbor/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_cbor/#return-value","title":"Return value","text":"
    1. CBOR serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_cbor/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_cbor/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_cbor/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in CBOR format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_cbor/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    • Compact representation of floating-point numbers added in version 3.8.0.
    "},{"location":"api/basic_json/to_msgpack/","title":"nlohmann::basic_json::to_msgpack","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_msgpack(const basic_json& j);\n\n// (2)\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o);\nstatic void to_msgpack(const basic_json& j, detail::output_adapter<char> o);\n

    Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the MessagePack serialization.
    2. Writes the MessagePack serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_msgpack/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to"},{"location":"api/basic_json/to_msgpack/#return-value","title":"Return value","text":"
    1. MessagePack serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_msgpack/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_msgpack/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_msgpack/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in MessagePack format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"api/basic_json/to_msgpack/#version-history","title":"Version history","text":"
    • Added in version 2.0.9.
    "},{"location":"api/basic_json/to_string/","title":"to_string(basic_json)","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j);\n

    This function implements a user-defined to_string for JSON objects.

    "},{"location":"api/basic_json/to_string/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/basic_json/to_string/#return-value","title":"Return value","text":"

    string containing the serialization of the JSON value

    "},{"location":"api/basic_json/to_string/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/to_string/#exceptions","title":"Exceptions","text":"

    Throws type_error.316 if a string stored inside the JSON value is not UTF-8 encoded

    "},{"location":"api/basic_json/to_string/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/to_string/#possible-implementation","title":"Possible implementation","text":"
    template <typename BasicJsonType>\nstd::string to_string(const BasicJsonType& j)\n{\n    return j.dump();\n}\n
    "},{"location":"api/basic_json/to_string/#examples","title":"Examples","text":"Example

    The following code shows how the library's to_string() function integrates with others, allowing argument-dependent lookup.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing std::to_string;\n\nint main()\n{\n    // create values\n    json j = {{\"one\", 1}, {\"two\", 2}};\n    int i = 42;\n\n    // use ADL to select best to_string function\n    auto j_str = to_string(j);  // calling nlohmann::to_string\n    auto i_str = to_string(i);  // calling std::to_string\n\n    // serialize without indentation\n    std::cout << j_str << \"\\n\\n\"\n              << i_str << std::endl;\n}\n

    Output:

    {\"one\":1,\"two\":2}\n\n42\n
    "},{"location":"api/basic_json/to_string/#see-also","title":"See also","text":"
    • dump
    "},{"location":"api/basic_json/to_string/#version-history","title":"Version history","text":"

    Added in version 3.7.0.

    "},{"location":"api/basic_json/to_ubjson/","title":"nlohmann::basic_json::to_ubjson","text":"
    // (1)\nstatic std::vector<std::uint8_t> to_ubjson(const basic_json& j,\n                                           const bool use_size = false,\n                                           const bool use_type = false);\n\n// (2)\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,\n                      const bool use_size = false, const bool use_type = false);\nstatic void to_ubjson(const basic_json& j, detail::output_adapter<char> o,\n                      const bool use_size = false, const bool use_type = false);\n

    Serializes a given JSON value j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse.

    1. Returns a byte vector containing the UBJSON serialization.
    2. Writes the UBJSON serialization to an output adapter.

    The exact mapping and its limitations is described on a dedicated page.

    "},{"location":"api/basic_json/to_ubjson/#parameters","title":"Parameters","text":"j (in) JSON value to serialize o (in) output adapter to write serialization to use_size (in) whether to add size annotations to container types; optional, false by default. use_type (in) whether to add type annotations to container types (must be combined with use_size = true); optional, false by default."},{"location":"api/basic_json/to_ubjson/#return-value","title":"Return value","text":"
    1. UBJSON serialization as byte vector
    2. (none)
    "},{"location":"api/basic_json/to_ubjson/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes in the JSON value.

    "},{"location":"api/basic_json/to_ubjson/#complexity","title":"Complexity","text":"

    Linear in the size of the JSON value j.

    "},{"location":"api/basic_json/to_ubjson/#examples","title":"Examples","text":"Example

    The example shows the serialization of a JSON value to a byte vector in UBJSON format.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"api/basic_json/to_ubjson/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/basic_json/type/","title":"nlohmann::basic_json::type","text":"
    constexpr value_t type() const noexcept;\n

    Return the type of the JSON value as a value from the value_t enumeration.

    "},{"location":"api/basic_json/type/#return-value","title":"Return value","text":"

    the type of the JSON value

    Value type return value null value_t::null boolean value_t::boolean string value_t::string number (integer) value_t::number_integer number (unsigned integer) value_t::number_unsigned number (floating-point) value_t::number_float object value_t::object array value_t::array binary value_t::binary discarded value_t::discarded"},{"location":"api/basic_json/type/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type/#examples","title":"Examples","text":"Example

    The following code exemplifies type() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/type/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/type_error/","title":"nlohmann::basic_json::type_error","text":"
    class type_error : public exception;\n

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx (see list of type errors).

    classDiagram\n  direction LR\n\n    class std_exception [\"std::exception\"] {\n        <<interface>>\n    }\n\n    class json_exception [\"basic_json::exception\"] {\n        +const int id\n        +const char* what() const\n    }\n\n    class json_parse_error [\"basic_json::parse_error\"] {\n        +const std::size_t byte\n    }\n\n    class json_invalid_iterator [\"basic_json::invalid_iterator\"]\n    class json_type_error [\"basic_json::type_error\"]\n    class json_out_of_range [\"basic_json::out_of_range\"]\n    class json_other_error [\"basic_json::other_error\"]\n\n    std_exception <|-- json_exception\n    json_exception <|-- json_parse_error\n    json_exception <|-- json_invalid_iterator\n    json_exception <|-- json_type_error\n    json_exception <|-- json_out_of_range\n    json_exception <|-- json_other_error\n\n    style json_type_error fill:#CCCCFF
    "},{"location":"api/basic_json/type_error/#member-functions","title":"Member functions","text":"
    • what - returns explanatory string
    "},{"location":"api/basic_json/type_error/#member-variables","title":"Member variables","text":"
    • id - the id of the exception
    "},{"location":"api/basic_json/type_error/#examples","title":"Examples","text":"Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"api/basic_json/type_error/#see-also","title":"See also","text":"
    • List of type errors
    • parse_error for exceptions indicating a parse error
    • invalid_iterator for exceptions indicating errors with iterators
    • out_of_range for exceptions indicating access out of the defined range
    • other_error for exceptions indicating other library errors
    "},{"location":"api/basic_json/type_error/#version-history","title":"Version history","text":"
    • Since version 3.0.0.
    "},{"location":"api/basic_json/type_name/","title":"nlohmann::basic_json::type_name","text":"
    const char* type_name() const noexcept;\n

    Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type.

    "},{"location":"api/basic_json/type_name/#return-value","title":"Return value","text":"

    a string representation of the type (value_t):

    Value type return value null \"null\" boolean \"boolean\" string \"string\" number (integer, unsigned integer, floating-point) \"number\" object \"object\" array \"array\" binary \"binary\" discarded \"discarded\""},{"location":"api/basic_json/type_name/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/type_name/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/basic_json/type_name/#examples","title":"Examples","text":"Example

    The following code exemplifies type_name() for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type_name()\n    std::cout << j_null << \" is a \" << j_null.type_name() << '\\n';\n    std::cout << j_boolean << \" is a \" << j_boolean.type_name() << '\\n';\n    std::cout << j_number_integer << \" is a \" << j_number_integer.type_name() << '\\n';\n    std::cout << j_number_unsigned << \" is a \" << j_number_unsigned.type_name() << '\\n';\n    std::cout << j_number_float << \" is a \" << j_number_float.type_name() << '\\n';\n    std::cout << j_object << \" is an \" << j_object.type_name() << '\\n';\n    std::cout << j_array << \" is an \" << j_array.type_name() << '\\n';\n    std::cout << j_string << \" is a \" << j_string.type_name() << '\\n';\n}\n

    Output:

    null is a null\ntrue is a boolean\n-17 is a number\n42 is a number\n23.42 is a number\n{\"one\":1,\"two\":2} is an object\n[1,2,4,8,16] is an array\n\"Hello, world\" is a string\n
    "},{"location":"api/basic_json/type_name/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Part of the public API version since 2.1.0.
    • Changed return value to const char* and added noexcept in version 3.0.0.
    • Added support for binary type in version 3.8.0.
    "},{"location":"api/basic_json/unflatten/","title":"nlohmann::basic_json::unflatten","text":"
    basic_json unflatten() const;\n

    The function restores the arbitrary nesting of a JSON value that has been flattened before using the flatten() function. The JSON value must meet certain constraints:

    1. The value must be an object.
    2. The keys must be JSON pointers (see RFC 6901)
    3. The mapped values must be primitive JSON types.
    "},{"location":"api/basic_json/unflatten/#return-value","title":"Return value","text":"

    the original JSON from a flattened version

    "},{"location":"api/basic_json/unflatten/#exception-safety","title":"Exception safety","text":"

    Strong exception safety: if an exception occurs, the original value stays intact.

    "},{"location":"api/basic_json/unflatten/#exceptions","title":"Exceptions","text":"

    The function can throw the following exceptions:

    • Throws type_error.314 if value is not an object
    • Throws type_error.315 if object values are not primitive
    "},{"location":"api/basic_json/unflatten/#complexity","title":"Complexity","text":"

    Linear in the size the JSON value.

    "},{"location":"api/basic_json/unflatten/#notes","title":"Notes","text":"

    Empty objects and arrays are flattened by flatten() to null values and can not unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().

    "},{"location":"api/basic_json/unflatten/#examples","title":"Examples","text":"Example

    The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON value\n    json j_flattened =\n    {\n        {\"/answer/everything\", 42},\n        {\"/happy\", true},\n        {\"/list/0\", 1},\n        {\"/list/1\", 0},\n        {\"/list/2\", 2},\n        {\"/name\", \"Niels\"},\n        {\"/nothing\", nullptr},\n        {\"/object/currency\", \"USD\"},\n        {\"/object/value\", 42.99},\n        {\"/pi\", 3.141}\n    };\n\n    // call unflatten()\n    std::cout << std::setw(4) << j_flattened.unflatten() << '\\n';\n}\n

    Output:

    {\n    \"answer\": {\n        \"everything\": 42\n    },\n    \"happy\": true,\n    \"list\": [\n        1,\n        0,\n        2\n    ],\n    \"name\": \"Niels\",\n    \"nothing\": null,\n    \"object\": {\n        \"currency\": \"USD\",\n        \"value\": 42.99\n    },\n    \"pi\": 3.141\n}\n
    "},{"location":"api/basic_json/unflatten/#see-also","title":"See also","text":"
    • flatten the reverse function
    "},{"location":"api/basic_json/unflatten/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    "},{"location":"api/basic_json/update/","title":"nlohmann::basic_json::update","text":"
    // (1)\nvoid update(const_reference j, bool merge_objects = false);\n\n// (2)\nvoid update(const_iterator first, const_iterator last, bool merge_objects = false);\n
    1. Inserts all values from JSON object j.
    2. Inserts all values from range [first, last)

    When merge_objects is false (default), existing keys are overwritten. When merge_objects is true, recursively merges objects with common keys.

    The function is motivated by Python's dict.update function.

    "},{"location":"api/basic_json/update/#iterator-invalidation","title":"Iterator invalidation","text":"

    For ordered_json, adding a value to an object can yield a reallocation, in which case all iterators (including the end() iterator) and all references to the elements are invalidated.

    "},{"location":"api/basic_json/update/#parameters","title":"Parameters","text":"j (in) JSON object to read values from merge_objects (in) when true, existing keys are not overwritten, but contents of objects are merged recursively (default: false) first (in) begin of the range of elements to insert last (in) end of the range of elements to insert"},{"location":"api/basic_json/update/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
    2. The function can throw the following exceptions:
      • Throws type_error.312 if called on JSON values other than objects; example: \"cannot use update() with string\"
      • Throws invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: \"iterator does not fit current value\"
      • Throws invalid_iterator.210 if first and last do not belong to the same JSON value; example: \"iterators do not fit\"
    "},{"location":"api/basic_json/update/#complexity","title":"Complexity","text":"
    1. O(N*log(size() + N)), where N is the number of elements to insert.
    2. O(N*log(size() + N)), where N is the number of elements to insert.
    "},{"location":"api/basic_json/update/#examples","title":"Examples","text":"Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2);\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2, true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    The example shows how update() is used.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create two JSON objects\n    json o1 = R\"( {\"color\": \"red\", \"price\": 17.99, \"names\": {\"de\": \"Flugzeug\"}} )\"_json;\n    json o2 = R\"( {\"color\": \"blue\", \"speed\": 100, \"names\": {\"en\": \"plane\"}} )\"_json;\n    json o3 = o1;\n\n    // add all keys from o2 to o1 (updating \"color\", replacing \"names\")\n    o1.update(o2.begin(), o2.end());\n\n    // add all keys from o2 to o1 (updating \"color\", merging \"names\")\n    o3.update(o2.begin(), o2.end(), true);\n\n    // output updated object o1 and o3\n    std::cout << std::setw(2) << o1 << '\\n';\n    std::cout << std::setw(2) << o3 << '\\n';\n}\n

    Output:

    {\n  \"color\": \"blue\",\n  \"names\": {\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n{\n  \"color\": \"blue\",\n  \"names\": {\n    \"de\": \"Flugzeug\",\n    \"en\": \"plane\"\n  },\n  \"price\": 17.99,\n  \"speed\": 100\n}\n
    Example

    One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects:

    {\n    \"color\": \"red\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\"}\n}\n

    The user may override the default settings selectively:

    {\n    \"color\": \"blue\",\n    \"name\": {\"es\": \"rat\u00f3n\"},\n}\n

    Then update manages the merging of default settings and user settings:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings);\n

    Now effective_settings contains the default settings, but those keys set by the user are overwritten:

    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"es\": \"rat\u00f3n\"}\n}\n

    Note existing keys were just overwritten. To merge objects, merge_objects setting should be set to true:

    auto user_settings = json::parse(\"config.json\");\nauto effective_settings = get_default_settings();\neffective_settings.update(user_settings, true);\n
    {\n    \"color\": \"blue\",\n    \"active\": true,\n    \"name\": {\"de\": \"Maus\", \"en\": \"mouse\", \"es\": \"rat\u00f3n\"}\n}\n
    "},{"location":"api/basic_json/update/#version-history","title":"Version history","text":"
    • Added in version 3.0.0.
    • Added merge_objects parameter in 3.10.5.
    "},{"location":"api/basic_json/value/","title":"nlohmann::basic_json::value","text":"
    // (1)\ntemplate<class ValueType>\nValueType value(const typename object_t::key_type& key,\n                ValueType&& default_value) const;\n\n// (2)\ntemplate<class ValueType, class KeyType>\nValueType value(KeyType&& key,\n                ValueType&& default_value) const;\n\n// (3)\ntemplate<class ValueType>\nValueType value(const json_pointer& ptr,\n                const ValueType& default_value) const;\n
    1. Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

      The function is basically equivalent to executing

      try {\n   return at(key);\n} catch(out_of_range) {\n   return default_value;\n}\n

    2. See 1. This overload is only available if KeyType is comparable with typename object_t::key_type and typename object_comparator_t::is_transparent denotes a type.

    3. Returns either a copy of an object's element at the specified JSON pointer ptr or a given default value if no value at ptr exists.

      The function is basically equivalent to executing

      try {\n   return at(ptr);\n} catch(out_of_range) {\n   return default_value;\n}\n

    Differences to at and operator[]

    • Unlike at, this function does not throw if the given key/ptr was not found.
    • Unlike operator[], this function does not implicitly add an element to the position defined by key/ptr key. This function is furthermore also applicable to const objects.
    "},{"location":"api/basic_json/value/#template-parameters","title":"Template parameters","text":"KeyType A type for an object key other than json_pointer that is comparable with string_t using object_comparator_t. This can also be a string view (C++17). ValueType type compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key/ptr and the default value default_value must be compatible."},{"location":"api/basic_json/value/#parameters","title":"Parameters","text":"key (in) key of the element to access default_value (in) the value to return if key/ptr found no value ptr (in) a JSON pointer to the element to access"},{"location":"api/basic_json/value/#return-value","title":"Return value","text":"
    1. copy of the element at key key or default_value if key is not found
    2. copy of the element at key key or default_value if key is not found
    3. copy of the element at JSON Pointer ptr or default_value if no value for ptr is found
    "},{"location":"api/basic_json/value/#exception-safety","title":"Exception safety","text":"

    Strong guarantee: if an exception is thrown, there are no changes to any JSON value.

    "},{"location":"api/basic_json/value/#exceptions","title":"Exceptions","text":"
    1. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at key
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    2. See 1.
    3. The function can throw the following exceptions:
      • Throws type_error.302 if default_value does not match the type of the value at ptr
      • Throws type_error.306 if the JSON value is not an object; in that case, using value() with a key makes no sense.
    "},{"location":"api/basic_json/value/#complexity","title":"Complexity","text":"
    1. Logarithmic in the size of the container.
    2. Logarithmic in the size of the container.
    3. Logarithmic in the size of the container.
    "},{"location":"api/basic_json/value/#examples","title":"Examples","text":"Example: (1) access specified object element with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\", 0);\n    double v_floating = j.value(\"floating\", 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\", \"oops\");\n    bool v_boolean = j.value(\"nonexisting\", false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (2) access specified object element using string_view with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <string_view>\n#include <nlohmann/json.hpp>\n\nusing namespace std::string_view_literals;\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"integer\"sv, 0);\n    double v_floating = j.value(\"floating\"sv, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"nonexisting\"sv, \"oops\");\n    bool v_boolean = j.value(\"nonexisting\"sv, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    Example: (3) access specified object element via JSON Pointer with default value

    The example below shows how object elements can be queried with a default value.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON object with different entry types\n    json j =\n    {\n        {\"integer\", 1},\n        {\"floating\", 42.23},\n        {\"string\", \"hello world\"},\n        {\"boolean\", true},\n        {\"object\", {{\"key1\", 1}, {\"key2\", 2}}},\n        {\"array\", {1, 2, 3}}\n    };\n\n    // access existing values\n    int v_integer = j.value(\"/integer\"_json_pointer, 0);\n    double v_floating = j.value(\"/floating\"_json_pointer, 47.11);\n\n    // access nonexisting values and rely on default value\n    std::string v_string = j.value(\"/nonexisting\"_json_pointer, \"oops\");\n    bool v_boolean = j.value(\"/nonexisting\"_json_pointer, false);\n\n    // output values\n    std::cout << std::boolalpha << v_integer << \" \" << v_floating\n              << \" \" << v_string << \" \" << v_boolean << \"\\n\";\n}\n

    Output:

    1 42.23 oops false\n
    "},{"location":"api/basic_json/value/#see-also","title":"See also","text":"
    • see at for access by reference with range checking
    • see operator[] for unchecked access by reference
    "},{"location":"api/basic_json/value/#version-history","title":"Version history","text":"
    1. Added in version 1.0.0. Changed parameter default_value type from const ValueType& to ValueType&& in version 3.11.0.
    2. Added in version 3.11.0. Made ValueType the first template parameter in version 3.11.2.
    3. Added in version 2.0.2.
    "},{"location":"api/basic_json/value_t/","title":"nlohmann::basic_json::value_t","text":"
    enum class value_t : std::uint8_t {\n    null,\n    object,\n    array,\n    string,\n    boolean,\n    number_integer,\n    number_unsigned,\n    number_float,\n    binary,\n    discarded\n};\n

    This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions is_null, is_object, is_array, is_string, is_boolean, is_number (with is_number_integer, is_number_unsigned, and is_number_float), is_discarded, is_binary, is_primitive, and is_structured rely on it.

    "},{"location":"api/basic_json/value_t/#notes","title":"Notes","text":"

    Ordering

    The order of types is as follows:

    1. null
    2. boolean
    3. number_integer, number_unsigned, number_float
    4. object
    5. array
    6. string
    7. binary

    discarded is unordered.

    Types of numbers

    There are three enumerators for numbers (number_integer, number_unsigned, and number_float) to distinguish between different types of numbers:

    • number_unsigned_t for unsigned integers
    • number_integer_t for signed integers
    • number_float_t for floating-point numbers or to approximate integers which do not fit into the limits of their respective type

    Comparison operators

    operator< and operator<=> (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the rewritten candidates generated from operator<=> during overload resolution, while others do not. For predictable and portable behavior use:

    • operator< or operator<=> when wanting to compare according to the order described above
    • operator== or operator!= when wanting to compare according to each enumerators integer value
    "},{"location":"api/basic_json/value_t/#examples","title":"Examples","text":"Example

    The following code how type() queries the value_t for all JSON types.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create JSON values\n    json j_null;\n    json j_boolean = true;\n    json j_number_integer = -17;\n    json j_number_unsigned = 42u;\n    json j_number_float = 23.42;\n    json j_object = {{\"one\", 1}, {\"two\", 2}};\n    json j_array = {1, 2, 4, 8, 16};\n    json j_string = \"Hello, world\";\n\n    // call type()\n    std::cout << std::boolalpha;\n    std::cout << (j_null.type() == json::value_t::null) << '\\n';\n    std::cout << (j_boolean.type() == json::value_t::boolean) << '\\n';\n    std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\\n';\n    std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\\n';\n    std::cout << (j_number_float.type() == json::value_t::number_float) << '\\n';\n    std::cout << (j_object.type() == json::value_t::object) << '\\n';\n    std::cout << (j_array.type() == json::value_t::array) << '\\n';\n    std::cout << (j_string.type() == json::value_t::string) << '\\n';\n}\n

    Output:

    true\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\ntrue\n
    "},{"location":"api/basic_json/value_t/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    • Added unsigned integer type in version 2.0.0.
    • Added binary type in version 3.8.0.
    "},{"location":"api/basic_json/~basic_json/","title":"nlohmann::basic_json::~basic_json","text":"
    ~basic_json() noexcept;\n

    Destroys the JSON value and frees all allocated memory.

    "},{"location":"api/basic_json/~basic_json/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this member function never throws exceptions.

    "},{"location":"api/basic_json/~basic_json/#complexity","title":"Complexity","text":"

    Linear.

    "},{"location":"api/basic_json/~basic_json/#version-history","title":"Version history","text":"
    • Added in version 1.0.0.
    "},{"location":"api/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype","text":"
    template<typename BinaryType>\nclass byte_container_with_subtype : public BinaryType;\n

    This type extends the template parameter BinaryType provided to basic_json with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type.

    "},{"location":"api/byte_container_with_subtype/#template-parameters","title":"Template parameters","text":"BinaryType container to store bytes (std::vector<std::uint8_t> by default)"},{"location":"api/byte_container_with_subtype/#member-types","title":"Member types","text":"
    • container_type - the type of the underlying container (BinaryType)
    • subtype_type - the type of the subtype (std::uint64_t)
    "},{"location":"api/byte_container_with_subtype/#member-functions","title":"Member functions","text":"
    • (constructor)
    • operator== - comparison: equal
    • operator!= - comparison: not equal
    • set_subtype - sets the binary subtype
    • subtype - return the binary subtype
    • has_subtype - return whether the value has a subtype
    • clear_subtype - clears the binary subtype
    "},{"location":"api/byte_container_with_subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    • Changed type of subtypes to std::uint64_t in 3.10.0.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/","title":"nlohmann::byte_container_with_subtype::byte_container_with_subtype","text":"
    // (1)\nbyte_container_with_subtype();\n\n// (2)\nbyte_container_with_subtype(const container_type& container);\nbyte_container_with_subtype(container_type&& container);\n\n// (3)\nbyte_container_with_subtype(const container_type& container, subtype_type subtype);\nbyte_container_with_subtype(container_type&& container, subtype_type subtype);\n
    1. Create empty binary container without subtype.
    2. Create binary container without subtype.
    3. Create binary container with subtype.
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#parameters","title":"Parameters","text":"container (in) binary container subtype (in) subtype"},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how byte containers can be created.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // (1) create empty container\n    auto c1 = byte_container_with_subtype();\n\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // (2) create container\n    auto c2 = byte_container_with_subtype(bytes);\n\n    // (3) create container with subtype\n    auto c3 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << json(c1) << \"\\n\" << json(c2) << \"\\n\" << json(c3) << std::endl;\n}\n

    Output:

    {\"bytes\":[],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":null}\n{\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/byte_container_with_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/","title":"nlohmann::byte_container_with_subtype::clear_subtype","text":"
    void clear_subtype() noexcept;\n

    Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/clear_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how clear_subtype can remove subtypes.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container with subtype\n    auto c1 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"before calling clear_subtype(): \" << json(c1) << '\\n';\n\n    c1.clear_subtype();\n\n    std::cout << \"after calling clear_subtype(): \" << json(c1) << '\\n';\n}\n

    Output:

    before calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":42}\nafter calling clear_subtype(): {\"bytes\":[202,254,186,190],\"subtype\":null}\n
    "},{"location":"api/byte_container_with_subtype/clear_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/has_subtype/","title":"nlohmann::byte_container_with_subtype::has_subtype","text":"
    constexpr bool has_subtype() const noexcept;\n

    Returns whether the value has a subtype.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#return-value","title":"Return value","text":"

    whether the value has a subtype

    "},{"location":"api/byte_container_with_subtype/has_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/has_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how has_subtype can check whether a subtype was set.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << std::boolalpha << \"c1.has_subtype() = \" << c1.has_subtype()\n              << \"\\nc2.has_subtype() = \" << c2.has_subtype() << std::endl;\n}\n

    Output:

    c1.has_subtype() = false\nc2.has_subtype() = true\n
    "},{"location":"api/byte_container_with_subtype/has_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/set_subtype/","title":"nlohmann::byte_container_with_subtype::set_subtype","text":"
    void set_subtype(subtype_type subtype) noexcept;\n

    Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#parameters","title":"Parameters","text":"subtype (in) subtype to set"},{"location":"api/byte_container_with_subtype/set_subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/set_subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how a subtype can be set with set_subtype.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container without subtype\n    auto c = byte_container_with_subtype(bytes);\n\n    std::cout << \"before calling set_subtype(42): \" << json(c) << '\\n';\n\n    // set the subtype\n    c.set_subtype(42);\n\n    std::cout << \"after calling set_subtype(42): \" << json(c) << '\\n';\n}\n

    Output:

    before calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":null}\nafter calling set_subtype(42): {\"bytes\":[202,254,186,190],\"subtype\":42}\n
    "},{"location":"api/byte_container_with_subtype/set_subtype/#version-history","title":"Version history","text":"

    Since version 3.8.0.

    "},{"location":"api/byte_container_with_subtype/subtype/","title":"nlohmann::byte_container_with_subtype::subtype","text":"
    constexpr subtype_type subtype() const noexcept;\n

    Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return subtype_type(-1) as a sentinel value.

    "},{"location":"api/byte_container_with_subtype/subtype/#return-value","title":"Return value","text":"

    the numerical subtype of the binary value, or subtype_type(-1) if no subtype is set

    "},{"location":"api/byte_container_with_subtype/subtype/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/byte_container_with_subtype/subtype/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/byte_container_with_subtype/subtype/#examples","title":"Examples","text":"Example

    The example below demonstrates how the subtype can be retrieved with subtype. Note how subtype_type(-1) is returned for container c1.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// define a byte container based on std::vector\nusing byte_container_with_subtype = nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>;\n\nint main()\n{\n    std::vector<std::uint8_t> bytes = {{0xca, 0xfe, 0xba, 0xbe}};\n\n    // create container\n    auto c1 = byte_container_with_subtype(bytes);\n\n    // create container with subtype\n    auto c2 = byte_container_with_subtype(bytes, 42);\n\n    std::cout << \"c1.subtype() = \" << c1.subtype()\n              << \"\\nc2.subtype() = \" << c2.subtype() << std::endl;\n\n    // in case no subtype is set, return special value\n    assert(c1.subtype() == static_cast<byte_container_with_subtype::subtype_type>(-1));\n}\n

    Output:

    c1.subtype() = 18446744073709551615\nc2.subtype() = 42\n
    "},{"location":"api/byte_container_with_subtype/subtype/#version-history","title":"Version history","text":"
    • Added in version 3.8.0
    • Fixed return value to properly return subtype_type(-1) as documented in version 3.10.0.
    "},{"location":"api/json_pointer/","title":"nlohmann::json_pointer","text":"
    template<typename RefStringType>\nclass json_pointer;\n

    A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions at and operator[]. Furthermore, JSON pointers are the base for JSON patches.

    "},{"location":"api/json_pointer/#template-parameters","title":"Template parameters","text":"RefStringType the string type used for the reference tokens making up the JSON pointer

    Deprecation

    For backwards compatibility RefStringType may also be a specialization of basic_json in which case string_t will be deduced as basic_json::string_t. This feature is deprecated and may be removed in a future major version.

    "},{"location":"api/json_pointer/#member-types","title":"Member types","text":"
    • string_t - the string type used for the reference tokens
    "},{"location":"api/json_pointer/#member-functions","title":"Member functions","text":"
    • (constructor)
    • to_string - return a string representation of the JSON pointer
    • operator string_t - return a string representation of the JSON pointer
    • operator== - compare: equal
    • operator!= - compare: not equal
    • operator/= - append to the end of the JSON pointer
    • operator/ - create JSON Pointer by appending
    • parent_pointer - returns the parent of this JSON pointer
    • pop_back - remove last reference token
    • back - return last reference token
    • push_back - append an unescaped token at the end of the pointer
    • empty - return whether pointer points to the root document
    "},{"location":"api/json_pointer/#literals","title":"Literals","text":"
    • operator\"\"_json_pointer - user-defined string literal for JSON pointers
    "},{"location":"api/json_pointer/#see-also","title":"See also","text":"
    • RFC 6901
    "},{"location":"api/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed template parameter from basic_json to string type in version 3.11.0.
    "},{"location":"api/json_pointer/back/","title":"nlohmann::json_pointer::back","text":"
    const string_t& back() const;\n

    Return last reference token.

    "},{"location":"api/json_pointer/back/#return-value","title":"Return value","text":"

    Last reference token.

    "},{"location":"api/json_pointer/back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/back/#examples","title":"Examples","text":"Example

    The example shows the usage of back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo\");\n    json::json_pointer ptr2(\"/foo/0\");\n\n    // call empty()\n    std::cout << \"last reference token of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.back() << \"\\\"\\n\"\n              << \"last reference token of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.back() << \"\\\"\" << std::endl;\n}\n

    Output:

    last reference token of \"/foo\" is \"foo\"\nlast reference token of \"/foo/0\" is \"0\"\n
    "},{"location":"api/json_pointer/back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/empty/","title":"nlohmann::json_pointer::empty","text":"
    bool empty() const noexcept;\n

    Return whether pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#return-value","title":"Return value","text":"

    true iff the JSON pointer points to the root document.

    "},{"location":"api/json_pointer/empty/#exception-safety","title":"Exception safety","text":"

    No-throw guarantee: this function never throws exceptions.

    "},{"location":"api/json_pointer/empty/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/empty/#examples","title":"Examples","text":"Example

    The example shows the result of empty for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call empty()\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\": \" << ptr0.empty() << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\": \" << ptr1.empty() << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\": \" << ptr2.empty() << '\\n'\n              << \"\\\"\" << ptr3 << \"\\\": \" << ptr3.empty() << std::endl;\n}\n

    Output:

    \"\": true\n\"\": true\n\"/foo\": false\n\"/foo/0\": false\n
    "},{"location":"api/json_pointer/empty/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/json_pointer/","title":"nlohmann::json_pointer::json_pointer","text":"
    explicit json_pointer(const string_t& s = \"\");\n

    Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

    "},{"location":"api/json_pointer/json_pointer/#parameters","title":"Parameters","text":"s (in) string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value"},{"location":"api/json_pointer/json_pointer/#exceptions","title":"Exceptions","text":"
    • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/json_pointer/#examples","title":"Examples","text":"Example

    The example shows the construction several valid JSON pointers as well as the exceptional behavior.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // correct JSON pointers\n    json::json_pointer p1;\n    json::json_pointer p2(\"\");\n    json::json_pointer p3(\"/\");\n    json::json_pointer p4(\"//\");\n    json::json_pointer p5(\"/foo/bar\");\n    json::json_pointer p6(\"/foo/bar/-\");\n    json::json_pointer p7(\"/foo/~0\");\n    json::json_pointer p8(\"/foo/~1\");\n\n    // error: JSON pointer does not begin with a slash\n    try\n    {\n        json::json_pointer p9(\"foo\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p10(\"/foo/~\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n\n    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1\n    try\n    {\n        json::json_pointer p11(\"/foo/~3\");\n    }\n    catch (const json::parse_error& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"api/json_pointer/json_pointer/#version-history","title":"Version history","text":"
    • Added in version 2.0.0.
    • Changed type of s to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/operator_eq/","title":"nlohmann::json_pointer::operator==","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;            // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator==(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                                         // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator==(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);                     // (2)\n\n// since C++20\nclass json_pointer {\n    template<typename RefStringTypeRhs>\n    bool operator==(\n        const json_pointer<RefStringTypeRhs>& rhs) const noexcept;  // (1)\n\n    bool operator==(const string_t& rhs) const;                     // (2)\n};\n
    1. Compares two JSON pointers for equality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_eq/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_eq/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_eq/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are equal

    "},{"location":"api/json_pointer/operator_eq/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_eq/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_eq/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_eq/#notes","title":"Notes","text":"

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_eq/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr0 << \"\\\": \" << (ptr0 == ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (ptr0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr1 == ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (ptr2 == ptr2) << std::endl;\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"\" == \"/foo\": false\n\"/foo\" == \"/foo\": true\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <exception>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" == \\\"\" << str0 << \"\\\": \" << (ptr0 == str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" == \\\"\" << ptr1 << \"\\\": \" << (str0 == ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" == \\\"\" << str1 << \"\\\": \" << (ptr2 == str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" == \\\"\" << ptr2 << \"\\\": \" << (str2 == ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" == \"\": true\n\"\" == \"\": true\n\"/foo\" == \"/foo\": true\n\"bar\" == \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_eq/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_ne/","title":"nlohmann::json_pointer::operator!=","text":"
    // until C++20\ntemplate<typename RefStringTypeLhs, typename RefStringTypeRhs>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs) noexcept;  // (1)\n\ntemplate<typename RefStringTypeLhs, typename StringType>\nbool operator!=(\n    const json_pointer<RefStringTypeLhs>& lhs,\n    const StringType& rhs);                               // (2)\n\ntemplate<typename RefStringTypeRhs, typename StringType>\nbool operator!=(\n    const StringType& lhs,\n    const json_pointer<RefStringTypeRhs>& rhs);           // (2)\n
    1. Compares two JSON pointers for inequality by comparing their reference tokens.

    2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1.

    "},{"location":"api/json_pointer/operator_ne/#template-parameters","title":"Template parameters","text":"RefStringTypeLhs, RefStringTypeRhs the string type of the left-hand side or right-hand side JSON pointer, respectively StringType the string type derived from the json_pointer operand (json_pointer::string_t)"},{"location":"api/json_pointer/operator_ne/#parameters","title":"Parameters","text":"lhs (in) first value to consider rhs (in) second value to consider"},{"location":"api/json_pointer/operator_ne/#return-value","title":"Return value","text":"

    whether the values lhs/*this and rhs are not equal

    "},{"location":"api/json_pointer/operator_ne/#exception-safety","title":"Exception safety","text":"
    1. No-throw guarantee: this function never throws exceptions.
    2. Strong exception safety: if an exception occurs, the original value stays intact.
    "},{"location":"api/json_pointer/operator_ne/#exceptions","title":"Exceptions","text":"
    1. (none)
    2. The function can throw the following exceptions:
    3. Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
    4. Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.
    "},{"location":"api/json_pointer/operator_ne/#complexity","title":"Complexity","text":"

    Constant if lhs and rhs differ in the number of reference tokens, otherwise linear in the number of reference tokens.

    "},{"location":"api/json_pointer/operator_ne/#notes","title":"Notes","text":"

    Operator overload resolution

    Since C++20 overload resolution will consider the rewritten candidate generated from operator==.

    Deprecation

    Overload 2 is deprecated and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_ne/#examples","title":"Examples","text":"Example: (1) Comparing JSON pointers

    The example demonstrates comparing JSON pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // compare JSON pointers\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr0 << \"\\\": \" << (ptr0 != ptr0) << '\\n'\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (ptr0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr1 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr1 != ptr2) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (ptr2 != ptr2) << std::endl;\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"\" != \"/foo\": true\n\"/foo\" != \"/foo\": false\n
    Example: (2) Comparing JSON pointers and strings

    The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON pointers\n    json::json_pointer ptr0;\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n\n    // different strings\n    std::string str0(\"\");\n    std::string str1(\"/foo\");\n    std::string str2(\"bar\");\n\n    // compare JSON pointers and strings\n    std::cout << std::boolalpha\n              << \"\\\"\" << ptr0 << \"\\\" != \\\"\" << str0 << \"\\\": \" << (ptr0 != str0) << '\\n'\n              << \"\\\"\" << str0 << \"\\\" != \\\"\" << ptr1 << \"\\\": \" << (str0 != ptr1) << '\\n'\n              << \"\\\"\" << ptr2 << \"\\\" != \\\"\" << str1 << \"\\\": \" << (ptr2 != str1) << std::endl;\n\n    try\n    {\n        std::cout << \"\\\"\" << str2 << \"\\\" != \\\"\" << ptr2 << \"\\\": \" << (str2 != ptr2) << std::endl;\n    }\n    catch (const json::parse_error& ex)\n    {\n        std::cout << ex.what() << std::endl;\n    }\n}\n

    Output:

    \"\" != \"\": false\n\"\" != \"\": false\n\"/foo\" != \"/foo\": false\n\"bar\" != \"/foo\": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'\n
    "},{"location":"api/json_pointer/operator_ne/#version-history","title":"Version history","text":"
    1. Added in version 2.1.0.
    2. Added for backward compatibility and deprecated in version 3.11.2.
    "},{"location":"api/json_pointer/operator_slash/","title":"nlohmann::json_pointer::operator/","text":"
    // (1)\njson_pointer operator/(const json_pointer& lhs, const json_pointer& rhs);\n\n// (2)\njson_pointer operator/(const json_pointer& lhs, string_t token);\n\n// (3)\njson_pointer operator/(const json_pointer& lhs, std::size_t array_idx);\n
    1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
    2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer
    3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer
    "},{"location":"api/json_pointer/operator_slash/#parameters","title":"Parameters","text":"lhs (in) JSON pointer rhs (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slash/#return-value","title":"Return value","text":"
    1. a new JSON pointer with rhs appended to lhs
    2. a new JSON pointer with unescaped token appended to lhs
    3. a new JSON pointer with array_idx appended to lhs
    "},{"location":"api/json_pointer/operator_slash/#complexity","title":"Complexity","text":"
    1. Linear in the length of lhs and rhs.
    2. Linear in the length of lhs.
    3. Linear in the length of lhs.
    "},{"location":"api/json_pointer/operator_slash/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n\n    // append a JSON Pointer\n    std::cout << \"\\\"\" << ptr / json::json_pointer(\"/bar/baz\") << \"\\\"\\n\";\n\n    // append a string\n    std::cout << \"\\\"\" << ptr / \"fob\" << \"\\\"\\n\";\n\n    // append an array index\n    std::cout << \"\\\"\" << ptr / 42 << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/fob\"\n\"/foo/42\"\n
    "},{"location":"api/json_pointer/operator_slash/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_slasheq/","title":"nlohmann::json_pointer::operator/=","text":"
    // (1)\njson_pointer& operator/=(const json_pointer& ptr);\n\n// (2)\njson_pointer& operator/=(string_t token);\n\n// (3)\njson_pointer& operator/=(std::size_t array_idx)\n
    1. append another JSON pointer at the end of this JSON pointer
    2. append an unescaped reference token at the end of this JSON pointer
    3. append an array index at the end of this JSON pointer
    "},{"location":"api/json_pointer/operator_slasheq/#parameters","title":"Parameters","text":"ptr (in) JSON pointer to append token (in) reference token to append array_idx (in) array index to append"},{"location":"api/json_pointer/operator_slasheq/#return-value","title":"Return value","text":"
    1. JSON pointer with ptr appended
    2. JSON pointer with token appended without escaping token
    3. JSON pointer with array_idx appended
    "},{"location":"api/json_pointer/operator_slasheq/#complexity","title":"Complexity","text":"
    1. Linear in the length of ptr.
    2. Amortized constant.
    3. Amortized constant.
    "},{"location":"api/json_pointer/operator_slasheq/#examples","title":"Examples","text":"Example

    The example shows the usage of operator/=.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create a JSON pointer\n    json::json_pointer ptr(\"/foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a JSON Pointer\n    ptr /= json::json_pointer(\"/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append a string\n    ptr /= \"fob\";\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // append an array index\n    ptr /= 42;\n    std::cout << \"\\\"\" << ptr << \"\\\"\" << std::endl;\n}\n

    Output:

    \"/foo\"\n\"/foo/bar/baz\"\n\"/foo/bar/baz/fob\"\n\"/foo/bar/baz/fob/42\"\n
    "},{"location":"api/json_pointer/operator_slasheq/#version-history","title":"Version history","text":"
    1. Added in version 3.6.0.
    2. Added in version 3.6.0. Changed type of token to string_t in version 3.11.0.
    3. Added in version 3.6.0.
    "},{"location":"api/json_pointer/operator_string_t/","title":"nlohmann::json_pointer::operator string_t","text":"
    operator string_t() const\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/operator_string_t/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/operator_string_t/#possible-implementation","title":"Possible implementation","text":"
    operator string_t() const\n{\n    return to_string();\n}\n
    "},{"location":"api/json_pointer/operator_string_t/#notes","title":"Notes","text":"

    Deprecation

    This function is deprecated in favor of to_string and will be removed in a future major version release.

    "},{"location":"api/json_pointer/operator_string_t/#examples","title":"Examples","text":"Example

    The example shows how JSON Pointers can be implicitly converted to strings.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"/foo/0\");\n    json::json_pointer ptr2(\"/a~1b\");\n\n    // implicit conversion to string\n    std::string s;\n    s += ptr1;\n    s += \"\\n\";\n    s += ptr2;\n\n    std::cout << s << std::endl;\n}\n

    Output:

    /foo/0\n/a~1b\n
    "},{"location":"api/json_pointer/operator_string_t/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed type to string_t and deprecated in version 3.11.0.
    "},{"location":"api/json_pointer/parent_pointer/","title":"nlohmann::json_pointer::parent_pointer","text":"
    json_pointer parent_pointer() const;\n

    Returns the parent of this JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#return-value","title":"Return value","text":"

    Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned.

    "},{"location":"api/json_pointer/parent_pointer/#complexity","title":"Complexity","text":"

    Linear in the length of the JSON pointer.

    "},{"location":"api/json_pointer/parent_pointer/#examples","title":"Examples","text":"Example

    The example shows the result of parent_pointer for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n\n    // call parent_pointer()\n    std::cout << std::boolalpha\n              << \"parent of \\\"\" << ptr1 << \"\\\" is \\\"\" << ptr1.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr2 << \"\\\" is \\\"\" << ptr2.parent_pointer() << \"\\\"\\n\"\n              << \"parent of \\\"\" << ptr3 << \"\\\" is \\\"\" << ptr3.parent_pointer() << \"\\\"\" << std::endl;\n}\n

    Output:

    parent of \"\" is \"\"\nparent of \"/foo\" is \"\"\nparent of \"/foo/0\" is \"/foo\"\n
    "},{"location":"api/json_pointer/parent_pointer/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/pop_back/","title":"nlohmann::json_pointer::pop_back","text":"
    void pop_back();\n

    Remove last reference token.

    "},{"location":"api/json_pointer/pop_back/#exceptions","title":"Exceptions","text":"

    Throws out_of_range.405 if JSON pointer has no parent.

    "},{"location":"api/json_pointer/pop_back/#complexity","title":"Complexity","text":"

    Constant.

    "},{"location":"api/json_pointer/pop_back/#examples","title":"Examples","text":"Example

    The example shows the usage of pop_back.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr(\"/foo/bar/baz\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call pop_back()\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.pop_back();\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"/foo/bar/baz\"\n\"/foo/bar\"\n\"/foo\"\n\"\"\n
    "},{"location":"api/json_pointer/pop_back/#version-history","title":"Version history","text":"

    Added in version 3.6.0.

    "},{"location":"api/json_pointer/push_back/","title":"nlohmann::json_pointer::push_back","text":"
    void push_back(const string_t& token);\n\nvoid push_back(string_t&& token);\n

    Append an unescaped token at the end of the reference pointer.

    "},{"location":"api/json_pointer/push_back/#parameters","title":"Parameters","text":"token (in) token to add"},{"location":"api/json_pointer/push_back/#complexity","title":"Complexity","text":"

    Amortized constant.

    "},{"location":"api/json_pointer/push_back/#examples","title":"Examples","text":"Example

    The example shows the result of push_back for different JSON Pointers.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create empty JSON Pointer\n    json::json_pointer ptr;\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    // call push_back()\n    ptr.push_back(\"foo\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"0\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n\n    ptr.push_back(\"bar\");\n    std::cout << \"\\\"\" << ptr << \"\\\"\\n\";\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/foo/0/bar\"\n
    "},{"location":"api/json_pointer/push_back/#version-history","title":"Version history","text":"
    • Added in version 3.6.0.
    • Changed type of token to string_t in version 3.11.0.
    "},{"location":"api/json_pointer/string_t/","title":"nlohmann::json_pointer::string_t","text":"
    using string_t = RefStringType;\n

    The string type used for the reference tokens making up the JSON pointer.

    See basic_json::string_t for more information.

    "},{"location":"api/json_pointer/string_t/#examples","title":"Examples","text":"Example

    The example shows the type string_t and its relation to basic_json::string_t.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::json_pointer::string_t s = \"This is a string.\";\n\n    std::cout << s << std::endl;\n\n    std::cout << std::boolalpha << std::is_same<json::json_pointer::string_t, json::string_t>::value << std::endl;\n}\n

    Output:

    This is a string.\ntrue\n
    "},{"location":"api/json_pointer/string_t/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/json_pointer/to_string/","title":"nlohmann::json_pointer::to_string","text":"
    string_t to_string() const;\n

    Return a string representation of the JSON pointer.

    "},{"location":"api/json_pointer/to_string/#return-value","title":"Return value","text":"

    A string representation of the JSON pointer

    "},{"location":"api/json_pointer/to_string/#notes","title":"Notes","text":"

    For each JSON pointer ptr, it holds:

    ptr == json_pointer(ptr.to_string());\n
    "},{"location":"api/json_pointer/to_string/#examples","title":"Examples","text":"Example

    The example shows the result of to_string.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // different JSON Pointers\n    json::json_pointer ptr1(\"\");\n    json::json_pointer ptr2(\"/foo\");\n    json::json_pointer ptr3(\"/foo/0\");\n    json::json_pointer ptr4(\"/\");\n    json::json_pointer ptr5(\"/a~1b\");\n    json::json_pointer ptr6(\"/c%d\");\n    json::json_pointer ptr7(\"/e^f\");\n    json::json_pointer ptr8(\"/g|h\");\n    json::json_pointer ptr9(\"/i\\\\j\");\n    json::json_pointer ptr10(\"/k\\\"l\");\n    json::json_pointer ptr11(\"/ \");\n    json::json_pointer ptr12(\"/m~0n\");\n\n    std::cout << \"\\\"\" << ptr1.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr2.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr3.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr4.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr5.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr6.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr7.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr8.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr9.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr10.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr11.to_string() << \"\\\"\\n\"\n              << \"\\\"\" << ptr12.to_string() << \"\\\"\" << std::endl;\n}\n

    Output:

    \"\"\n\"/foo\"\n\"/foo/0\"\n\"/\"\n\"/a~1b\"\n\"/c%d\"\n\"/e^f\"\n\"/g|h\"\n\"/i\\j\"\n\"/k\"l\"\n\"/ \"\n\"/m~0n\"\n
    "},{"location":"api/json_pointer/to_string/#version-history","title":"Version history","text":"
    • Since version 2.0.0.
    • Changed return type to string_t in version 3.11.0.
    "},{"location":"api/json_sax/","title":"nlohmann::json_sax","text":"
    template<typename BasicJsonType>\nstruct json_sax;\n

    This class describes the SAX interface used by sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input.

    "},{"location":"api/json_sax/#template-parameters","title":"Template parameters","text":"BasicJsonType a specialization of basic_json"},{"location":"api/json_sax/#member-types","title":"Member types","text":"
    • number_integer_t - BasicJsonType's type for numbers (integer)
    • number_unsigned_t - BasicJsonType's type for numbers (unsigned)
    • number_float_t - BasicJsonType's type for numbers (floating-point)
    • string_t - BasicJsonType's type for strings
    • binary_t - BasicJsonType's type for binary arrays
    "},{"location":"api/json_sax/#member-functions","title":"Member functions","text":"
    • binary (virtual) - a binary value was read
    • boolean (virtual) - a boolean value was read
    • end_array (virtual) - the end of an array was read
    • end_object (virtual) - the end of an object was read
    • key (virtual) - an object key was read
    • null (virtual) - a null value was read
    • number_float (virtual) - a floating-point number was read
    • number_integer (virtual) - an integer number was read
    • number_unsigned (virtual) - an unsigned integer number was read
    • parse_error (virtual) - a parse error occurred
    • start_array (virtual) - the beginning of an array was read
    • start_object (virtual) - the beginning of an object was read
    • string (virtual) - a string value was read
    "},{"location":"api/json_sax/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    • Support for binary values (binary_t, binary) added in version 3.8.0.
    "},{"location":"api/json_sax/binary/","title":"nlohmann::json_sax::binary","text":"
    virtual bool binary(binary_t& val) = 0;\n

    A binary value was read.

    "},{"location":"api/json_sax/binary/#parameters","title":"Parameters","text":"val (in) binary value"},{"location":"api/json_sax/binary/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/binary/#notes","title":"Notes","text":"

    It is safe to move the passed binary value.

    "},{"location":"api/json_sax/binary/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // CBOR byte string\n    std::vector<std::uint8_t> vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}};\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse CBOR\n    bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    binary(val=[...])\n\nresult: true\n
    "},{"location":"api/json_sax/binary/#version-history","title":"Version history","text":"
    • Added in version 3.8.0.
    "},{"location":"api/json_sax/boolean/","title":"nlohmann::json_sax::boolean","text":"
    virtual bool boolean(bool val) = 0;\n

    A boolean value was read.

    "},{"location":"api/json_sax/boolean/#parameters","title":"Parameters","text":"val (in) boolean value"},{"location":"api/json_sax/boolean/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/boolean/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/boolean/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_array/","title":"nlohmann::json_sax::end_array","text":"
    virtual bool end_array() = 0;\n

    The end of an array was read.

    "},{"location":"api/json_sax/end_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/end_object/","title":"nlohmann::json_sax::end_object","text":"
    virtual bool end_object() = 0;\n

    The end of an object was read.

    "},{"location":"api/json_sax/end_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/end_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/end_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/key/","title":"nlohmann::json_sax::key","text":"
    virtual bool key(string_t& val) = 0;\n

    An object key was read.

    "},{"location":"api/json_sax/key/#parameters","title":"Parameters","text":"val (in) object key"},{"location":"api/json_sax/key/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/key/#notes","title":"Notes","text":"

    It is safe to move the passed object key value.

    "},{"location":"api/json_sax/key/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/key/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/null/","title":"nlohmann::json_sax::null","text":"
    virtual bool null() = 0;\n

    A null value was read.

    "},{"location":"api/json_sax/null/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/null/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/null/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_float/","title":"nlohmann::json_sax::number_float","text":"
    virtual bool number_float(number_float_t val, const string_t& s) = 0;\n

    A floating-point number was read.

    "},{"location":"api/json_sax/number_float/#parameters","title":"Parameters","text":"val (in) floating-point value s (in) string representation of the original input"},{"location":"api/json_sax/number_float/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_float/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_float/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_integer/","title":"nlohmann::json_sax::number_integer","text":"
    virtual bool number_integer(number_integer_t val) = 0;\n

    An integer number was read.

    "},{"location":"api/json_sax/number_integer/#parameters","title":"Parameters","text":"val (in) integer value"},{"location":"api/json_sax/number_integer/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_integer/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_integer/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/number_unsigned/","title":"nlohmann::json_sax::number_unsigned","text":"
    virtual bool number_unsigned(number_unsigned_t val) = 0;\n

    An unsigned integer number was read.

    "},{"location":"api/json_sax/number_unsigned/#parameters","title":"Parameters","text":"val (in) unsigned integer value"},{"location":"api/json_sax/number_unsigned/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/number_unsigned/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/number_unsigned/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/parse_error/","title":"nlohmann::json_sax::parse_error","text":"
    virtual bool parse_error(std::size_t position,\n                         const std::string& last_token,\n                         const detail::exception& ex) = 0;\n

    A parse error occurred.

    "},{"location":"api/json_sax/parse_error/#parameters","title":"Parameters","text":"position (in) the position in the input where the error occurs last_token (in) the last read token ex (in) an exception object describing the error"},{"location":"api/json_sax/parse_error/#return-value","title":"Return value","text":"

    Whether parsing should proceed (must return false).

    "},{"location":"api/json_sax/parse_error/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/parse_error/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_array/","title":"nlohmann::json_sax::start_array","text":"
    virtual bool start_array(std::size_t elements) = 0;\n

    The beginning of an array was read.

    "},{"location":"api/json_sax/start_array/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_array/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_array/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_array/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_array/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/start_object/","title":"nlohmann::json_sax::start_object","text":"
    virtual bool start_object(std::size_t elements) = 0;\n

    The beginning of an object was read.

    "},{"location":"api/json_sax/start_object/#parameters","title":"Parameters","text":"elements (in) number of object elements or -1 if unknown"},{"location":"api/json_sax/start_object/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/start_object/#notes","title":"Notes","text":"

    Binary formats may report the number of elements.

    "},{"location":"api/json_sax/start_object/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/start_object/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/json_sax/string/","title":"nlohmann::json_sax::string","text":"
    virtual bool string(string_t& val) = 0;\n

    A string value was read.

    "},{"location":"api/json_sax/string/#parameters","title":"Parameters","text":"val (in) string value"},{"location":"api/json_sax/string/#return-value","title":"Return value","text":"

    Whether parsing should proceed.

    "},{"location":"api/json_sax/string/#notes","title":"Notes","text":"

    It is safe to move the passed string value.

    "},{"location":"api/json_sax/string/#examples","title":"Examples","text":"Example

    The example below shows how the SAX interface is used.

    #include <iostream>\n#include <iomanip>\n#include <sstream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\n// a simple event consumer that collects string representations of the passed\n// values; note inheriting from json::json_sax_t is not required, but can\n// help not to forget a required function\nclass sax_event_consumer : public json::json_sax_t\n{\n  public:\n    std::vector<std::string> events;\n\n    bool null() override\n    {\n        events.push_back(\"null()\");\n        return true;\n    }\n\n    bool boolean(bool val) override\n    {\n        events.push_back(\"boolean(val=\" + std::string(val ? \"true\" : \"false\") + \")\");\n        return true;\n    }\n\n    bool number_integer(number_integer_t val) override\n    {\n        events.push_back(\"number_integer(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_unsigned(number_unsigned_t val) override\n    {\n        events.push_back(\"number_unsigned(val=\" + std::to_string(val) + \")\");\n        return true;\n    }\n\n    bool number_float(number_float_t val, const string_t& s) override\n    {\n        events.push_back(\"number_float(val=\" + std::to_string(val) + \", s=\" + s + \")\");\n        return true;\n    }\n\n    bool string(string_t& val) override\n    {\n        events.push_back(\"string(val=\" + val + \")\");\n        return true;\n    }\n\n    bool start_object(std::size_t elements) override\n    {\n        events.push_back(\"start_object(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_object() override\n    {\n        events.push_back(\"end_object()\");\n        return true;\n    }\n\n    bool start_array(std::size_t elements) override\n    {\n        events.push_back(\"start_array(elements=\" + std::to_string(elements) + \")\");\n        return true;\n    }\n\n    bool end_array() override\n    {\n        events.push_back(\"end_array()\");\n        return true;\n    }\n\n    bool key(string_t& val) override\n    {\n        events.push_back(\"key(val=\" + val + \")\");\n        return true;\n    }\n\n    bool binary(json::binary_t& val) override\n    {\n        events.push_back(\"binary(val=[...])\");\n        return true;\n    }\n\n    bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override\n    {\n        events.push_back(\"parse_error(position=\" + std::to_string(position) + \", last_token=\" + last_token + \",\\n            ex=\" + std::string(ex.what()) + \")\");\n        return false;\n    }\n};\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, -38793],\n            \"DeletionDate\": null,\n            \"Distance\": 12.723374634\n        }\n    }]\n    )\";\n\n    // create a SAX event consumer object\n    sax_event_consumer sec;\n\n    // parse JSON\n    bool result = json::sax_parse(text, &sec);\n\n    // output the recorded events\n    for (auto& event : sec.events)\n    {\n        std::cout << event << \"\\n\";\n    }\n\n    // output the result of sax_parse\n    std::cout << \"\\nresult: \" << std::boolalpha << result << std::endl;\n}\n

    Output:

    start_object(elements=18446744073709551615)\nkey(val=Image)\nstart_object(elements=18446744073709551615)\nkey(val=Width)\nnumber_unsigned(val=800)\nkey(val=Height)\nnumber_unsigned(val=600)\nkey(val=Title)\nstring(val=View from 15th Floor)\nkey(val=Thumbnail)\nstart_object(elements=18446744073709551615)\nkey(val=Url)\nstring(val=http://www.example.com/image/481989943)\nkey(val=Height)\nnumber_unsigned(val=125)\nkey(val=Width)\nnumber_unsigned(val=100)\nend_object()\nkey(val=Animated)\nboolean(val=false)\nkey(val=IDs)\nstart_array(elements=18446744073709551615)\nnumber_unsigned(val=116)\nnumber_unsigned(val=943)\nnumber_unsigned(val=234)\nnumber_integer(val=-38793)\nend_array()\nkey(val=DeletionDate)\nnull()\nkey(val=Distance)\nnumber_float(val=12.723375, s=12.723374634)\nend_object()\nend_object()\nparse_error(position=460, last_token=12.723374634<U+000A>        }<U+000A>    }],\n            ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input)\n\nresult: false\n
    "},{"location":"api/json_sax/string/#version-history","title":"Version history","text":"
    • Added in version 3.2.0.
    "},{"location":"api/macros/","title":"Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the macro overview page.

    "},{"location":"api/macros/#runtime-assertions","title":"Runtime assertions","text":"
    • JSON_ASSERT(x) - control behavior of runtime assertions
    "},{"location":"api/macros/#exceptions","title":"Exceptions","text":"
    • JSON_CATCH_USER(exception)JSON_THROW_USER(exception)JSON_TRY_USER - control exceptions
    • JSON_DIAGNOSTICS - control extended diagnostics
    • JSON_DIAGNOSTIC_POSITIONS - access positions of elements
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/#language-support","title":"Language support","text":"
    • JSON_HAS_CPP_11JSON_HAS_CPP_14JSON_HAS_CPP_17JSON_HAS_CPP_20 - set supported C++ standard
    • JSON_HAS_FILESYSTEMJSON_HAS_EXPERIMENTAL_FILESYSTEM - control std::filesystem support
    • JSON_HAS_RANGES - control std::ranges support
    • JSON_HAS_THREE_WAY_COMPARISON - control 3-way comparison support
    • JSON_NO_IO - switch off functions relying on certain C++ I/O headers
    • JSON_SKIP_UNSUPPORTED_COMPILER_CHECK - do not warn about unsupported compilers
    • JSON_USE_GLOBAL_UDLS - place user-defined string literals (UDLs) into the global namespace
    "},{"location":"api/macros/#library-version","title":"Library version","text":"
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    • NLOHMANN_JSON_VERSION_MAJORNLOHMANN_JSON_VERSION_MINORNLOHMANN_JSON_VERSION_PATCH - library version information
    "},{"location":"api/macros/#library-namespace","title":"Library namespace","text":"
    • NLOHMANN_JSON_NAMESPACE - full name of the nlohmann namespace
    • NLOHMANN_JSON_NAMESPACE_BEGINNLOHMANN_JSON_NAMESPACE_END - open and close the library namespace
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION - disable the version component of the inline namespace
    "},{"location":"api/macros/#type-conversions","title":"Type conversions","text":"
    • JSON_DISABLE_ENUM_SERIALIZATION - switch off default serialization/deserialization functions for enums
    • JSON_USE_IMPLICIT_CONVERSIONS - control implicit conversions
    "},{"location":"api/macros/#comparison-behavior","title":"Comparison behavior","text":"
    • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON - control comparison of discarded values
    "},{"location":"api/macros/#serializationdeserialization-macros","title":"Serialization/deserialization macros","text":""},{"location":"api/macros/#enums","title":"Enums","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM - serialize/deserialize an enum
    "},{"location":"api/macros/#classes-and-structs","title":"Classes and structs","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE - serialize/deserialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class with private members; uses default values
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class with private members
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE - serialize/deserialize a non-derived class
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a non-derived class; uses default values
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a non-derived class

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE - serialize/deserialize a derived class with private members

    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class with private members; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class with private members
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE - serialize/deserialize a derived class
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT - serialize/deserialize a derived class; uses default values
    • NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE - serialize a derived class
    "},{"location":"api/macros/json_assert/","title":"JSON_ASSERT","text":"
    #define JSON_ASSERT(x) /* value */\n

    This macro controls which code is executed for runtime assertions of the library.

    "},{"location":"api/macros/json_assert/#parameters","title":"Parameters","text":"x (in) expression of scalar type"},{"location":"api/macros/json_assert/#default-definition","title":"Default definition","text":"

    The default value is assert(x).

    #define JSON_ASSERT(x) assert(x)\n

    Therefore, assertions can be switched off by defining NDEBUG.

    "},{"location":"api/macros/json_assert/#notes","title":"Notes","text":"
    • The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling operator[] with a missing object key on a const object). See page runtime assertions for more information.
    • Defining the macro to code that does not call std::abort may leave the library in an undefined state.
    • The macro is undefined outside the library.
    "},{"location":"api/macros/json_assert/#examples","title":"Examples","text":"Example 1: default behavior

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    Example 2: user-defined behavior

    The assertion reporting can be changed by defining JSON_ASSERT(x) differently.

    #include <cstdio>\n#include <cstdlib>\n#define JSON_ASSERT(x) if(!(x)){fprintf(stderr, \"assertion error in %s\\n\", __FUNCTION__); std::abort();}\n\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    assertion error in operator[]\n
    "},{"location":"api/macros/json_assert/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_diagnostic_positions/","title":"JSON_DIAGNOSTIC_POSITIONS","text":"
    #define JSON_DIAGNOSTIC_POSITIONS /* value */\n

    This macro enables position diagnostics for generated JSON objects.

    When enabled, two new member functions start_pos() and end_pos() are added to basic_json values. If the value was created by calling theparse function, then these functions allow to query the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, std::string::npos is returned.

    start_pos() returns the position of the first character of a given value in the original JSON string, while end_pos() returns the position of the character following the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represent the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (true, false, null), respectively.

    JSON type return value start_pos() return value end_pos() object position of the opening { position after the closing } array position of the opening [ position after the closing ] string position of the opening \" position after the closing \" number position of the first character position after the last character boolean position of t for true and f for false position after e null position of n position after l

    Given the above, end_pos()-start_pos() for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes.

    Note that enabling this macro increases the size of every JSON value by two std::size_t fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages.

    "},{"location":"api/macros/json_diagnostic_positions/#default-definition","title":"Default definition","text":"

    The default value is 0 (position diagnostics are switched off).

    #define JSON_DIAGNOSTIC_POSITIONS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostic_positions/#notes","title":"Notes","text":"

    CMake option

    Diagnostic positions can also be controlled with the CMake option JSON_Diagnostic_Positions (OFF by default) which defines JSON_DIAGNOSTIC_POSITIONS accordingly.

    Availability

    Diagnostic positions are only available if the value was created by the parse function. The sax_parse function or all other means to create a JSON value do not set the diagnostic positions and start_pos() and end_pos() will only return std::string::npos for these values.

    Invalidation

    The returned positions are only valid as long as the JSON value is not changed. The positions are not updated when the JSON value is changed.

    "},{"location":"api/macros/json_diagnostic_positions/#examples","title":"Examples","text":"Example: retrieving positions
    #include <iostream>\n\n#define JSON_DIAGNOSTIC_POSITIONS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string json_string = R\"(\n    {\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n    )\";\n    json j = json::parse(json_string);\n\n    std::cout << \"Root diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos: \" << j.start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j.end_pos() << \"\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{\\n        \\\"address\\\": {\\n            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\\n    }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << \"\\n\\n\";\n\n    std::cout << \"address diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"{            \\\"street\\\": \\\"Fake Street\\\",\\n            \\\"housenumber\\\": 1\\n        }\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"].start_pos(), j[\"address\"].end_pos() - j[\"address\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"street diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"street\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"street\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"\\\"Fake Street\\\"\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"street\"].start_pos(), j[\"address\"][\"street\"].end_pos() - j[\"address\"][\"street\"].start_pos()) << \"\\n\\n\";\n\n    std::cout << \"housenumber diagnostic positions: \\n\";\n    std::cout << \"\\tstart_pos:\" << j[\"address\"][\"housenumber\"].start_pos() << '\\n';\n    std::cout << \"\\tend_pos:\" << j[\"address\"][\"housenumber\"].end_pos() << \"\\n\\n\";\n    std::cout << \"Original string: \\n\";\n    std::cout << \"1\" << \"\\n\";\n    std::cout << \"Parsed string: \\n\";\n    std::cout << json_string.substr(j[\"address\"][\"housenumber\"].start_pos(), j[\"address\"][\"housenumber\"].end_pos() - j[\"address\"][\"housenumber\"].start_pos()) << \"\\n\\n\";\n}\n

    Output:

    Root diagnostic positions: \n    start_pos: 5\n    end_pos:109\nOriginal string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\nParsed string: \n{\n        \"address\": {\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n    }\n\naddress diagnostic positions: \n    start_pos:26\n    end_pos:103\n\nOriginal string: \n{            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\nParsed string: \n{\n            \"street\": \"Fake Street\",\n            \"housenumber\": 1\n        }\n\nstreet diagnostic positions: \n    start_pos:50\n    end_pos:63\n\nOriginal string: \n\"Fake Street\"\nParsed string: \n\"Fake Street\"\n\nhousenumber diagnostic positions: \n    start_pos:92\n    end_pos:93\n\nOriginal string: \n1\nParsed string: \n1\n

    The output shows the start/end positions of all the objects and fields in the JSON string.

    "},{"location":"api/macros/json_diagnostic_positions/#version-history","title":"Version history","text":"
    • Added in version 3.12.0.
    "},{"location":"api/macros/json_diagnostics/","title":"JSON_DIAGNOSTICS","text":"
    #define JSON_DIAGNOSTICS /* value */\n

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    "},{"location":"api/macros/json_diagnostics/#default-definition","title":"Default definition","text":"

    The default value is 0 (extended diagnostics are switched off).

    #define JSON_DIAGNOSTICS 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_diagnostics/#notes","title":"Notes","text":"

    ABI compatibility

    As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names.

    This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior.

    Where possible, it is still recommended that all code define this the same way for maximum interoperability.

    CMake option

    Diagnostic messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which defines JSON_DIAGNOSTICS accordingly.

    "},{"location":"api/macros/json_diagnostics/#examples","title":"Examples","text":"Example 1: default behavior
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    Example 2: extended diagnostic messages
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    "},{"location":"api/macros/json_diagnostics/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    • As of version 3.11.0 the definition is allowed to vary between translation units.
    "},{"location":"api/macros/json_disable_enum_serialization/","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"
    #define JSON_DISABLE_ENUM_SERIALIZATION /* value */\n

    When defined to 1, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM (see arbitrary type conversions for more details).

    Parsing or serializing an enum will result in a compiler error.

    This works for both unscoped and scoped enums.

    "},{"location":"api/macros/json_disable_enum_serialization/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_DISABLE_ENUM_SERIALIZATION 0\n
    "},{"location":"api/macros/json_disable_enum_serialization/#notes","title":"Notes","text":"

    CMake option

    Enum serialization can also be controlled with the CMake option JSON_DisableEnumSerialization (OFF by default) which defines JSON_DISABLE_ENUM_SERIALIZATION accordingly.

    "},{"location":"api/macros/json_disable_enum_serialization/#examples","title":"Examples","text":"Example 1: Disabled behavior

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, meaning the code below does not compile.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nint main()\n{\n    // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    const json j = Choice::first; \n\n    // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not\n    Choice ch = j.template get<Choice>();\n}\n
    Example 2: Serialize enum macro

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses NLOHMANN_JSON_SERIALIZE_ENUM to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Choice,\n{\n    { Choice::first, \"first\" },\n    { Choice::second, \"second\" },\n})\n\nint main()\n{\n    // uses user-defined to_json function defined by macro\n    const json j = Choice::first; \n\n    // uses user-defined from_json function defined by macro\n    Choice ch = j.template get<Choice>();\n}\n
    Example 3: User-defined serialization/deserialization functions

    The code below forces the library not to create default serialization/deserialization functions from_json and to_json, but uses user-defined functions to parse and serialize the enum.

    #define JSON_DISABLE_ENUM_SERIALIZATION 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nenum class Choice\n{\n    first,\n    second,\n};\n\nvoid from_json(const json& j, Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nvoid to_json(json& j, const Choice& ch)\n{\n    auto value = j.template get<std::string>();\n    if (value == \"first\")\n    {\n        ch = Choice::first;\n    }\n    else if (value == \"second\")\n    {\n        ch = Choice::second;\n    }\n}\n\nint main()\n{\n    // uses user-defined to_json function\n    const json j = Choice::first; \n\n    // uses user-defined from_json function\n    Choice ch = j.template get<Choice>();\n}\n
    "},{"location":"api/macros/json_disable_enum_serialization/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_SERIALIZE_ENUM
    "},{"location":"api/macros/json_disable_enum_serialization/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_cpp_11/","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"
    #define JSON_HAS_CPP_11\n#define JSON_HAS_CPP_14\n#define JSON_HAS_CPP_17\n#define JSON_HAS_CPP_20\n

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    "},{"location":"api/macros/json_has_cpp_11/#default-definition","title":"Default definition","text":"

    The default value is detected based on preprocessor macros such as __cplusplus, _HAS_CXX17, or _MSVC_LANG.

    "},{"location":"api/macros/json_has_cpp_11/#notes","title":"Notes","text":"
    • JSON_HAS_CPP_11 is always defined.
    • All macros are undefined outside the library.
    "},{"location":"api/macros/json_has_cpp_11/#examples","title":"Examples","text":"Example

    The code below forces the library to use the C++14 standard:

    #define JSON_HAS_CPP_14 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_cpp_11/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_filesystem/","title":"JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"
    #define JSON_HAS_FILESYSTEM /* value */\n#define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */\n

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    "},{"location":"api/macros/json_has_filesystem/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_lib_filesystem, __cpp_lib_experimental_filesystem, __has_include(<filesystem>), or __has_include(<experimental/filesystem>).

    "},{"location":"api/macros/json_has_filesystem/#notes","title":"Notes","text":"
    • Note that older compilers or older versions of libstd++ also require the library stdc++fs to be linked to for filesystem support.
    • Both macros are undefined outside the library.
    "},{"location":"api/macros/json_has_filesystem/#examples","title":"Examples","text":"Example

    The code below forces the library to use the header <experimental/filesystem>.

    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_filesystem/#version-history","title":"Version history","text":"
    • Added in version 3.10.5.
    "},{"location":"api/macros/json_has_ranges/","title":"JSON_HAS_RANGES","text":"
    #define JSON_HAS_RANGES /* value */\n

    This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_ranges/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro __cpp_lib_ranges.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_ranges/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for ranges:

    #define JSON_HAS_RANGES 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_ranges/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_has_static_rtti/","title":"JSON_HAS_STATIC_RTTI","text":"
    #define JSON_HAS_STATIC_RTTI /* value */\n

    This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_static_rtti/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macro _HAS_STATIC_RTTI.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_static_rtti/#examples","title":"Examples","text":"Example

    The code below forces the library to enable support for libraries with RTTI dependence:

    #define JSON_HAS_STATIC_RTTI 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_static_rtti/#version-history","title":"Version history","text":"
    • Added in version 3.11.3.
    "},{"location":"api/macros/json_has_three_way_comparison/","title":"JSON_HAS_THREE_WAY_COMPARISON","text":"
    #define JSON_HAS_THREE_WAY_COMPARISON /* value */\n

    This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are 1 when supported or 0 when unsupported.

    "},{"location":"api/macros/json_has_three_way_comparison/#default-definition","title":"Default definition","text":"

    The default value is detected based on the preprocessor macros __cpp_impl_three_way_comparison and __cpp_lib_three_way_comparison.

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_has_three_way_comparison/#examples","title":"Examples","text":"Example

    The code below forces the library to use 3-way comparison:

    #define JSON_HAS_THREE_WAY_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_has_three_way_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_no_io/","title":"JSON_NO_IO","text":"
    #define JSON_NO_IO\n

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    "},{"location":"api/macros/json_no_io/#default-definition","title":"Default definition","text":"

    By default, JSON_NO_IO is not defined.

    #undef JSON_NO_IO\n
    "},{"location":"api/macros/json_no_io/#examples","title":"Examples","text":"Example

    The code below forces the library not to use the headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream>.

    #define JSON_NO_IO 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_no_io/#version-history","title":"Version history","text":"
    • Added in version 3.10.0.
    "},{"location":"api/macros/json_noexception/","title":"JSON_NOEXCEPTION","text":"
    #define JSON_NOEXCEPTION\n

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION. When defining JSON_NOEXCEPTION, try is replaced by if (true), catch is replaced by if (false), and throw is replaced by std::abort().

    The same effect is achieved by setting the compiler flag -fno-exceptions.

    "},{"location":"api/macros/json_noexception/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_NOEXCEPTION\n
    "},{"location":"api/macros/json_noexception/#notes","title":"Notes","text":"

    The explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    "},{"location":"api/macros/json_noexception/#examples","title":"Examples","text":"Example

    The code below switches off exceptions in the library.

    #define JSON_NOEXCEPTION 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_noexception/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    "},{"location":"api/macros/json_noexception/#version-history","title":"Version history","text":"

    Added in version 2.1.0.

    "},{"location":"api/macros/json_skip_library_version_check/","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"
    #define JSON_SKIP_LIBRARY_VERSION_CHECK\n

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    "},{"location":"api/macros/json_skip_library_version_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_LIBRARY_VERSION_CHECK\n
    "},{"location":"api/macros/json_skip_library_version_check/#notes","title":"Notes","text":"

    ABI compatibility

    Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible.

    "},{"location":"api/macros/json_skip_library_version_check/#examples","title":"Examples","text":"

    Example

    The following warning will be shown in case a different version of the library was already included:

    Already included a different version of the library!\n
    "},{"location":"api/macros/json_skip_library_version_check/#version-history","title":"Version history","text":"

    Added in version 3.11.0.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"
    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#default-definition","title":"Default definition","text":"

    By default, the macro is not defined.

    #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#examples","title":"Examples","text":"Example

    The code below switches off the check whether the compiler is supported.

    #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_skip_unsupported_compiler_check/#version-history","title":"Version history","text":"

    Added in version 3.2.0.

    "},{"location":"api/macros/json_throw_user/","title":"JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER","text":"
    // (1)\n#define JSON_CATCH_USER(exception) /* value */\n// (2)\n#define JSON_THROW_USER(exception) /* value */\n// (3)\n#define JSON_TRY_USER /* value */\n

    Controls how exceptions are handled by the library.

    1. This macro overrides catch calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches std::out_of_range exceptions internally to rethrow them as json::out_of_range exceptions. The macro is always followed by a scope.
    2. This macro overrides throw calls inside the library. The argument is the exception to be thrown. Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.
    3. This macro overrides try calls inside the library. It has no arguments and is always followed by a scope.
    "},{"location":"api/macros/json_throw_user/#parameters","title":"Parameters","text":"exception (in) an exception type"},{"location":"api/macros/json_throw_user/#default-definition","title":"Default definition","text":"

    By default, the macros map to their respective C++ keywords:

    #define JSON_CATCH_USER(exception) catch(exception)\n#define JSON_THROW_USER(exception) throw exception\n#define JSON_TRY_USER              try\n

    When exceptions are switched off, the try block is executed unconditionally, and throwing exceptions is replaced by calling std::abort to make reaching the throw branch abort the process.

    #define JSON_THROW_USER(exception) std::abort()\n#define JSON_TRY_USER              if (true)\n#define JSON_CATCH_USER(exception) if (false)\n
    "},{"location":"api/macros/json_throw_user/#examples","title":"Examples","text":"Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n
    "},{"location":"api/macros/json_throw_user/#see-also","title":"See also","text":"
    • Switch off exceptions for more information how to switch off exceptions
    • JSON_NOEXCEPTION - switch off exceptions
    "},{"location":"api/macros/json_throw_user/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"api/macros/json_use_global_udls/","title":"JSON_USE_GLOBAL_UDLS","text":"
    #define JSON_USE_GLOBAL_UDLS /* value */\n

    When defined to 1, the user-defined string literals (UDLs) are placed into the global namespace instead of nlohmann::literals::json_literals.

    "},{"location":"api/macros/json_use_global_udls/#default-definition","title":"Default definition","text":"

    The default value is 1.

    #define JSON_USE_GLOBAL_UDLS 1\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_global_udls/#notes","title":"Notes","text":"

    Future behavior change

    The user-defined string literals will be removed from the global namespace in the next major release of the library.

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed. Refer to any of the string literals for details.

    CMake option

    The placement of user-defined string literals can also be controlled with the CMake option JSON_GlobalUDLs (ON by default) which defines JSON_USE_GLOBAL_UDLS accordingly.

    "},{"location":"api/macros/json_use_global_udls/#examples","title":"Examples","text":"Example 1: Default behavior

    The code below shows the default behavior using the _json UDL.

    #include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    Example 2: Namespaced UDLs

    The code below shows how UDLs need to be brought into scope before using _json when JSON_USE_GLOBAL_UDLS is defined to 0.

    #define JSON_USE_GLOBAL_UDLS 0\n#include <nlohmann/json.hpp>\n\n#include <iostream>\n\nint main()\n{\n    // auto j = \"42\"_json; // This line would fail to compile,\n                           // because the UDLs are not in the global namespace\n\n    // Bring the UDLs into scope\n    using namespace nlohmann::json_literals;\n\n    auto j = \"42\"_json;\n\n    std::cout << j << std::endl;\n}\n

    Output:

    42\n
    "},{"location":"api/macros/json_use_global_udls/#see-also","title":"See also","text":"
    • operator\"\"_json
    • operator\"\"_json_pointer
    "},{"location":"api/macros/json_use_global_udls/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/json_use_implicit_conversions/","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"
    #define JSON_USE_IMPLICIT_CONVERSIONS /* value */\n

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects operator ValueType.

    "},{"location":"api/macros/json_use_implicit_conversions/#default-definition","title":"Default definition","text":"

    By default, implicit conversions are enabled.

    #define JSON_USE_IMPLICIT_CONVERSIONS 1\n
    "},{"location":"api/macros/json_use_implicit_conversions/#notes","title":"Notes","text":"

    Future behavior change

    Implicit conversions will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    CMake option

    Implicit conversions can also be controlled with the CMake option JSON_ImplicitConversions (ON by default) which defines JSON_USE_IMPLICIT_CONVERSIONS accordingly.

    "},{"location":"api/macros/json_use_implicit_conversions/#examples","title":"Examples","text":"Example

    This is an example for an implicit conversion:

    json j = \"Hello, world!\";\nstd::string s = j;\n

    When JSON_USE_IMPLICIT_CONVERSIONS is defined to 0, the code above does no longer compile. Instead, it must be written like this:

    json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    "},{"location":"api/macros/json_use_implicit_conversions/#see-also","title":"See also","text":"
    • operator ValueType - get a value (implicit)
    • get - get a value (explicit)
    "},{"location":"api/macros/json_use_implicit_conversions/#version-history","title":"Version history","text":"
    • Added in version 3.9.0.
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/","title":"JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON","text":"
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */\n

    This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1 to enable or 0 to disable (default).

    When enabled, comparisons involving at least one discarded JSON value yield results as follows:

    Operator Result == false != true < false <= true >= true > false

    Otherwise, comparisons involving at least one discarded JSON value always yield false.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#notes","title":"Notes","text":"

    Inconsistent behavior in C++20 and beyond

    When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.

    • The 3-way comparison operator (<=>) will always give the correct result (std::partial_ordering::unordered) regardless of the value of JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON.
    • Overloads for the equality and relational operators emulate the legacy behavior.

    Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.

    See operator<=> for more information on 3-way comparison.

    Deprecation

    The legacy comparison behavior is deprecated and may be removed in a future major version release.

    New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.

    CMake option

    Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison (OFF by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON accordingly.

    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#examples","title":"Examples","text":"Example

    The code below switches on the legacy discarded value comparison behavior in the library.

    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n\n...\n
    "},{"location":"api/macros/json_use_legacy_discarded_value_comparison/#version-history","title":"Version history","text":"
    • Added in version 3.11.0.
    "},{"location":"api/macros/nlohmann_define_derived_type/","title":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
    // (1)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...)\n// (2)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (3)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n\n// (4)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...)\n// (5)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...)\n// (6)\n#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...)\n

    These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object.

    • Macros 1, 2 and 3 are to be defined inside the class/struct to create code for. Like NLOHMANN_DEFINE_TYPE_INTRUSIVE, they can access private members.
    • Macros 4, 5 and 6 are to be defined outside the class/struct to create code for, but inside its namespace. Like NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, they cannot access private members.

    The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type must be already serializable/deserializable.

    • Macros 1 and 4 will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    • Macros 2 and 5 will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_derived_type/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize base_type (in) name of the base type (class, struct) type is derived from member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_derived_type/#default-definition","title":"Default definition","text":"

    Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);\nfriend void from_json(const nlohmann::json&, type&);\n

    Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);\nvoid from_json(const nlohmann::json&, type&);\n

    Macros 3 and 6 add one function to the namespace which take care of the serialization only:

    void to_json(nlohmann::json&, const type&);\n

    In first two cases, they call the to_json/from_json functions of the base type before serializing/deserializing the members of the derived type:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\nvoid to_json(nlohmann::json& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n\nvoid from_json(const nlohmann::json& j, B& b) {\n    nlohmann::from_json(j, static_cast<A&>(b));\n    // ...\n}\n

    In the third case, only to_json will be called:

    class A { /* ... */ };\nclass B : public A { /* ... */ };\n\nvoid to_json(nlohmann::json& j, const B& b) {\n    nlohmann::to_json(j, static_cast<const A&>(b));\n    // ...\n}\n
    "},{"location":"api/macros/nlohmann_define_derived_type/#notes","title":"Notes","text":"

    Prerequisites

    • Macros 1, 2, and 3 have the same prerequisites of NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    • Macros 4, 5, and 6 have the same prerequisites of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • Serialization/deserialization of base types must be defined.

    Implementation limits

    See Implementation limits for NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, respectively.

    "},{"location":"api/macros/nlohmann_define_derived_type/#examples","title":"Examples","text":"NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing nlohmann::json;\n\nclass A\n{\n  private:\n    double Aa = 0.0;\n    double Ab = 0.0;\n\n  public:\n    A() = default;\n    A(double a, double b) : Aa(a), Ab(b) {}\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab)\n};\n\nclass B : public A\n{\n  private:\n    int Ba = 0;\n    int Bb = 0;\n\n  public:\n    B() = default;\n    B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {}\n    NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb)\n};\n\nint main()\n{\n    B example(23, 42, 3.142, 1.777);\n    json example_json = example;\n\n    std::cout << std::setw(4) << example_json << std::endl;\n}\n

    Output:

    {\n    \"Aa\": 3.142,\n    \"Ab\": 1.777,\n    \"Ba\": 23,\n    \"Bb\": 42\n}\n

    Notes:

    • A and B are default-constructible. This is a requirement for using the macro.
    • A has private members and is not a derived class. Hence, macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used.
    • As B is a derived class, NLOHMANN_DEFINE_TYPE_INTRUSIVE is not applicable, but NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE must be used.
    • The macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE is used inside the class use as NLOHMANN_DEFINE_TYPE_INTRUSIVE.
    "},{"location":"api/macros/nlohmann_define_derived_type/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined inside a non-derived type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros that can be defined outside a non-derived type.
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_derived_type/#version-history","title":"Version history","text":"
    1. Added in version 3.11.x.
    2. Added in version 3.11.x.
    3. Added in version 3.11.x.
    4. Added in version 3.11.x.
    5. Added in version 3.11.x.
    6. Added in version 3.11.x.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/","title":"NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined inside the class/struct to create code for. Unlike NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    friend void to_json(nlohmann::json&, const type&);\nfriend void from_json(const nlohmann::json&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3)). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used inside the type (class/struct).

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE is used inside the class.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    friend void from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n        nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n        nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT is used inside the class.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n\n    friend void from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n    {\n        person nlohmann_json_default_obj;\n        nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n        nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n        nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age)\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT.
    • ns::person has private member variables. This makes NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE applicable, but not NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE.
    • The macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE is used inside the class.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nclass person\n{\n  private:\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n  public:\n    // No default constructor\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n\n    friend void to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n    {\n        nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n        nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n        nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n    }\n};\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined outside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/","title":"NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE","text":"
    #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...)              // (1)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2)\n#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3)\n

    These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined outside the class/struct to create code for, but inside its namespace. Unlike NLOHMANN_DEFINE_TYPE_INTRUSIVE, it cannot access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members.

    1. Will use at during deserialization and will throw out_of_range.403 if a key is missing in the JSON object.
    2. Will use value during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated from_json() function default constructs an object and uses its values as the defaults when calling the value function.
    3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization in required.

    Summary:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#parameters","title":"Parameters","text":"type (in) name of the type (class, struct) to serialize/deserialize member (in) name of the (public) member variable to serialize/deserialize; up to 64 members can be given as comma-separated list"},{"location":"api/macros/nlohmann_define_type_non_intrusive/#default-definition","title":"Default definition","text":"

    The macros add two functions to the namespace which take care of the serialization and deserialization:

    void to_json(nlohmann::json&, const type&);\nvoid from_json(const nlohmann::json&, type&); // except (3)\n

    See examples below for the concrete generated code.

    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#notes","title":"Notes","text":"

    Prerequisites

    1. The type type must be default constructible (except (3). See How can I use get() for non-default constructible/non-copyable types? for how to overcome this limitation.
    2. The macro must be used outside the type (class/struct).
    3. The passed members must be public.

    Implementation limits

    • The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#examples","title":"Examples","text":"Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\ndeserialization failed: [json.exception.out_of_range.403] key 'age' not found\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization yields an exception. To fall back to the default value, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT can be used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\nvoid from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n{\n    nlohmann_json_t.name = nlohmann_json_j.at(\"name\");\n    nlohmann_json_t.address = nlohmann_json_j.at(\"address\");\n    nlohmann_json_t.age = nlohmann_json_j.at(\"age\");\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    try\n    {\n        auto p3 = j3.template get<ns::person>();\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << \"deserialization failed: \" << e.what() << std::endl;\n    }\n}\n
    Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\nroundtrip: {\"address\":\"742 Evergreen Terrace\",\"age\":-1,\"name\":\"Maggie Simpson\"}\n

    Notes:

    • ns::person is default-constructible. This is a requirement for using the macro.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT is used outside the class, but inside its namespace ns.
    • A missing key \"age\" in the deserialization does not yield an exception. Instead, the default value -1 is used.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name = \"John Doe\";\n    std::string address = \"123 Fake St\";\n    int age = -1;\n\n    person() = default;\n    person(std::string name_, std::string address_, int age_)\n        : name(std::move(name_)), address(std::move(address_)), age(age_)\n    {}\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n\nvoid from_json(const nlohmann::json& nlohmann_json_j, person& nlohmann_json_t)\n{\n    person nlohmann_json_default_obj;\n    nlohmann_json_t.name = nlohmann_json_j.value(\"name\", nlohmann_json_default_obj.name);\n    nlohmann_json_t.address = nlohmann_json_j.value(\"address\", nlohmann_json_default_obj.address);\n    nlohmann_json_t.age = nlohmann_json_j.value(\"age\", nlohmann_json_default_obj.age);\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n\n    // deserialization: json -> person\n    json j2 = R\"({\"address\": \"742 Evergreen Terrace\", \"age\": 40, \"name\": \"Homer Simpson\"})\"_json;\n    auto p2 = j2.template get<ns::person>();\n\n    // incomplete deserialization:\n    json j3 = R\"({\"address\": \"742 Evergreen Terrace\", \"name\": \"Maggie Simpson\"})\"_json;\n    auto p3 = j3.template get<ns::person>();\n    std::cout << \"roundtrip: \" << json(p3) << std::endl;\n}\n

    Note how a default-initialized person object is used in the from_json to fill missing values.

    Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Consider the following complete example:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nNLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age)\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n

    Output:

    serialization: {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n

    Notes:

    • ns::person is non-default-constructible. This allows this macro to be used instead of NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
    • ns::person has only public member variables. This makes NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE applicable.
    • The macro NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE is used outside the class, but inside its namespace ns.

    The macro is equivalent to:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nnamespace ns\n{\nstruct person\n{\n    std::string name;\n    std::string address;\n    int age;\n};\n\nvoid to_json(nlohmann::json& nlohmann_json_j, const person& nlohmann_json_t)\n{\n    nlohmann_json_j[\"name\"] = nlohmann_json_t.name;\n    nlohmann_json_j[\"address\"] = nlohmann_json_t.address;\n    nlohmann_json_j[\"age\"] = nlohmann_json_t.age;\n}\n} // namespace ns\n\nint main()\n{\n    ns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n    // serialization: person -> json\n    json j = p;\n    std::cout << \"serialization: \" << j << std::endl;\n}\n
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#see-also","title":"See also","text":"
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE for a similar macro that can be defined inside the type.
    • NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE for similar macros for derived types
    • Arbitrary Type Conversions for an overview.
    "},{"location":"api/macros/nlohmann_define_type_non_intrusive/#version-history","title":"Version history","text":"
    1. Added in version 3.9.0.
    2. Added in version 3.11.0.
    3. Added in version 3.11.3.
    "},{"location":"api/macros/nlohmann_json_namespace/","title":"NLOHMANN_JSON_NAMESPACE","text":"
    #define NLOHMANN_JSON_NAMESPACE /* value */\n

    This macro evaluates to the full name of the nlohmann namespace.

    "},{"location":"api/macros/nlohmann_json_namespace/#default-definition","title":"Default definition","text":"

    The default value consists of the root namespace (nlohmann) and an inline ABI namespace. See nlohmann Namespace for details.

    When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library.

    "},{"location":"api/macros/nlohmann_json_namespace/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE instead of just nlohmann, as well as how to output the value of NLOHMANN_JSON_NAMESPACE.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\n// possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann\nusing json = NLOHMANN_JSON_NAMESPACE::json;\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi_v3_11_3\n
    "},{"location":"api/macros/nlohmann_json_namespace/#see-also","title":"See also","text":"
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/","title":"NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END","text":"
    #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */  // (1)\n#define NLOHMANN_JSON_NAMESPACE_END   /* value */  // (2)\n

    These macros can be used to open and close the nlohmann namespace. See nlohmann Namespace for details.

    1. Opens the namespace.
    2. Closes the namespace.
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#default-definition","title":"Default definition","text":"

    The default definitions open and close the nlohmann namespace. The precise definition of [NLOHMANN_JSON_NAMESPACE_BEGIN] varies as described here.

    1. Default definition of NLOHMANN_JSON_NAMESPACE_BEGIN:

      namespace nlohmann\n{\ninline namespace json_abi_v3_11_2\n{\n
    2. Default definition of NLOHMANN_JSON_NAMESPACE_END:

      }  // namespace json_abi_v3_11_2\n}  // namespace nlohmann\n

    When these macros are not defined, the library will define them to their default definitions.

    "},{"location":"api/macros/nlohmann_json_namespace_begin/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_BEGIN/NLOHMANN_JSON_NAMESPACE_END from the How do I convert third-party types? page.

    #include <iostream>\n#include <optional>\n#include <nlohmann/json.hpp>\n\n// partial specialization (see https://json.nlohmann.me/features/arbitrary_types/)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<std::optional<T>>\n{\n    static void to_json(json& j, const std::optional<T>& opt)\n    {\n        if (opt == std::nullopt)\n        {\n            j = nullptr;\n        }\n        else\n        {\n            j = *opt;\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n\nint main()\n{\n    std::optional<int> o1 = 1;\n    std::optional<int> o2 = std::nullopt;\n\n    NLOHMANN_JSON_NAMESPACE::json j;\n    j.push_back(o1);\n    j.push_back(o2);\n    std::cout << j << std::endl;\n}\n

    Output:

    [1,null]\n
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_NO_VERSION
    "},{"location":"api/macros/nlohmann_json_namespace_begin/#version-history","title":"Version history","text":"
    • Added in version 3.11.0. Changed inline namespace name in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/","title":"NLOHMANN_JSON_NAMESPACE_NO_VERSION","text":"
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */\n

    If defined to 1, the version component is omitted from the inline namespace. See nlohmann Namespace for details.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#default-definition","title":"Default definition","text":"

    The default value is 0.

    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0\n

    When the macro is not defined, the library will define it to its default value.

    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#examples","title":"Examples","text":"Example

    The example shows how to use NLOHMANN_JSON_NAMESPACE_NO_VERSION to disable the version component of the inline namespace.

    #include <iostream>\n\n#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1\n#include <nlohmann/json.hpp>\n\n// macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal\n#define Q(x) #x\n#define QUOTE(x) Q(x)\n\nint main()\n{\n    std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl;\n}\n

    Output:

    nlohmann::json_abi\n
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#see-also","title":"See also","text":"
    • nlohmann Namespace
    • NLOHMANN_JSON_NAMESPACE
    • NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END
    "},{"location":"api/macros/nlohmann_json_namespace_no_version/#version-history","title":"Version history","text":"
    • Added in version 3.11.2.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/","title":"NLOHMANN_JSON_SERIALIZE_ENUM","text":"
    #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)\n

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    The NLOHMANN_JSON_SERIALIZE_ENUM allows to define a user-defined serialization for every enumerator.

    "},{"location":"api/macros/nlohmann_json_serialize_enum/#parameters","title":"Parameters","text":"type (in) name of the enum to serialize/deserialize conversion (in) a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list"},{"location":"api/macros/nlohmann_json_serialize_enum/#default-definition","title":"Default definition","text":"

    The macros add two friend functions to the class which take care of the serialization and deserialization:

    template<typename BasicJsonType>\ninline void to_json(BasicJsonType& j, const type& e);\ntemplate<typename BasicJsonType>\ninline void from_json(const BasicJsonType& j, type& e);\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#notes","title":"Notes","text":"

    Prerequisites

    The macro must be used inside the namespace of the enum.

    Important notes

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below.
    • If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below.
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#examples","title":"Examples","text":"Example 1: Basic usage

    The example shows how NLOHMANN_JSON_SERIALIZE_ENUM can be used to serialize/deserialize both classical enums and C++11 enum classes:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum TaskState\n{\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID = -1\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(TaskState,\n{\n    { TS_INVALID, nullptr },\n    { TS_STOPPED, \"stopped\" },\n    { TS_RUNNING, \"running\" },\n    { TS_COMPLETED, \"completed\" }\n})\n\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" }\n})\n} // namespace ns\n\nint main()\n{\n    // serialization\n    json j_stopped = ns::TS_STOPPED;\n    json j_red = ns::Color::red;\n    std::cout << \"ns::TS_STOPPED -> \" << j_stopped\n              << \", ns::Color::red -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_running = \"running\";\n    json j_blue = \"blue\";\n    auto running = j_running.template get<ns::TaskState>();\n    auto blue = j_blue.template get<ns::Color>();\n    std::cout << j_running << \" -> \" << running\n              << \", \" << j_blue << \" -> \" << static_cast<int>(blue) << std::endl;\n\n    // deserializing undefined JSON value to enum\n    // (where the first map entry above is the default)\n    json j_pi = 3.14;\n    auto invalid = j_pi.template get<ns::TaskState>();\n    auto unknown = j_pi.template get<ns::Color>();\n    std::cout << j_pi << \" -> \" << invalid << \", \"\n              << j_pi << \" -> \" << static_cast<int>(unknown) << std::endl;\n}\n

    Output:

    ns::TS_STOPPED -> \"stopped\", ns::Color::red -> \"red\"\n\"running\" -> 1, \"blue\" -> 2\n3.14 -> -1, 3.14 -> 3\n
    Example 2: Multiple conversions for one enumerator

    The example shows how to use multiple conversions for a single enumerator. In the example, Color::red will always be serialized to \"red\", because the first occurring conversion. The second conversion, however, offers an alternative deserialization from \"rot\" to Color::red.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nnamespace ns\n{\nenum class Color\n{\n    red, green, blue, unknown\n};\n\nNLOHMANN_JSON_SERIALIZE_ENUM(Color,\n{\n    { Color::unknown, \"unknown\" }, { Color::red, \"red\" },\n    { Color::green, \"green\" }, { Color::blue, \"blue\" },\n    { Color::red, \"rot\" } // a second conversion for Color::red\n})\n}\n\nint main()\n{\n    // serialization\n    json j_red = ns::Color::red;\n    std::cout << static_cast<int>(ns::Color::red) << \" -> \" << j_red << std::endl;\n\n    // deserialization\n    json j_rot = \"rot\";\n    auto rot = j_rot.template get<ns::Color>();\n    auto red = j_red.template get<ns::Color>();\n    std::cout << j_rot << \" -> \" << static_cast<int>(rot) << std::endl;\n    std::cout << j_red << \" -> \" << static_cast<int>(red) << std::endl;\n}\n

    Output:

    0 -> \"red\"\n\"rot\" -> 0\n\"red\" -> 0\n
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#see-also","title":"See also","text":"
    • Specializing enum conversion
    • JSON_DISABLE_ENUM_SERIALIZATION
    "},{"location":"api/macros/nlohmann_json_serialize_enum/#version-history","title":"Version history","text":"

    Added in version 3.4.0.

    "},{"location":"api/macros/nlohmann_json_version_major/","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"
    #define NLOHMANN_JSON_VERSION_MAJOR /* value */\n#define NLOHMANN_JSON_VERSION_MINOR /* value */\n#define NLOHMANN_JSON_VERSION_PATCH /* value */\n

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    "},{"location":"api/macros/nlohmann_json_version_major/#default-definition","title":"Default definition","text":"

    The macros are defined according to the current library version.

    "},{"location":"api/macros/nlohmann_json_version_major/#examples","title":"Examples","text":"Example

    The example below shows how NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH are defined by the library.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << \"JSON for Modern C++ version \"\n              << NLOHMANN_JSON_VERSION_MAJOR << \".\"\n              << NLOHMANN_JSON_VERSION_MINOR << \".\"\n              << NLOHMANN_JSON_VERSION_PATCH << std::endl;\n}\n

    Output:

    JSON for Modern C++ version 3.11.3\n
    "},{"location":"api/macros/nlohmann_json_version_major/#see-also","title":"See also","text":"
    • meta - returns version information on the library
    • JSON_SKIP_LIBRARY_VERSION_CHECK - skip library version check
    "},{"location":"api/macros/nlohmann_json_version_major/#version-history","title":"Version history","text":"
    • Added in version 3.1.0.
    "},{"location":"community/","title":"Community","text":"
    • Code of Conduct - the rules and norms of this project
    • Contribution Guidelines - guidelines how to contribute to this project
    • Governance - the governance model of this project
    • Quality Assurance - how quality of this project is assured
    • Security Policy - the security policy of the project
    "},{"location":"community/code_of_conduct/","title":"Contributor Covenant Code of Conduct","text":""},{"location":"community/code_of_conduct/#our-pledge","title":"Our Pledge","text":"

    We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

    We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

    "},{"location":"community/code_of_conduct/#our-standards","title":"Our Standards","text":"

    Examples of behavior that contributes to a positive environment for our community include:

    • Demonstrating empathy and kindness toward other people
    • Being respectful of differing opinions, viewpoints, and experiences
    • Giving and gracefully accepting constructive feedback
    • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
    • Focusing on what is best not just for us as individuals, but for the overall community

    Examples of unacceptable behavior include:

    • The use of sexualized language or imagery, and sexual attention or advances of any kind
    • Trolling, insulting or derogatory comments, and personal or political attacks
    • Public or private harassment
    • Publishing others' private information, such as a physical or email address, without their explicit permission
    • Other conduct which could reasonably be considered inappropriate in a professional setting
    "},{"location":"community/code_of_conduct/#enforcement-responsibilities","title":"Enforcement Responsibilities","text":"

    Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

    Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

    "},{"location":"community/code_of_conduct/#scope","title":"Scope","text":"

    This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

    "},{"location":"community/code_of_conduct/#enforcement","title":"Enforcement","text":"

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at mail@nlohmann.me. All complaints will be reviewed and investigated promptly and fairly.

    All community leaders are obligated to respect the privacy and security of the reporter of any incident.

    "},{"location":"community/code_of_conduct/#enforcement-guidelines","title":"Enforcement Guidelines","text":"

    Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

    "},{"location":"community/code_of_conduct/#1-correction","title":"1. Correction","text":"

    Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

    Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

    "},{"location":"community/code_of_conduct/#2-warning","title":"2. Warning","text":"

    Community Impact: A violation through a single incident or series of actions.

    Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

    "},{"location":"community/code_of_conduct/#3-temporary-ban","title":"3. Temporary Ban","text":"

    Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

    Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

    "},{"location":"community/code_of_conduct/#4-permanent-ban","title":"4. Permanent Ban","text":"

    Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

    Consequence: A permanent ban from any sort of public interaction within the community.

    "},{"location":"community/code_of_conduct/#attribution","title":"Attribution","text":"

    This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

    Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

    For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

    "},{"location":"community/contribution_guidelines/","title":"Contribution Guidelines","text":"

    Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a widely-used JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines.

    Feel free to discuss or suggest improvements to this document by submitting a pull request.

    "},{"location":"community/contribution_guidelines/#ways-to-contribute","title":"Ways to Contribute","text":"

    There are multiple ways to contribute.

    "},{"location":"community/contribution_guidelines/#reporting-an-issue","title":"Reporting an issue","text":"

    Please create an issue, assuming one does not already exist, and describe your concern. Note you need a GitHub account for this.

    Clearly describe the issue:

    • If it is a bug, please describe how to reproduce it. If possible, attach a complete example which demonstrates the error. Please also state what you expected to happen instead of the error.
    • If you propose a change or addition, try to give an example how the improved code could look like or how to use it.
    • If you found a compilation error, please tell us which compiler (version and operating system) you used and paste the (relevant part of) the error messages to the ticket.

    Please stick to the provided issue template bug report if possible.

    "},{"location":"community/contribution_guidelines/#reporting-a-security-vulnerability","title":"Reporting a security vulnerability","text":"

    You can report a security vulnerability according to our security policy.

    "},{"location":"community/contribution_guidelines/#discussing-a-new-feature","title":"Discussing a new feature","text":"

    For questions, feature or support requests, please open a discussion. If you find a proposed answer satisfactory, please use the \"Mark as answer\" button to make it easier for readers to see what helped and for the community to filter for open questions.

    "},{"location":"community/contribution_guidelines/#proposing-a-fix-or-an-improvement","title":"Proposing a fix or an improvement","text":"

    Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review.

    Create a pull request against the develop branch and follow the pull request template. In particular,

    • describe the changes in detail, both the what and why,
    • reference existing issues where applicable,
    • add tests to maintain 100% test coverage,
    • update the documentation as needed, and
    • ensure the source code is amalgamated.

    We describe all points in detail below.

    All contributions (including pull requests) must agree to the Developer Certificate of Origin (DCO) version 1.1. This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project.

    "},{"location":"community/contribution_guidelines/#how-to","title":"How to...","text":""},{"location":"community/contribution_guidelines/#describe-your-changes","title":"Describe your changes","text":"

    This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only what you changed, but why. This rationale can be very valuable down the road when improvements or bugs are discussed years later.

    "},{"location":"community/contribution_guidelines/#reference-existing-issues","title":"Reference existing issues","text":"

    Link a pull request to an issue to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos) don\u2019t require prior discussions.

    "},{"location":"community/contribution_guidelines/#write-tests","title":"Write tests","text":"

    The library has an extensive test suite that currently covers 100 % of the library's code. These test are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it:

    If you liked it, you should have put a test on it.

    "},{"location":"community/contribution_guidelines/#run-the-tests","title":"Run the tests","text":"

    First, ensure the test suite runs before making any changes:

    $ cmake -S. -B build\n$ cmake --build build -j 10\n$ ctest --test-dir build -j 10\n

    The test suite should report:

    100% tests passed, 0 tests failed out of 98\n
    "},{"location":"community/contribution_guidelines/#add-tests","title":"Add tests","text":"

    The tests are located in tests/src/unit-*.cpp and contain doctest assertions like CHECK. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.

    When fixing a bug, edit unit-regression2.cpp and add a section referencing the fixed issue.

    "},{"location":"community/contribution_guidelines/#exceptions","title":"Exceptions","text":"

    When you test exceptions, please use CHECK_THROWS_WITH_AS which also takes the what() argument of the thrown exception into account.

    "},{"location":"community/contribution_guidelines/#coverage","title":"Coverage","text":"

    If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the \u201cUbuntu\u201d workflow.

    "},{"location":"community/contribution_guidelines/#update-the-documentation","title":"Update the documentation","text":"

    The main documentation of the library is generated from the files docs/mkdocs/docs. This folder contains dedicated pages for certain features, a list of all exceptions, and an extensive API documentation with details on every public API function.

    Build the documentation locally using:

    make install_venv -C docs/mkdocs\nmake serve -C docs/mkdocs\n

    The documentation will then available at http://127.0.0.1:8000/. See the documentation of mkdocs and Material for MkDocs for more information.

    "},{"location":"community/contribution_guidelines/#amalgamate-the-source-code","title":"Amalgamate the source code","text":"

    The single-header files single_include/nlohmann/json.hpp and single_include/nlohmann/json_fwd.hpp are generated from the source files in the include/nlohmann directory. Do not edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:

    make amalgamate\n
    "},{"location":"community/contribution_guidelines/#recommended-documentation","title":"Recommended documentation","text":"
    • The library\u2019s README file is an excellent starting point to understand its functionality.
    • The documentation page is the reference documentation of the library.
    • RFC 8259 is the reference for the JavaScript Object Notation (JSON) Data Interchange Format.
    "},{"location":"community/contribution_guidelines/#please-dont","title":"Please don't...","text":"

    Certain contributions are not helpful.

    "},{"location":"community/contribution_guidelines/#break-the-public-api","title":"Break the public API","text":"

    We take pride in the library being used by numerous customers across various industries. They all rely on the guarantees provided by semantic versioning. Please do not change the library such that the public API of the 3.x.y version is broken. This includes:

    • Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.
    • Removing functions.
    • Renaming functions or classes.
    • Changing exception handling.
    • Changing exception ids.
    • Changing access specifiers.
    • Changing default arguments.

    Although these guidelines may seem restrictive, they are essential for maintaining the library\u2019s utility.

    Breaking changes may be introduced when they are guarded with a feature macro such as JSON_USE_IMPLICIT_CONVERSIONS which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.

    "},{"location":"community/contribution_guidelines/#break-c11-language-conformance","title":"Break C++11 language conformance","text":"

    This library is designed to work with C++11 and later. This means that any supported C++11 compiler should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.

    Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective JSON_HAS_CPP_14 macros.

    "},{"location":"community/contribution_guidelines/#break-json-conformance","title":"Break JSON conformance","text":"

    Please refrain from proposing changes that would break JSON conformance. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension.

    "},{"location":"community/contribution_guidelines/#wanted","title":"Wanted","text":"

    The following areas really need contribution and are always welcomed:

    • Extending the continuous integration toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang.
    • Improving the efficiency of the JSON parser. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the json.hpp header, and I am not aware of approaches similar to re2c for parsing.
    • Extending and updating existing benchmarks to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting.

    We look forward to your contributions and collaboration to enhance the library!

    "},{"location":"community/governance/","title":"Governance","text":"

    The governance model for the JSON for Modern C++ project is a Benevolent Dictator for Life (BDFL) structure. As the sole maintainer, Niels Lohmann is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors.

    "},{"location":"community/governance/#overview","title":"Overview","text":"

    This project is led by a benevolent dictator, Niels Lohmann, and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator\u2019s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community\u2019s job to guide the decisions of the benevolent dictator through active engagement and contribution.

    "},{"location":"community/governance/#roles-and-responsibilities","title":"Roles and responsibilities","text":""},{"location":"community/governance/#benevolent-dictator-project-lead","title":"Benevolent dictator (project lead)","text":"

    Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead\u2019s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term.

    In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead\u2019s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project\u2019s strategy, the project lead will allow them to proceed as they desire.

    "},{"location":"community/governance/#committers","title":"Committers","text":"

    Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support.

    Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer\u2019s job to ensure that the lead is aware of the community\u2019s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead.

    "},{"location":"community/governance/#contributors","title":"Contributors","text":"

    Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document.

    Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project.

    Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following:

    • supporting new users (current users often provide the most effective new user support)
    • reporting bugs
    • identifying requirements
    • supplying graphics and web design
    • programming
    • assisting with project infrastructure
    • writing documentation
    • fixing bugs
    • adding features

    As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above.

    "},{"location":"community/governance/#users","title":"Users","text":"

    Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements.

    Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to):

    • evangelising about the project
    • informing developers of project strengths and weaknesses from a new user\u2019s perspective
    • providing moral support (a \u2018thank you\u2019 goes a long way)
    • providing financial support

    Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above.

    "},{"location":"community/governance/#support","title":"Support","text":"

    All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal.

    "},{"location":"community/governance/#contribution-process","title":"Contribution Process","text":"

    Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document.

    The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution.

    "},{"location":"community/governance/#decision-making-process","title":"Decision-Making Process","text":"

    The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead\u2019s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them.

    Source

    The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel.

    "},{"location":"community/quality_assurance/","title":"Quality assurance","text":"

    Ensuring quality is paramount for this project, particularly because numerous other projects depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build.

    "},{"location":"community/quality_assurance/#c-language-compliance-and-compiler-compatibility","title":"C++ language compliance and compiler compatibility","text":"

    Requirement: Compiler support

    Any compiler with complete C++11 support can compile the library without warnings.

    • The library is compiled library with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library.

      Compilers used in continuous integration Compiler Architecture Operating System CI AppleClang 14.0.0.14000029; Xcode 14.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.0.14000029; Xcode 14.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 14.0.3.14030022; Xcode 14.3.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000040; Xcode 15.0.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.1 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000100; Xcode 15.2 x86_64 macOS 13.7.2 (Ventura) GitHub AppleClang 15.0.0.15000309; Xcode 15.3 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 15.0.0.15000309; Xcode 15.4 arm64 macOS 14.7.2 (Sonoma) GitHub AppleClang 16.0.0.16000026; Xcode 16 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.1 arm64 macOS 15.2 (Sequoia) GitHub AppleClang 16.0.0.16000026; Xcode 16.2 arm64 macOS 15.2 (Sequoia) GitHub Clang 3.5.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.6.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.7.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.8.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 3.9.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 4.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 5.0.2 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 6.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 7.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 8.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 9.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 10.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 11.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 11.1.0 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 12.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.0 with MSVC-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 12.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 13.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 13.0.1 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 14.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 14.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 15.0.0 with GNU-like command-line x86_64 Windows 10 (Build 17763) GitHub Clang 15.0.7 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 16.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 17.0.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 18.1.8 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 19.1.6 x86_64 Ubuntu 22.04.1 LTS GitHub Clang 20.0.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.8.5 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 4.9.3 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 5.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 6.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 7.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 8.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 9.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 10.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 11.5.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) x86_64 Windows 10 (Build 17763) GitHub GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) x86_64 Windows 10 (Build 17763) GitHub GNU 12.4.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 13.3.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 x86_64 Ubuntu 22.04.1 LTS GitHub GNU 14.2.0 arm64 Linux 6.1.100 Cirrus CI MSVC 19.0.24241.7 x86 Windows 8.1 AppVeyor MSVC 19.16.27035.0 x86 Windows-10 (Build 14393) AppVeyor MSVC 19.29.30157.0 x86 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86_64 Windows 10 (Build 17763) GitHub MSVC 19.29.30157.0 x86 Windows-10 (Build 17763) AppVeyor MSVC 19.42.34435.0 x86 Windows 10 (Build 20348) GitHub MSVC 19.42.34435.0 x86_64 Windows 10 (Build 20348) GitHub
    • The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early.

    • The library is checked for compiler warnings:
    • On Clang, -Weverything is used with 7 exceptions.

      Clang warnings
      # Ignored Clang warnings:\n# -Wno-c++98-compat               The library targets C++11.\n# -Wno-c++98-compat-pedantic      The library targets C++11.\n# -Wno-deprecated-declarations    The library contains annotations for deprecated functions.\n# -Wno-extra-semi-stmt            The library uses assert which triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-covered-switch-default     All switches list all cases and a default case.\n# -Wno-unsafe-buffer-usage        Otherwise Doctest would not compile.\n\nset(CLANG_CXXFLAGS\n    -Werror\n    -Weverything\n    -Wno-c++98-compat\n    -Wno-c++98-compat-pedantic\n    -Wno-deprecated-declarations\n    -Wno-extra-semi-stmt\n    -Wno-padded\n    -Wno-covered-switch-default\n    -Wno-unsafe-buffer-usage\n)\n
    • On GCC, 300+ warnings are enabled with 8 exceptions.

      GCC warnings
      # Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags:\n# Ignored GCC warnings:\n# -Wno-abi-tag                    We do not care about ABI tags.\n# -Wno-aggregate-return           The library uses aggregate returns.\n# -Wno-long-long                  The library uses the long long type to interface with system functions.\n# -Wno-namespaces                 The library uses namespaces.\n# -Wno-nrvo                       Doctest triggers this warning.\n# -Wno-padded                     We do not care about padding warnings.\n# -Wno-system-headers             We do not care about warnings in system headers.\n# -Wno-templates                  The library uses templates.\n\nset(GCC_CXXFLAGS\n    -pedantic\n    -Werror\n    --all-warnings\n    --extra-warnings\n    -W\n    -WNSObject-attribute\n    -Wno-abi-tag\n    -Waddress\n    -Waddress-of-packed-member\n    -Wno-aggregate-return\n    -Waggressive-loop-optimizations\n    -Waligned-new=all\n    -Wall\n    -Walloc-size\n    -Walloc-zero\n    -Walloca\n    -Wanalyzer-allocation-size\n    -Wanalyzer-deref-before-check\n    -Wanalyzer-double-fclose\n    -Wanalyzer-double-free\n    -Wanalyzer-exposure-through-output-file\n    -Wanalyzer-exposure-through-uninit-copy\n    -Wanalyzer-fd-access-mode-mismatch\n    -Wanalyzer-fd-double-close\n    -Wanalyzer-fd-leak\n    -Wanalyzer-fd-phase-mismatch\n    -Wanalyzer-fd-type-mismatch\n    -Wanalyzer-fd-use-after-close\n    -Wanalyzer-fd-use-without-check\n    -Wanalyzer-file-leak\n    -Wanalyzer-free-of-non-heap\n    -Wanalyzer-imprecise-fp-arithmetic\n    -Wanalyzer-infinite-loop\n    -Wanalyzer-infinite-recursion\n    -Wanalyzer-jump-through-null\n    -Wanalyzer-malloc-leak\n    -Wanalyzer-mismatching-deallocation\n    -Wanalyzer-null-argument\n    -Wanalyzer-null-dereference\n    -Wanalyzer-out-of-bounds\n    -Wanalyzer-overlapping-buffers\n    -Wanalyzer-possible-null-argument\n    -Wanalyzer-possible-null-dereference\n    -Wanalyzer-putenv-of-auto-var\n    -Wanalyzer-shift-count-negative\n    -Wanalyzer-shift-count-overflow\n    -Wanalyzer-stale-setjmp-buffer\n    -Wanalyzer-symbol-too-complex\n    -Wanalyzer-tainted-allocation-size\n    -Wanalyzer-tainted-array-index\n    -Wanalyzer-tainted-assertion\n    -Wanalyzer-tainted-divisor\n    -Wanalyzer-tainted-offset\n    -Wanalyzer-tainted-size\n    -Wanalyzer-too-complex\n    -Wanalyzer-undefined-behavior-strtok\n    -Wanalyzer-unsafe-call-within-signal-handler\n    -Wanalyzer-use-after-free\n    -Wanalyzer-use-of-pointer-in-stale-stack-frame\n    -Wanalyzer-use-of-uninitialized-value\n    -Wanalyzer-va-arg-type-mismatch\n    -Wanalyzer-va-list-exhausted\n    -Wanalyzer-va-list-leak\n    -Wanalyzer-va-list-use-after-va-end\n    -Wanalyzer-write-to-const\n    -Wanalyzer-write-to-string-literal\n    -Warith-conversion\n    -Warray-bounds=2\n    -Warray-compare\n    -Warray-parameter=2\n    -Wattribute-alias=2\n    -Wattribute-warning\n    -Wattributes\n    -Wbool-compare\n    -Wbool-operation\n    -Wbuiltin-declaration-mismatch\n    -Wbuiltin-macro-redefined\n    -Wc++0x-compat\n    -Wc++11-compat\n    -Wc++11-extensions\n    -Wc++14-compat\n    -Wc++14-extensions\n    -Wc++17-compat\n    -Wc++17-extensions\n    -Wc++1z-compat\n    -Wc++20-compat\n    -Wc++20-extensions\n    -Wc++23-extensions\n    -Wc++26-extensions\n    -Wc++2a-compat\n    -Wcalloc-transposed-args\n    -Wcannot-profile\n    -Wcast-align\n    -Wcast-align=strict\n    -Wcast-function-type\n    -Wcast-qual\n    -Wcast-user-defined\n    -Wcatch-value=3\n    -Wchanges-meaning\n    -Wchar-subscripts\n    -Wclass-conversion\n    -Wclass-memaccess\n    -Wclobbered\n    -Wcomma-subscript\n    -Wcomment\n    -Wcomments\n    -Wcomplain-wrong-lang\n    -Wconditionally-supported\n    -Wconversion\n    -Wconversion-null\n    -Wcoverage-invalid-line-number\n    -Wcoverage-mismatch\n    -Wcoverage-too-many-conditions\n    -Wcpp\n    -Wctad-maybe-unsupported\n    -Wctor-dtor-privacy\n    -Wdangling-else\n    -Wdangling-pointer=2\n    -Wdangling-reference\n    -Wdate-time\n    -Wdelete-incomplete\n    -Wdelete-non-virtual-dtor\n    -Wdeprecated\n    -Wdeprecated-copy\n    -Wdeprecated-copy-dtor\n    -Wdeprecated-declarations\n    -Wdeprecated-enum-enum-conversion\n    -Wdeprecated-enum-float-conversion\n    -Wdisabled-optimization\n    -Wdiv-by-zero\n    -Wdouble-promotion\n    -Wduplicated-branches\n    -Wduplicated-cond\n    -Weffc++\n    -Welaborated-enum-base\n    -Wempty-body\n    -Wendif-labels\n    -Wenum-compare\n    -Wenum-conversion\n    -Wexceptions\n    -Wexpansion-to-defined\n    -Wextra\n    -Wextra-semi\n    -Wflex-array-member-not-at-end\n    -Wfloat-conversion\n    -Wfloat-equal\n    -Wformat -Wformat-contains-nul\n    -Wformat -Wformat-extra-args\n    -Wformat -Wformat-nonliteral\n    -Wformat -Wformat-security\n    -Wformat -Wformat-y2k\n    -Wformat -Wformat-zero-length\n    -Wformat-diag\n    -Wformat-overflow=2\n    -Wformat-signedness\n    -Wformat-truncation=2\n    -Wformat=2\n    -Wframe-address\n    -Wfree-nonheap-object\n    -Wglobal-module\n    -Whardened\n    -Whsa\n    -Wif-not-aligned\n    -Wignored-attributes\n    -Wignored-qualifiers\n    -Wimplicit-fallthrough=5\n    -Winaccessible-base\n    -Winfinite-recursion\n    -Winherited-variadic-ctor\n    -Winit-list-lifetime\n    -Winit-self\n    -Winline\n    -Wint-in-bool-context\n    -Wint-to-pointer-cast\n    -Winterference-size\n    -Winvalid-constexpr\n    -Winvalid-imported-macros\n    -Winvalid-memory-model\n    -Winvalid-offsetof\n    -Winvalid-pch\n    -Winvalid-utf8\n    -Wliteral-suffix\n    -Wlogical-not-parentheses\n    -Wlogical-op\n    -Wno-long-long\n    -Wlto-type-mismatch\n    -Wmain\n    -Wmaybe-uninitialized\n    -Wmemset-elt-size\n    -Wmemset-transposed-args\n    -Wmisleading-indentation\n    -Wmismatched-dealloc\n    -Wmismatched-new-delete\n    -Wmismatched-tags\n    -Wmissing-attributes\n    -Wmissing-braces\n    -Wmissing-declarations\n    -Wmissing-field-initializers\n    -Wmissing-include-dirs\n    -Wmissing-profile\n    -Wmissing-requires\n    -Wmissing-template-keyword\n    -Wmultichar\n    -Wmultiple-inheritance\n    -Wmultistatement-macros\n    -Wno-namespaces\n    -Wnarrowing\n    -Wnoexcept\n    -Wnoexcept-type\n    -Wnon-template-friend\n    -Wnon-virtual-dtor\n    -Wnonnull\n    -Wnonnull-compare\n    -Wnormalized=nfkc\n    -Wno-nrvo\n    -Wnull-dereference\n    -Wodr\n    -Wold-style-cast\n    -Wopenacc-parallelism\n    -Wopenmp\n    -Wopenmp-simd\n    -Woverflow\n    -Woverlength-strings\n    -Woverloaded-virtual=2\n    -Wpacked\n    -Wpacked-bitfield-compat\n    -Wpacked-not-aligned\n    -Wno-padded\n    -Wparentheses\n    -Wpedantic\n    -Wpessimizing-move\n    -Wplacement-new=2\n    -Wpmf-conversions\n    -Wpointer-arith\n    -Wpointer-compare\n    -Wpragmas\n    -Wprio-ctor-dtor\n    -Wpsabi\n    -Wrange-loop-construct\n    -Wredundant-decls\n    -Wredundant-move\n    -Wredundant-tags\n    -Wregister\n    -Wreorder\n    -Wrestrict\n    -Wreturn-local-addr\n    -Wreturn-type\n    -Wscalar-storage-order\n    -Wself-move\n    -Wsequence-point\n    -Wshadow=compatible-local\n    -Wshadow=global\n    -Wshadow=local\n    -Wshift-count-negative\n    -Wshift-count-overflow\n    -Wshift-negative-value\n    -Wshift-overflow=2\n    -Wsign-compare\n    -Wsign-conversion\n    -Wsign-promo\n    -Wsized-deallocation\n    -Wsizeof-array-argument\n    -Wsizeof-array-div\n    -Wsizeof-pointer-div\n    -Wsizeof-pointer-memaccess\n    -Wstack-protector\n    -Wstrict-aliasing=3\n    -Wstrict-null-sentinel\n    -Wstrict-overflow\n    -Wstring-compare\n    -Wstringop-overflow=4\n    -Wstringop-overread\n    -Wstringop-truncation\n    -Wsubobject-linkage\n    -Wsuggest-attribute=cold\n    -Wsuggest-attribute=const\n    -Wsuggest-attribute=format\n    -Wsuggest-attribute=malloc\n    -Wsuggest-attribute=noreturn\n    -Wsuggest-attribute=pure\n    -Wsuggest-attribute=returns_nonnull\n    -Wsuggest-final-methods\n    -Wsuggest-final-types\n    -Wsuggest-override\n    -Wswitch\n    -Wswitch-bool\n    -Wswitch-default\n    -Wswitch-enum\n    -Wswitch-outside-range\n    -Wswitch-unreachable\n    -Wsync-nand\n    -Wsynth\n    -Wno-system-headers\n    -Wtautological-compare\n    -Wno-templates\n    -Wterminate\n    -Wtrampolines\n    -Wtrigraphs\n    -Wtrivial-auto-var-init\n    -Wtsan\n    -Wtype-limits\n    -Wundef\n    -Wunicode\n    -Wuninitialized\n    -Wunknown-pragmas\n    -Wunreachable-code\n    -Wunsafe-loop-optimizations\n    -Wunused\n    -Wunused-but-set-parameter\n    -Wunused-but-set-variable\n    -Wunused-const-variable=2\n    -Wunused-function\n    -Wunused-label\n    -Wunused-local-typedefs\n    -Wunused-macros\n    -Wunused-parameter\n    -Wunused-result\n    -Wunused-value\n    -Wunused-variable\n    -Wuse-after-free=3\n    -Wuseless-cast\n    -Wvarargs\n    -Wvariadic-macros\n    -Wvector-operation-performance\n    -Wvexing-parse\n    -Wvirtual-inheritance\n    -Wvirtual-move-assign\n    -Wvla\n    -Wvla-parameter\n    -Wvolatile\n    -Wvolatile-register-var\n    -Wwrite-strings\n    -Wxor-used-as-pow\n    -Wzero-as-null-pointer-constant\n    -Wzero-length-bounds\n)\n
    "},{"location":"community/quality_assurance/#c-standard-library-compliance","title":"C++ standard library compliance","text":"

    Requirement: No prerequisites

    The library has no prerequisites other than the Standard Template Library (STL).

    • The library compiled and tested with both libc++ and libstdc++ to detect subtle differences or incompatibilities.
    • The code checked with Include What You Use (IWYU) that all required standard headers are included.
    • On Windows, the library is compiled with <Windows.h> being included to detect and avoid common bugs.
    • The library is compiled with exceptions disabled to support alternative means of error handling.
    "},{"location":"community/quality_assurance/#stable-public-api","title":"Stable public API","text":"

    Requirement: Stable public API

    Any change to the library does not break the public API.

    • All public API functions are tested with a variety of arguments.
    • The library is compiled and tested with different template arguments for number, string, array, and object types.
    • All lines of the code base are covered by unit tests.
    • Every exception of the library is thrown in the test suite and the error messages and exception ids are checked.

    Requirement: Complete documentation

    The public API is extensively documented.

    • Every public API function has a dedicated page in the API reference documentation with a self-contained code example.
    • All examples in the documentation are tested and changes in their output is treated as an error.
    "},{"location":"community/quality_assurance/#robust-input-processing","title":"Robust input processing","text":"

    Requirement: Standards compliance

    The library is compliant to JSON as defined in RFC 8259.

    • The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.
    • The parser is tested against extensive correctness suites for JSON compliance.
    • In addition, the library is continuously fuzz-tested at OSS-Fuzz where the library is checked against billions of inputs.
    "},{"location":"community/quality_assurance/#static-analysis","title":"Static analysis","text":"

    Requirement: State-of-the-art code analysis

    The code is checked with state-of-the-art static code analysis tools.

    • The code is checked with the latest Clang-Tidy.

      Clang-Tidy configuration (.clang-tidy)
      # TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point.\n\nChecks: '*,\n\n         -portability-template-virtual-member-function,\n         -bugprone-use-after-move,\n         -hicpp-invalid-access-moved,\n\n         -altera-id-dependent-backward-branch,\n         -altera-struct-pack-align,\n         -altera-unroll-loops,\n         -android-cloexec-fopen,\n         -boost-use-ranges,\n         -bugprone-easily-swappable-parameters,\n         -cert-err58-cpp,\n         -concurrency-mt-unsafe,\n         -cppcoreguidelines-avoid-const-or-ref-data-members,\n         -cppcoreguidelines-avoid-do-while,\n         -cppcoreguidelines-avoid-goto,\n         -cppcoreguidelines-avoid-magic-numbers,\n         -cppcoreguidelines-avoid-non-const-global-variables,\n         -cppcoreguidelines-macro-usage,\n         -cppcoreguidelines-pro-bounds-array-to-pointer-decay,\n         -cppcoreguidelines-pro-bounds-constant-array-index,\n         -cppcoreguidelines-pro-bounds-pointer-arithmetic,\n         -cppcoreguidelines-pro-type-reinterpret-cast,\n         -cppcoreguidelines-pro-type-union-access,\n         -cppcoreguidelines-rvalue-reference-param-not-moved,\n         -cppcoreguidelines-virtual-class-destructor,\n         -fuchsia-default-arguments-calls,\n         -fuchsia-default-arguments-declarations,\n         -fuchsia-overloaded-operator,\n         -google-explicit-constructor,\n         -google-readability-function-size,\n         -google-runtime-int,\n         -google-runtime-references,\n         -hicpp-avoid-goto,\n         -hicpp-explicit-conversions,\n         -hicpp-function-size,\n         -hicpp-no-array-decay,\n         -hicpp-no-assembler,\n         -hicpp-signed-bitwise,\n         -hicpp-uppercase-literal-suffix,\n         -llvm-header-guard,\n         -llvm-include-order,\n         -llvmlibc-*,\n         -misc-use-anonymous-namespace,\n         -misc-confusable-identifiers,\n         -misc-include-cleaner,\n         -misc-no-recursion,\n         -misc-non-private-member-variables-in-classes,\n         -modernize-concat-nested-namespaces,\n         -modernize-type-traits,\n         -modernize-use-constraints,\n         -modernize-use-designated-initializers,\n         -modernize-use-nodiscard,\n         -modernize-use-ranges,\n         -modernize-use-std-numbers,\n         -modernize-use-trailing-return-type,\n         -performance-enum-size,\n         -readability-function-cognitive-complexity,\n         -readability-function-size,\n         -readability-identifier-length,\n         -readability-magic-numbers,\n         -readability-redundant-access-specifiers,\n         -readability-simplify-boolean-expr,\n         -readability-uppercase-literal-suffix'\n\nCheckOptions:\n  - key: hicpp-special-member-functions.AllowSoleDefaultDtor\n    value: 1\n\nWarningsAsErrors: '*'\n\n#HeaderFilterRegex: '.*nlohmann.*'\nHeaderFilterRegex: '.*hpp$'\n
    • The code is checked with the latest Cppcheck with all warnings enabled.

    • The code is checked with the latest Clang Static Analyzer with 89 enabled rules.
    • The code is checked with Infer.
    • The code is checked with Codacy.
    "},{"location":"community/quality_assurance/#dynamic-analysis","title":"Dynamic analysis","text":"

    Requirement: Correctness

    The library is checked for memory correctness and absence of undefined behavior.

    • The test suite is executed with enabled runtime assertions to check invariants and preconditions of functions to detect undefined behavior.
    • The test suite is executed with Valgrind (Memcheck) to detect memory leaks.
    • The test suite is executed with Sanitizers (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).
    "},{"location":"community/quality_assurance/#style-check","title":"Style check","text":"

    Requirement: Common code style

    A common code style is used throughout all code files of the library.

    • The code is formatted with Artistic Style (astyle) against a style configuration that is also enforced in the CI.

      Astyle configuration (tools/astyle/.astylerc)
      # Configuration for Artistic Style\n# see https://astyle.sourceforge.net/astyle.html\n\n#######################\n# Brace Style Options #\n#######################\n\n# use Allman style for braces\n--style=allman\n\n###############\n# Tab Options #\n###############\n\n# indent using 4 spaces\n--indent=spaces=4\n\n#######################\n# Indentation Options #\n#######################\n\n# indent access modifiers one half indent\n--indent-modifiers\n\n# indent switch cases to the switch block\n--indent-switches\n\n# indent preprocessor blocks\n--indent-preproc-block\n\n# indent preprocessor defines\n--indent-preproc-define\n\n# indent C++ comments\n--indent-col1-comments\n\n###################\n# Padding Options #\n###################\n\n# insert space padding around operators\n--pad-oper\n\n# insert space between if/for/while... and the following parentheses\n--pad-header\n\n# attach the pointer to the variable type (left)\n--align-pointer=type\n\n# attach the reference to the variable type (left)\n--align-reference=type\n\n######################\n# Formatting Options #\n######################\n\n# add braces to unbraced one line conditional statements\n--add-braces\n\n# convert tabs to spaces\n--convert-tabs\n\n# closes whitespace between the ending angle brackets of template definitions\n--close-templates\n\n#################\n# Other Options #\n#################\n\n# do not create backup files\n--suffix=none\n\n# preserve the original file date\n--preserve-date\n\n# display only the files that have been formatted\n--formatted\n\n# for the linux (LF) line end style\n--lineend=linux\n
    • The code style is checked with cpplint with 61 enabled rules.

    "},{"location":"community/quality_assurance/#simple-integration","title":"Simple integration","text":"

    Requirement: Single header

    The library can be used by adding a single header to a C++ project.

    • An amalgamation script is used to check if the source code is exposed as self-contained single-header file.
    • The test suite is checked against the amalgamated source file as well as the individual source file.

    Requirement: CMake as primary development tool

    All library functions are exposed and usable by CMake.

    • All library options are exposed as CMake options and tested.
    • The library is tested against the earliest supported CMake version.
    "},{"location":"community/security_policy/","title":"Security Policy","text":""},{"location":"community/security_policy/#reporting-a-vulnerability","title":"Reporting a Vulnerability","text":"

    We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory \"Report a Vulnerability\" tab.

    Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created.

    We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance.

    For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.

    "},{"location":"community/security_policy/#additional-resources","title":"Additional Resources","text":"
    • Explore security-related topics and contribute to tools and projects through GitHub Security Lab.
    • Learn more about responsible disclosure and reporting vulnerabilities in GitHub at About coordinated disclosure of security vulnerabilities.

    We sincerely thank you for contributing to the security and integrity of this project!

    "},{"location":"features/arbitrary_types/","title":"Arbitrary Type Conversions","text":"

    Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines:

    namespace ns {\n    // a simple struct to model a person\n    struct person {\n        std::string name;\n        std::string address;\n        int age;\n    };\n} // namespace ns\n\nns::person p = {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// convert to JSON: copy each value into the JSON object\njson j;\nj[\"name\"] = p.name;\nj[\"address\"] = p.address;\nj[\"age\"] = p.age;\n\n// ...\n\n// convert from JSON: copy each value from the JSON object\nns::person p {\n    j[\"name\"].template get<std::string>(),\n    j[\"address\"].template get<std::string>(),\n    j[\"age\"].template get<int>()\n};\n

    It works, but that's quite a lot of boilerplate... Fortunately, there's a better way:

    // create a person\nns::person p {\"Ned Flanders\", \"744 Evergreen Terrace\", 60};\n\n// conversion: person -> json\njson j = p;\n\nstd::cout << j << std::endl;\n// {\"address\":\"744 Evergreen Terrace\",\"age\":60,\"name\":\"Ned Flanders\"}\n\n// conversion: json -> person\nauto p2 = j.template get<ns::person>();\n\n// that's it\nassert(p == p2);\n
    "},{"location":"features/arbitrary_types/#basic-usage","title":"Basic usage","text":"

    To make this work with one of your types, you only need to provide two functions:

    using json = nlohmann::json;\n\nnamespace ns {\n    void to_json(json& j, const person& p) {\n        j = json{ {\"name\", p.name}, {\"address\", p.address}, {\"age\", p.age} };\n    }\n\n    void from_json(const json& j, person& p) {\n        j.at(\"name\").get_to(p.name);\n        j.at(\"address\").get_to(p.address);\n        j.at(\"age\").get_to(p.age);\n    }\n} // namespace ns\n

    That's all! When calling the json constructor with your type, your custom to_json method will be automatically called. Likewise, when calling template get<your_type>() or get_to(your_type&), the from_json method will be called.

    Some important things:

    • Those methods MUST be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace ns, where person is defined).
    • Those methods MUST be available (e.g., proper headers must be included) everywhere you use these conversions. Look at #1108 for errors that may occur otherwise.
    • When using template get<your_type>(), your_type MUST be DefaultConstructible. (There is a way to bypass this requirement described later.)
    • In function from_json, use function at() to access the object values rather than operator[]. In case a key does not exist, at throws an exception that you can handle, whereas operator[] exhibits undefined behavior.
    • You do not need to add serializers or deserializers for STL types like std::vector: the library already implements these.
    "},{"location":"features/arbitrary_types/#simplify-your-life-with-macros","title":"Simplify your life with macros","text":"

    If you just want to serialize/deserialize some structs, the to_json/from_json functions can be a lot of boilerplate.

    There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object:

    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the namespace of the class/struct to create code for. It does not define a fron_json() function which is needed in case the type does not have a default constructor.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in from_json() due to a missing value in the JSON object.
    • NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in from_json() due to a missing value in the JSON object, but fills in values from object which is default-constructed by the type.
    • NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a fron_json() function which is needed in case the type does not have a default constructor.

    Furthermore, there exist versions to use in case of derived classes:

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_TYPE_INTRUSIVE NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    For derived classes and structs, use the following macros

    Need access to private members Need only de-serialization Allow missing values when de-serializing macro NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

    Implementation limits

    • The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the to_json/from_json functions manually.
    • The macros only work for the nlohmann::json type; other specializations such as nlohmann::ordered_json are currently unsupported.
    Example

    The to_json/from_json functions for the person struct above can be created with:

    namespace ns {\n    NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)\n}\n

    Here is an example with private members, where NLOHMANN_DEFINE_TYPE_INTRUSIVE is needed:

    namespace ns {\n    class address {\n      private:\n        std::string street;\n        int housenumber;\n        int postcode;\n\n      public:\n        NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode)\n    };\n}\n
    "},{"location":"features/arbitrary_types/#how-do-i-convert-third-party-types","title":"How do I convert third-party types?","text":"

    This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:

    The library uses JSON Serializers to convert types to json. The default serializer for nlohmann::json is nlohmann::adl_serializer (ADL means Argument-Dependent Lookup).

    It is implemented like this (simplified):

    template <typename T>\nstruct adl_serializer {\n    static void to_json(json& j, const T& value) {\n        // calls the \"to_json\" method in T's namespace\n    }\n\n    static void from_json(const json& j, T& value) {\n        // same thing, but with the \"from_json\" method\n    }\n};\n

    This serializer works fine when you have control over the type's namespace. However, what about boost::optional or std::filesystem::path (C++17)? Hijacking the boost namespace is pretty bad, and it's illegal to add something other than template specializations to std...

    To solve this, you need to add a specialization of adl_serializer to the nlohmann namespace, here's an example:

    // partial specialization (full specialization works too)\nNLOHMANN_JSON_NAMESPACE_BEGIN\ntemplate <typename T>\nstruct adl_serializer<boost::optional<T>> {\n    static void to_json(json& j, const boost::optional<T>& opt) {\n        if (opt == boost::none) {\n            j = nullptr;\n        } else {\n            j = *opt; // this will call adl_serializer<T>::to_json which will\n                      // find the free function to_json in T's namespace!\n        }\n    }\n\n    static void from_json(const json& j, boost::optional<T>& opt) {\n        if (j.is_null()) {\n            opt = boost::none;\n        } else {\n            opt = j.template get<T>(); // same as above, but with\n                              // adl_serializer<T>::from_json\n        }\n    }\n};\nNLOHMANN_JSON_NAMESPACE_END\n

    ABI compatibility

    Use NLOHMANN_JSON_NAMESPACE_BEGIN and NLOHMANN_JSON_NAMESPACE_END instead of namespace nlohmann { } in code which may be linked with different versions of this library.

    "},{"location":"features/arbitrary_types/#how-can-i-use-get-for-non-default-constructiblenon-copyable-types","title":"How can I use get() for non-default constructible/non-copyable types?","text":"

    There is a way, if your type is MoveConstructible. You will need to specialize the adl_serializer as well, but with a special from_json overload:

    struct move_only_type {\n    move_only_type() = delete;\n    move_only_type(int ii): i(ii) {}\n    move_only_type(const move_only_type&) = delete;\n    move_only_type(move_only_type&&) = default;\n\n    int i;\n};\n\nnamespace nlohmann {\n    template <>\n    struct adl_serializer<move_only_type> {\n        // note: the return type is no longer 'void', and the method only takes\n        // one argument\n        static move_only_type from_json(const json& j) {\n            return {j.template get<int>()};\n        }\n\n        // Here's the catch! You must provide a to_json method! Otherwise, you\n        // will not be able to convert move_only_type to json, since you fully\n        // specialized adl_serializer on that type\n        static void to_json(json& j, move_only_type t) {\n            j = t.i;\n        }\n    };\n}\n
    "},{"location":"features/arbitrary_types/#can-i-write-my-own-serializer-advanced-use","title":"Can I write my own serializer? (Advanced use)","text":"

    Yes. You might want to take a look at unit-udt.cpp in the test suite, to see a few examples.

    If you write your own serializer, you'll need to do a few things:

    • use a different basic_json alias than nlohmann::json (the last template parameter of basic_json is the JSONSerializer)
    • use your basic_json alias (or a template parameter) in all your to_json/from_json methods
    • use nlohmann::to_json and nlohmann::from_json when you need ADL

    Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL.

    // You should use void as a second template argument\n// if you don't need compile-time checks on T\ntemplate<typename T, typename SFINAE = typename std::enable_if<sizeof(T) <= 32>::type>\nstruct less_than_32_serializer {\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, T value) {\n        // we want to use ADL, and call the correct to_json overload\n        using nlohmann::to_json; // this method is called by adl_serializer,\n                                 // this is where the magic happens\n        to_json(j, value);\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n        // same thing here\n        using nlohmann::from_json;\n        from_json(j, value);\n    }\n};\n

    Be very careful when reimplementing your serializer, you can stack overflow if you don't pay attention:

    template <typename T, void>\nstruct bad_serializer\n{\n    template <typename BasicJsonType>\n    static void to_json(BasicJsonType& j, const T& value) {\n      // this calls BasicJsonType::json_serializer<T>::to_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      j = value;\n    }\n\n    template <typename BasicJsonType>\n    static void from_json(const BasicJsonType& j, T& value) {\n      // this calls BasicJsonType::json_serializer<T>::from_json(j, value);\n      // if BasicJsonType::json_serializer == bad_serializer ... oops!\n      value = j.template template get<T>(); // oops!\n    }\n};\n
    "},{"location":"features/assertions/","title":"Runtime Assertions","text":"

    The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned of, the latter checks for undefined behavior are to detect bugs in client code.

    "},{"location":"features/assertions/#switch-off-runtime-assertions","title":"Switch off runtime assertions","text":"

    Runtime assertions can be switched off by defining the preprocessor macro NDEBUG (see the documentation of assert) which is the default for release builds.

    "},{"location":"features/assertions/#change-assertion-behavior","title":"Change assertion behavior","text":"

    The behavior of runtime assertions can be changes by defining macro JSON_ASSERT(x) before including the json.hpp header.

    "},{"location":"features/assertions/#function-with-runtime-assertions","title":"Function with runtime assertions","text":""},{"location":"features/assertions/#unchecked-object-access-to-a-const-value","title":"Unchecked object access to a const value","text":"

    Function operator[] implements unchecked access for objects. Whereas a missing key is added in case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion.

    If you are not sure whether an element in an object exists, use checked access with the at function or call the contains function before.

    See also the documentation on element access.

    Example 1: Missing object key

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    const json j = {{\"key\", \"value\"}};\n    auto v = j[\"missing\"];\n}\n

    Output:

    Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144.\n
    "},{"location":"features/assertions/#constructing-from-an-uninitialized-iterator-range","title":"Constructing from an uninitialized iterator range","text":"

    Constructing a JSON value from an iterator range (see constructor) with an uninitialized iterator is undefined behavior and yields a runtime assertion.

    Example 2: Uninitialized iterator range

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json::iterator it1, it2;\n    json j(it1, it2);\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#operations-on-uninitialized-iterators","title":"Operations on uninitialized iterators","text":"

    Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion.

    Example 3: Uninitialized iterator

    The following code will trigger an assertion at runtime:

    #include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n  json::iterator it;\n  ++it;\n}\n

    Output:

    Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368.\n
    "},{"location":"features/assertions/#changes","title":"Changes","text":""},{"location":"features/assertions/#reading-from-a-null-file-or-char-pointer","title":"Reading from a null FILE or char pointer","text":"

    Reading from a null FILE or char pointer in C++ is undefined behavior. Until version 3.11.4, this library asserted that the pointer was not nullptr using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.11.4, this library checks for nullptr and throws a parse_error.101 to prevent the undefined behavior.

    Example 4: Reading from null pointer

    The following code will trigger an assertion at runtime:

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::FILE* f = std::fopen(\"nonexistent_file.json\", \"r\");\n    try {\n        json j = json::parse(f);\n    } catch (std::exception& e) {\n        std::cerr << e.what() << std::endl;\n    }\n}\n

    Output:

    [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n
    "},{"location":"features/binary_values/","title":"Binary Values","text":"

    The library implements several binary formats that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored.

    JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser, and are only part of a serialized JSON text if they have been created manually or via a binary format.

    "},{"location":"features/binary_values/#api-for-binary-values","title":"API for binary values","text":"
    classDiagram\n\nclass binary_t [\"json::binary_t\"] {\n    +void set_subtype(std::uint64_t subtype)\n    +void clear_subtype()\n    +std::uint64_t subtype() const\n    +bool has_subtype() const\n}\n\nclass vector [\"std::vector<uint8_t>\"]\n\nvector <|-- binary_t

    By default, binary values are stored as std::vector<std::uint8_t>. This type can be changed by providing a template parameter to the basic_json type. To store binary subtypes, the storage type is extended and exposed as json::binary_t:

    auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE});\nauto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n

    There are several convenience functions to check and set the subtype:

    binary.has_subtype();                   // returns false\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.clear_subtype();\nbinary_with_subtype.has_subtype();      // returns true\n\nbinary_with_subtype.set_subtype(42);\nbinary.set_subtype(23);\n\nbinary.subtype();                       // returns 23\n

    As json::binary_t is subclassing std::vector<std::uint8_t>, all member functions are available:

    binary.size();  // returns 4\nbinary[1];      // returns 0xFE\n

    JSON values can be constructed from json::binary_t:

    json j = binary;\n

    Binary values are primitive values just like numbers or strings:

    j.is_binary();    // returns true\nj.is_primitive(); // returns true\n

    Given a binary JSON value, the binary_t can be accessed by reference as via get_binary():

    j.get_binary().has_subtype();  // returns true\nj.get_binary().size();         // returns 4\n

    For convenience, binary JSON values can be constructed via json::binary:

    auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23);\nauto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE});\n\nj2 == j;                        // returns true\nj3.get_binary().has_subtype();  // returns false\nj3.get_binary().subtype();      // returns std::uint64_t(-1) as j3 has no subtype\n
    "},{"location":"features/binary_values/#serialization","title":"Serialization","text":"

    Binary values are serialized differently according to the formats.

    "},{"location":"features/binary_values/#json","title":"JSON","text":"

    JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: bytes holds an array of integers, and subtype is an integer or null.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// serialize to standard output\nstd::cout << j.dump(2) << std::endl;\n

    Output:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n

    No roundtrip for binary values

    The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes.

    "},{"location":"features/binary_values/#bjdata","title":"BJData","text":"

    BJData neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in BJData)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BJData\nauto v = json::to_bjdata(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_bjdata(j, true, true);\n

    The resulting vector has 22 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x23 0x69 0x01                  // '#' 'i' type of the array elements: unsigned integers\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n    0x5B                            // '[' array\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/binary_values/#bson","title":"BSON","text":"

    BSON supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to BSON\nauto v = json::to_bson(j);      \n

    v is a std::vector<std::uint8t> with the following 22 elements:

    0x16 0x00 0x00 0x00                         // number of bytes in the document\n    0x05                                    // binary value\n        0x62 0x69 0x6E 0x61 0x72 0x79 0x00  // key \"binary\" + null byte\n        0x04 0x00 0x00 0x00                 // number of bytes\n        0x2a                                // subtype\n        0xCA 0xFE 0xBA 0xBE                 // content\n0x00                                        // end of the document\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#cbor","title":"CBOR","text":"

    CBOR supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to CBOR\nauto v = json::to_cbor(j);      \n

    v is a std::vector<std::uint8t> with the following 15 elements:

    0xA1                                   // map(1)\n    0x66                               // text(6)\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD8 0x2A                          // tag(42)\n    0x44                               // bytes(4)\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless json::cbor_tag_handler_t::ignore or json::cbor_tag_handler_t::store is passed to json::from_cbor.

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": null\n  }\n}\n
    "},{"location":"features/binary_values/#messagepack","title":"MessagePack","text":"

    MessagePack supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as signed 8-bit integer.

    If no subtype is given, the bin family (bin8, bin16, bin32) is used.

    Example

    Code:

    // create a binary value of subtype 42\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to MessagePack\nauto v = json::to_msgpack(j);      \n

    v is a std::vector<std::uint8t> with the following 14 elements:

    0x81                                   // fixmap1\n    0xA6                               // fixstr6\n        0x62 0x69 0x6E 0x61 0x72 0x79  // \"binary\"\n    0xD6                               // fixext4\n        0x2A                           // subtype\n        0xCA 0xFE 0xBA 0xBE            // content\n

    Note that the serialization preserves the subtype, and deserializing v would yield the following value:

    {\n  \"binary\": {\n    \"bytes\": [202, 254, 186, 190],\n    \"subtype\": 42\n  }\n}\n
    "},{"location":"features/binary_values/#ubjson","title":"UBJSON","text":"

    UBJSON neither supports binary values nor subtypes, and proposes to serialize binary values as array of uint8 values. This translation is implemented by the library.

    Example

    Code:

    // create a binary value of subtype 42 (will be ignored in UBJSON)\njson j;\nj[\"binary\"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42);\n\n// convert to UBJSON\nauto v = json::to_ubjson(j);      \n

    v is a std::vector<std::uint8t> with the following 20 elements:

    0x7B                                             // '{'\n    0x69 0x06                                    // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79                // \"binary\"\n    0x5B                                         // '['\n        0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE  // content (each byte prefixed with 'U')\n    0x5D                                         // ']'\n0x7D                                             // '}'\n

    The following code uses the type and size optimization for UBJSON:

    // convert to UBJSON using the size and type optimization\nauto v = json::to_ubjson(j, true, true);\n

    The resulting vector has 23 elements; the optimization is not effective for examples with few values:

    0x7B                                // '{'\n    0x24                            // '$' type of the object elements\n    0x5B                            // '[' array\n    0x23 0x69 0x01                  // '#' i 1 number of object elements\n    0x69 0x06                       // i 6 (length of the key)\n    0x62 0x69 0x6E 0x61 0x72 0x79   // \"binary\"\n        0x24 0x55                   // '$' 'U' type of the array elements: unsigned integers\n        0x23 0x69 0x04              // '#' i 4 number of array elements\n        0xCA 0xFE 0xBA 0xBE         // content\n

    Note that subtype (42) is not serialized and that UBJSON has no binary type, and deserializing v would yield the following value:

    {\n  \"binary\": [202, 254, 186, 190]\n}\n
    "},{"location":"features/comments/","title":"Comments","text":"

    This library does not support comments by default. It does so for three reasons:

    1. Comments are not part of the JSON specification. You may argue that // or /* */ are allowed in JavaScript, but JSON is not JavaScript.
    2. This was not an oversight: Douglas Crockford wrote on this in May 2012:

      I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

      Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

    3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check The Harmful Consequences of the Robustness Principle on this.

    However, you can pass set parameter ignore_comments to true in the parse function to ignore // or /* */ comments. Comments will then be treated as whitespace.

    Example

    Consider the following JSON with comments.

    {\n    // update in 2006: removed Pluto\n    \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n}\n

    When calling parse without additional argument, a parse error exception is thrown. If ignore_comments is set to true, the comments are ignored during parsing:

    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::string s = R\"(\n    {\n        // update in 2006: removed Pluto\n        \"planets\": [\"Mercury\", \"Venus\", \"Earth\", \"Mars\",\n                    \"Jupiter\", \"Uranus\", \"Neptune\" /*, \"Pluto\" */]\n    }\n    )\";\n\n    try\n    {\n        json j = json::parse(s);\n    }\n    catch (json::exception &e)\n    {\n        std::cout << e.what() << std::endl;\n    }\n\n    json j = json::parse(s,\n                         /* callback */ nullptr,\n                         /* allow exceptions */ true,\n                         /* ignore_comments */ true);\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    [json.exception.parse_error.101] parse error at line 3, column 9:\nsyntax error while parsing object key - invalid literal;\nlast read: '<U+000A>    {<U+000A>        /'; expected string literal\n
    {\n  \"planets\": [\n    \"Mercury\",\n    \"Venus\",\n    \"Earth\",\n    \"Mars\",\n    \"Jupiter\",\n    \"Uranus\",\n    \"Neptune\"\n  ]\n}\n
    "},{"location":"features/enum_conversion/","title":"Specializing enum conversion","text":"

    By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.

    It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:

    // example enum type declaration\nenum TaskState {\n    TS_STOPPED,\n    TS_RUNNING,\n    TS_COMPLETED,\n    TS_INVALID=-1,\n};\n\n// map TaskState values to JSON as strings\nNLOHMANN_JSON_SERIALIZE_ENUM( TaskState, {\n    {TS_INVALID, nullptr},\n    {TS_STOPPED, \"stopped\"},\n    {TS_RUNNING, \"running\"},\n    {TS_COMPLETED, \"completed\"},\n})\n

    The NLOHMANN_JSON_SERIALIZE_ENUM() macro declares a set of to_json() / from_json() functions for type TaskState while avoiding repetition and boilerplate serialization code.

    "},{"location":"features/enum_conversion/#usage","title":"Usage","text":"
    // enum to JSON as string\njson j = TS_STOPPED;\nassert(j == \"stopped\");\n\n// json string to enum\njson j3 = \"running\";\nassert(j3.template get<TaskState>() == TS_RUNNING);\n\n// undefined json value to enum (where the first map entry above is the default)\njson jPi = 3.14;\nassert(jPi.template get<TaskState>() == TS_INVALID );\n
    "},{"location":"features/enum_conversion/#notes","title":"Notes","text":"

    Just as in Arbitrary Type Conversions above,

    • NLOHMANN_JSON_SERIALIZE_ENUM() MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization.
    • It MUST be available (e.g., proper headers must be included) everywhere you use the conversions.

    Other Important points:

    • When using template get<ENUM_TYPE>(), undefined JSON values will default to the first pair specified in your map. Select this default pair carefully.
    • If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
    • To disable the default serialization of enumerators as integers and force a compiler error instead, see JSON_DISABLE_ENUM_SERIALIZATION.
    "},{"location":"features/iterators/","title":"Iterators","text":""},{"location":"features/iterators/#overview","title":"Overview","text":"

    A basic_json value is a container and allows access via iterators. Depending on the value type, basic_json stores zero or more values.

    As for other containers, begin() returns an iterator to the first value and end() returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, begin() will return end().

    "},{"location":"features/iterators/#iteration-order-for-objects","title":"Iteration order for objects","text":"

    When iterating over objects, values are ordered with respect to the object_comparator_t type which defaults to std::less. See the types documentation for more information.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    1\n3\n2\n

    The reason for the order is the lexicographic ordering of the object keys \"one\", \"three\", \"two\".

    "},{"location":"features/iterators/#access-object-key-during-iteration","title":"Access object key during iteration","text":"

    The JSON iterators have two member functions, key() and value() to access the object key and stored value, respectively. When calling key() on a non-object iterator, an invalid_iterator.207 exception is thrown.

    Example
    // create JSON object {\"one\": 1, \"two\": 2, \"three\": 3}\njson j;\nj[\"one\"] = 1;\nj[\"two\"] = 2;\nj[\"three\"] = 3;\n\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << it.key() << \" : \" << it.value() << std::endl;\n}\n

    Output:

    one : 1\nthree : 3\ntwo : 2\n
    "},{"location":"features/iterators/#range-based-for-loops","title":"Range-based for loops","text":"

    C++11 allows using range-based for loops to iterate over a container.

    for (auto it : j_object)\n{\n    // \"it\" is of type json::reference and has no key() member\n    std::cout << \"value: \" << it << '\\n';\n}\n

    For this reason, the items() function allows accessing iterator::key() and iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator.

    for (auto& el : j_object.items())\n{\n    std::cout << \"key: \" << el.key() << \", value:\" << el.value() << '\\n';\n}\n

    The items() function also allows using structured bindings (C++17):

    for (auto& [key, val] : j_object.items())\n{\n    std::cout << \"key: \" << key << \", value:\" << val << '\\n';\n}\n

    Note

    When iterating over an array, key() will return the index of the element as string. For primitive types (e.g., numbers), key() returns an empty string.

    Warning

    Using items() on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See #2040 for more information.

    "},{"location":"features/iterators/#reverse-iteration-order","title":"Reverse iteration order","text":"

    rbegin() and rend() return iterators in the reverse sequence.

    Example
    json j = {1, 2, 3, 4};\n\nfor (auto it = j.rbegin(); it != j.rend(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    4\n3\n2\n1\n
    "},{"location":"features/iterators/#iterating-strings-and-binary-values","title":"Iterating strings and binary values","text":"

    Note that \"value\" means a JSON value in this setting, not values stored in the underlying containers. That is, *begin() returns the complete string or binary array and is also safe the underlying string or binary array is empty.

    Example
    json j = \"Hello, world\";\nfor (auto it = j.begin(); it != j.end(); ++it)\n{\n    std::cout << *it << std::endl;\n}\n

    Output:

    \"Hello, world\"\n
    "},{"location":"features/iterators/#iterator-invalidation","title":"Iterator invalidation","text":"Operations invalidated iterators clear all"},{"location":"features/json_patch/","title":"JSON Patch and Diff","text":""},{"location":"features/json_patch/#patches","title":"Patches","text":"

    JSON Patch (RFC 6902) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the patch function, a JSON Patch is applied to the current JSON value by executing all operations from the patch.

    Example

    The following code shows how a JSON patch is applied to a value.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json doc = R\"(\n        {\n          \"baz\": \"qux\",\n          \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the patch\n    json patch = R\"(\n        [\n          { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n          { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n          { \"op\": \"remove\", \"path\": \"/foo\"}\n        ]\n    )\"_json;\n\n    // apply the patch\n    json patched_doc = doc.patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << doc << \"\\n\\n\"\n              << std::setw(4) << patched_doc << std::endl;\n}\n

    Output:

    {\n    \"baz\": \"qux\",\n    \"foo\": \"bar\"\n}\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_patch/#diff","title":"Diff","text":"

    The library can also calculate a JSON patch (i.e., a diff) given two JSON values.

    Invariant

    For two JSON values source and target, the following code yields always true:

    source.patch(diff(source, target)) == target;\n
    Example

    The following code shows how a JSON patch is created as a diff for two JSON values.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the source document\n    json source = R\"(\n        {\n            \"baz\": \"qux\",\n            \"foo\": \"bar\"\n        }\n    )\"_json;\n\n    // the target document\n    json target = R\"(\n        {\n            \"baz\": \"boo\",\n            \"hello\": [\n                \"world\"\n            ]\n        }\n    )\"_json;\n\n    // create the patch\n    json patch = json::diff(source, target);\n\n    // roundtrip\n    json patched_source = source.patch(patch);\n\n    // output patch and roundtrip result\n    std::cout << std::setw(4) << patch << \"\\n\\n\"\n              << std::setw(4) << patched_source << std::endl;\n}\n

    Output:

    [\n    {\n        \"op\": \"replace\",\n        \"path\": \"/baz\",\n        \"value\": \"boo\"\n    },\n    {\n        \"op\": \"remove\",\n        \"path\": \"/foo\"\n    },\n    {\n        \"op\": \"add\",\n        \"path\": \"/hello\",\n        \"value\": [\n            \"world\"\n        ]\n    }\n]\n\n{\n    \"baz\": \"boo\",\n    \"hello\": [\n        \"world\"\n    ]\n}\n
    "},{"location":"features/json_pointer/","title":"JSON Pointer","text":""},{"location":"features/json_pointer/#introduction","title":"Introduction","text":"

    The library supports JSON Pointer (RFC 6901) as alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document.

    Consider the following JSON document

    {\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n}\n

    Then every value inside the JSON document can be identified as follows:

    JSON Pointer JSON value `` {\"array\":[\"A\",\"B\",\"C\"],\"nested\":{\"one\":1,\"two\":2,\"three\":[true,false]}} /array [\"A\",\"B\",\"C\"] /array/0 A /array/1 B /array/2 C /nested {\"one\":1,\"two\":2,\"three\":[true,false]} /nested/one 1 /nested/two 2 /nested/three [true,false] /nested/three/0 true /nested/three/1 false

    Note / does not identify the root (i.e., the whole document), but an object entry with empty key \"\". See RFC 6901 for more information.

    "},{"location":"features/json_pointer/#json-pointer-creation","title":"JSON Pointer creation","text":"

    JSON Pointers can be created from a string:

    json::json_pointer p = \"/nested/one\";\n

    Furthermore, a user-defined string literal can be used to achieve the same result:

    auto p = \"/nested/one\"_json_pointer;\n

    The escaping rules of RFC 6901 are implemented. See the constructor documentation for more information.

    "},{"location":"features/json_pointer/#value-access","title":"Value access","text":"

    JSON Pointers can be used in the at, operator[], and value functions just like object keys or array indices.

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// access values\nauto val = j[\"\"_json_pointer];                              // {\"array\":[\"A\",\"B\",\"C\"],...}\nauto val1 = j[\"/nested/one\"_json_pointer];                  // 1\nauto val2 = j.at(json::json_pointer(\"/nested/three/1\"));    // false\nauto val3 = j.value(json::json_pointer(\"/nested/four\"), 0); // 0\n
    "},{"location":"features/json_pointer/#flatten-unflatten","title":"Flatten / unflatten","text":"

    The library implements a function flatten to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null).

    // the JSON value from above\nauto j = json::parse(R\"({\n    \"array\": [\"A\", \"B\", \"C\"],\n    \"nested\": {\n        \"one\": 1,\n        \"two\": 2,\n        \"three\": [true, false]\n    }\n})\");\n\n// create flattened value\nauto j_flat = j.flatten();\n

    The resulting value j_flat is:

    {\n  \"/array/0\": \"A\",\n  \"/array/1\": \"B\",\n  \"/array/2\": \"C\",\n  \"/nested/one\": 1,\n  \"/nested/two\": 2,\n  \"/nested/three/0\": true,\n  \"/nested/three/1\": false\n}\n

    The reverse function, unflatten recreates the original value.

    auto j_original = j_flat.unflatten();\n
    "},{"location":"features/json_pointer/#see-also","title":"See also","text":"
    • Class json_pointer
    • Function flatten
    • Function unflatten
    • JSON Patch
    "},{"location":"features/macros/","title":"Supported Macros","text":"

    Some aspects of the library can be configured by defining preprocessor macros before including the json.hpp header. See also the API documentation for macros for examples and more information.

    "},{"location":"features/macros/#json_assertx","title":"JSON_ASSERT(x)","text":"

    This macro controls which code is executed for runtime assertions of the library.

    See full documentation of JSON_ASSERT(x).

    "},{"location":"features/macros/#json_catch_userexception","title":"JSON_CATCH_USER(exception)","text":"

    This macro overrides catch calls inside the library.

    See full documentation of JSON_CATCH_USER(exception).

    "},{"location":"features/macros/#json_diagnostics","title":"JSON_DIAGNOSTICS","text":"

    This macro enables extended diagnostics for exception messages. Possible values are 1 to enable or 0 to disable (default).

    When enabled, exception messages contain a JSON Pointer to the JSON value that triggered the exception, see Extended diagnostic messages for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead.

    The diagnostics messages can also be controlled with the CMake option JSON_Diagnostics (OFF by default) which sets JSON_DIAGNOSTICS accordingly.

    See full documentation of JSON_DIAGNOSTICS.

    "},{"location":"features/macros/#json_has_cpp_11-json_has_cpp_14-json_has_cpp_17-json_has_cpp_20","title":"JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20","text":"

    The library targets C++11, but also supports some features introduced in later C++ versions (e.g., std::string_view support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly.

    See full documentation of JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, and JSON_HAS_CPP_20.

    "},{"location":"features/macros/#json_has_filesystem-json_has_experimental_filesystem","title":"JSON_HAS_FILESYSTEM, JSON_HAS_EXPERIMENTAL_FILESYSTEM","text":"

    When compiling with C++17, the library provides conversions from and to std::filesystem::path. As compiler support for filesystem is limited, the library tries to detect whether <filesystem>/std::filesystem (JSON_HAS_FILESYSTEM) or <experimental/filesystem>/std::experimental::filesystem (JSON_HAS_EXPERIMENTAL_FILESYSTEM) should be used. To override the built-in check, define JSON_HAS_FILESYSTEM or JSON_HAS_EXPERIMENTAL_FILESYSTEM to 1.

    See full documentation of JSON_HAS_FILESYSTEM and JSON_HAS_EXPERIMENTAL_FILESYSTEM.

    "},{"location":"features/macros/#json_noexception","title":"JSON_NOEXCEPTION","text":"

    Exceptions can be switched off by defining the symbol JSON_NOEXCEPTION.

    See full documentation of JSON_NOEXCEPTION.

    "},{"location":"features/macros/#json_disable_enum_serialization","title":"JSON_DISABLE_ENUM_SERIALIZATION","text":"

    When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using NLOHMANN_JSON_SERIALIZE_ENUM.

    See full documentation of JSON_DISABLE_ENUM_SERIALIZATION.

    "},{"location":"features/macros/#json_no_io","title":"JSON_NO_IO","text":"

    When defined, headers <cstdio>, <ios>, <iosfwd>, <istream>, and <ostream> are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)).

    See full documentation of JSON_NO_IO.

    "},{"location":"features/macros/#json_skip_library_version_check","title":"JSON_SKIP_LIBRARY_VERSION_CHECK","text":"

    When defined, the library will not create a compiler warning when a different version of the library was already included.

    See full documentation of JSON_SKIP_LIBRARY_VERSION_CHECK.

    "},{"location":"features/macros/#json_skip_unsupported_compiler_check","title":"JSON_SKIP_UNSUPPORTED_COMPILER_CHECK","text":"

    When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows to use the library with compilers that do not fully support C++11 and may only work if unsupported features are not used.

    See full documentation of JSON_SKIP_UNSUPPORTED_COMPILER_CHECK.

    "},{"location":"features/macros/#json_throw_userexception","title":"JSON_THROW_USER(exception)","text":"

    This macro overrides throw calls inside the library. The argument is the exception to be thrown.

    See full documentation of JSON_THROW_USER(exception).

    "},{"location":"features/macros/#json_try_user","title":"JSON_TRY_USER","text":"

    This macro overrides try calls inside the library.

    See full documentation of JSON_TRY_USER.

    "},{"location":"features/macros/#json_use_implicit_conversions","title":"JSON_USE_IMPLICIT_CONVERSIONS","text":"

    When defined to 0, implicit conversions are switched off. By default, implicit conversions are switched on.

    See full documentation of JSON_USE_IMPLICIT_CONVERSIONS.

    "},{"location":"features/macros/#nlohmann_define_type_-nlohmann_define_derived_type_","title":"NLOHMANN_DEFINE_TYPE_*(...), NLOHMANN_DEFINE_DERIVED_TYPE_*(...)","text":"

    The library defines 12 macros to simplify the serialization/deserialization of types. See the page on arbitrary type conversion for a detailed discussion.

    "},{"location":"features/macros/#nlohmann_json_serialize_enumtype","title":"NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)","text":"

    This macro simplifies the serialization/deserialization of enum types. See Specializing enum conversion for more information.

    See full documentation of NLOHMANN_JSON_SERIALIZE_ENUM.

    "},{"location":"features/macros/#nlohmann_json_version_major-nlohmann_json_version_minor-nlohmann_json_version_patch","title":"NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH","text":"

    These macros are defined by the library and contain the version numbers according to Semantic Versioning 2.0.0.

    See full documentation of NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH.

    "},{"location":"features/merge_patch/","title":"JSON Merge Patch","text":"

    The library supports JSON Merge Patch (RFC 7386) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value.

    Instead of using JSON Pointer to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified.

    Example

    The following code shows how a JSON Merge Patch is applied to a JSON document.

    #include <iostream>\n#include <nlohmann/json.hpp>\n#include <iomanip> // for std::setw\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // the original document\n    json document = R\"({\n                \"title\": \"Goodbye!\",\n                \"author\": {\n                    \"givenName\": \"John\",\n                    \"familyName\": \"Doe\"\n                },\n                \"tags\": [\n                    \"example\",\n                    \"sample\"\n                ],\n                \"content\": \"This will be unchanged\"\n            })\"_json;\n\n    // the patch\n    json patch = R\"({\n                \"title\": \"Hello!\",\n                \"phoneNumber\": \"+01-123-456-7890\",\n                \"author\": {\n                    \"familyName\": null\n                },\n                \"tags\": [\n                    \"example\"\n                ]\n            })\"_json;\n\n    // apply the patch\n    document.merge_patch(patch);\n\n    // output original and patched document\n    std::cout << std::setw(4) << document << std::endl;\n}\n

    Output:

    {\n    \"author\": {\n        \"givenName\": \"John\"\n    },\n    \"content\": \"This will be unchanged\",\n    \"phoneNumber\": \"+01-123-456-7890\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"title\": \"Hello!\"\n}\n
    "},{"location":"features/namespace/","title":"nlohmann Namespace","text":"

    The 3.11.0 release introduced an inline namespace to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types.

    "},{"location":"features/namespace/#structure","title":"Structure","text":"

    The complete default namespace name is derived as follows:

    • The root namespace is always nlohmann.
    • The inline namespace starts with json_abi and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order:
      • JSON_DIAGNOSTICS defined non-zero appends _diag.
      • JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON defined non-zero appends _ldvcmp.
    • The inline namespace ends with the suffix _v followed by the 3 components of the version number separated by underscores. To omit the version component, see Disabling the version component below.

    For example, the namespace name for version 3.11.2 with JSON_DIAGNOSTICS defined to 1 is:

    nlohmann::json_abi_diag_v3_11_2\n
    "},{"location":"features/namespace/#purpose","title":"Purpose","text":"

    Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of JSON_DIAGNOSTICS. This is illustrated in the diagram below.

    graph\n    json[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=0\"]\n    json_diag[\"<strong>nlohmann_json (v3.10.5)</strong><br>JSON_DIAGNOSTICS=1\"]\n    library[\"<strong>some library</strong>\"]\n    app[\"<strong>application</strong>\"]\n\n    library --> json\n    app --> json_diag\n    app --> library

    In releases prior to 3.11.0, mixing any version of the JSON library with different JSON_DIAGNOSTICS settings would result in a crashing application. If some_library never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names.

    "},{"location":"features/namespace/#limitations","title":"Limitations","text":"

    Neither the compiler nor the linker will issue as much as a warning when translation units \u2013 intended to be linked together and that include different versions and/or configurations of the JSON library \u2013 exchange and use library types.

    There is an exception when forward declarations are used (i.e., when including json_fwd.hpp) in which case the linker may complain about undefined references.

    "},{"location":"features/namespace/#disabling-the-version-component","title":"Disabling the version component","text":"

    Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, at their own risk, disable the version component of the linline namespace, allowing different versions \u2013 but not configurations \u2013 to be used in cases where the linker would otherwise output undefined reference errors.

    To do so, define NLOHMANN_JSON_NAMESPACE_NO_VERSION to 1.

    This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the NLOHMANN_JSON_NAMESPACE_NO_VERSION macro.

    Use at your own risk

    Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#disabling-the-inline-namespace-completely","title":"Disabling the inline namespace completely","text":"

    When interoperability with code using a pre-3.11.0 version of the library is required, users can, at their own risk restore the old namespace layout by redefining NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END as follows:

    #define NLOHMANN_JSON_NAMESPACE_BEGIN  namespace nlohmann {\n#define NLOHMANN_JSON_NAMESPACE_END    }\n

    Use at your own risk

    Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned!

    "},{"location":"features/namespace/#version-history","title":"Version history","text":"
    • Introduced inline namespace (json_v3_11_0[_abi-tag]*) in version 3.11.0.
    • Changed structure of inline namespace in version 3.11.2.
    "},{"location":"features/object_order/","title":"Object Order","text":"

    The JSON standard defines objects as \"an unordered collection of zero or more name/value pairs\". As such, an implementation does not need to preserve any specific order of object keys.

    "},{"location":"features/object_order/#default-behavior-sort-keys","title":"Default behavior: sort keys","text":"

    The default type nlohmann::json uses a std::map to store JSON objects, and thus stores object keys sorted alphabetically.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"three\": 3,\n  \"two\": 2\n}\n
    "},{"location":"features/object_order/#alternative-behavior-preserve-insertion-order","title":"Alternative behavior: preserve insertion order","text":"

    If you do want to preserve the insertion order, you can try the type nlohmann::ordered_json.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing ordered_json = nlohmann::ordered_json;\n\nint main()\n{\n    ordered_json j;\n    j[\"one\"] = 1;\n    j[\"two\"] = 2;\n    j[\"three\"] = 3;\n\n    std::cout << j.dump(2) << '\\n';\n}\n

    Output:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Alternatively, you can use a more sophisticated ordered map like tsl::ordered_map (integration) or nlohmann::fifo_map (integration).

    "},{"location":"features/object_order/#notes-on-parsing","title":"Notes on parsing","text":"

    Note that you also need to call the right parse function when reading from a file. Assume file input.json contains the JSON object above:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n

    Right way

    The following code correctly calls the parse function from nlohmann::ordered_json:

    std::ifstream i(\"input.json\");\nauto j = nlohmann::ordered_json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"two\": 2,\n  \"three\": 3\n}\n
    Wrong way

    The following code incorrectly calls the parse function from nlohmann::json which does not preserve the insertion order, but sorts object keys. Assigning the result to nlohmann::ordered_json compiles, but does not restore the order from the input file.

    std::ifstream i(\"input.json\");\nnlohmann::ordered_json j = nlohmann::json::parse(i);\nstd::cout << j.dump(2) << std::endl;\n

    The output will be:

    {\n  \"one\": 1,\n  \"three\": 3\n  \"two\": 2,\n}\n
    "},{"location":"features/binary_formats/","title":"Binary Formats","text":"

    Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports

    • BJData (Binary JData),
    • BSON (Binary JSON),
    • CBOR (Concise Binary Object Representation),
    • MessagePack, and
    • UBJSON (Universal Binary JSON)

    to efficiently encode JSON values to byte vectors and to decode such vectors.

    "},{"location":"features/binary_formats/#comparison","title":"Comparison","text":""},{"location":"features/binary_formats/#completeness","title":"Completeness","text":"Format Serialization Deserialization BJData complete complete BSON incomplete: top-level value must be an object incomplete, but all JSON types are supported CBOR complete incomplete, but all JSON types are supported MessagePack complete complete UBJSON complete complete"},{"location":"features/binary_formats/#binary-values","title":"Binary values","text":"Format Binary values Binary subtypes BJData not supported not supported BSON supported supported CBOR supported supported MessagePack supported supported UBJSON not supported not supported

    See binary values for more information.

    "},{"location":"features/binary_formats/#sizes","title":"Sizes","text":"Format canada.json twitter.json citm_catalog.json jeopardy.json BJData 53.2 % 91.1 % 78.1 % 96.6 % BJData (size) 58.6 % 92.1 % 86.7 % 97.4 % BJData (size+tyoe) 58.6 % 92.1 % 86.5 % 97.4 % BSON 85.8 % 95.2 % 95.8 % 106.7 % CBOR 50.5 % 86.3 % 68.4 % 88.0 % MessagePack 50.5 % 86.0 % 68.5 % 87.9 % UBJSON 53.2 % 91.3 % 78.2 % 96.6 % UBJSON (size) 58.6 % 92.3 % 86.8 % 97.4 % UBJSON (size+type) 55.9 % 92.3 % 85.0 % 95.0 %

    Sizes compared to minified JSON value.

    "},{"location":"features/binary_formats/bjdata/","title":"BJData","text":"

    The BJData format was derived from and improved upon Universal Binary JSON(UBJSON) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (ND-arrays); it also adds 5 new type markers - [u] - uint16, [m] - uint32, [M] - uint64, [h] - float16 and [B] - byte - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms.

    Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and quasi-human-readable. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types are directly human-readable. Data stored in the BJData/UBJSON format are not only compact in size, fast to read/write, but also can be directly searched or read using simple processing.

    References

    • BJData Specification
    "},{"location":"features/binary_formats/bjdata/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BJData types according to the BJData specification:

    JSON value type value/range BJData type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..65535 uint16 u number_integer 65536..2147483647 int32 l number_integer 2147483648..4294967295 uint32 m number_integer 4294967296..9223372036854775807 int64 L number_integer 9223372036854775808..18446744073709551615 uint64 M number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..65535 uint16 u number_unsigned 65536..2147483647 int32 l number_unsigned 2147483648..4294967295 uint32 m number_unsigned 4294967296..9223372036854775807 int64 L number_unsigned 9223372036854775808..18446744073709551615 uint64 M number_float any value float64 D string with shortest length indicator string S array see notes on optimized format/ND-array array [ object see notes on optimized format map { binary see notes on binary values array [$B

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a BJData value.

    Any BJData output created by to_bjdata can be successfully parsed by from_bjdata.

    Size constraints

    The following values can not be converted to a BJData value:

    • strings with more than 18446744073709551615 bytes, i.e., 2^{64}-1 bytes (theoretical)

    Unused BJData markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Endianness

    A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers UiuImlML and floating-point values hdD) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order.

    Optimized formats

    Optimized formats for containers are supported via two parameters of to_bjdata:

    • Parameter use_size adds size information to the beginning of a container and removes the closing marker.
    • Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container.

    ND-array optimized format

    BJData extends UBJSON's optimized array size marker to support ND-arrays of uniform numerical data types (referred to as packed arrays). For example, the 2-D uint8 integer array [[1,2],[3,4],[5,6]], stored as nested optimized array in UBJSON [ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ], can be further compressed in BJData to [$U#[$i#i2 2 3 1 2 3 4 5 6 or [$U#[i2 i3] 1 2 3 4 5 6.

    To maintain type and size information, ND-arrays are converted to JSON objects following the annotated array format (defined in the JData specification (Draft 3)), when parsed using from_bjdata. For example, the above 2-D uint8 array can be parsed and accessed as

    {\n    \"_ArrayType_\": \"uint8\",\n    \"_ArraySize_\": [2,3],\n    \"_ArrayData_\": [1,2,3,4,5,6]\n}\n

    Likewise, when a JSON object in the above form is serialzed using to_bjdata, it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in \"_ArraySize_\" contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated.

    The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array.

    Restrictions in optimized data types for arrays and objects

    Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the $ marker in an optimized array and object container are restricted to non-zero-fixed-length data types. Therefore, the valid optimized type markers can only be one of UiuImlMLhdDCB. This also means other variable ([{SH) or zero-length types (TFN) can not be used in an optimized array or object in BJData.

    Binary values

    BJData provides a dedicated B marker (defined in the BJData specification (Draft 3)) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized.

    To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the version parameter of to_bjdata.

    In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print BJData's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to BJData\n    std::vector<std::uint8_t> v = json::to_bjdata(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to BJData using default representation\n    std::vector<std::uint8_t> v_array = json::to_bjdata(array);\n    // serialize it to BJData using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_bjdata(array, true);\n    // serialize it to BJData using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_bjdata(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/bjdata/#deserialization","title":"Deserialization","text":"

    The library maps BJData types to JSON value types as follows:

    BJData type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float16 number_float h float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i uint16 number_unsigned u int16 number_integer I uint32 number_unsigned m int32 number_integer l uint64 number_unsigned M int64 number_integer L byte number_unsigned B string string S char string C array array (optimized values are supported) [ ND-array object (in JData annotated array format) [$.#[. object object (optimized values are supported) { binary binary (strongly-typed byte array) [$B

    Complete mapping

    The mapping is complete in the sense that any BJData value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with BJData\n    json j = json::from_bjdata(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/bson/","title":"BSON","text":"

    BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.

    References

    • BSON Website - the main source on BSON
    • BSON Specification - the specification
    "},{"location":"features/binary_formats/bson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to BSON types:

    JSON value type value/range BSON type marker null null null 0x0A boolean true, false boolean 0x08 number_integer -9223372036854775808..-2147483649 int64 0x12 number_integer -2147483648..2147483647 int32 0x10 number_integer 2147483648..9223372036854775807 int64 0x12 number_unsigned 0..2147483647 int32 0x10 number_unsigned 2147483648..9223372036854775807 int64 0x12 number_unsigned 9223372036854775808..18446744073709551615 uint64 0x11 number_float any value double 0x01 string any value string 0x02 array any value document 0x04 object any value document 0x03 binary any value binary 0x05

    Incomplete mapping

    The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to BSON\n    std::vector<std::uint8_t> v = json::to_bson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 \n
    "},{"location":"features/binary_formats/bson/#deserialization","title":"Deserialization","text":"

    The library maps BSON record types to JSON value types as follows:

    BSON type BSON marker byte JSON value type double 0x01 number_float string 0x02 string document 0x03 object array 0x04 array binary 0x05 binary undefined 0x06 unsupported ObjectId 0x07 unsupported boolean 0x08 boolean UTC Date-Time 0x09 unsupported null 0x0A null Regular Expr. 0x0B unsupported DB Pointer 0x0C unsupported JavaScript Code 0x0D unsupported Symbol 0x0E unsupported JavaScript Code 0x0F unsupported int32 0x10 number_integer uint64(Timestamp) 0x11 number_unsigned 128-bit decimal float 0x13 unsupported Max Key 0x7F unsupported Min Key 0xFF unsupported

    Incomplete mapping

    The mapping is incomplete. The unsupported mappings are indicated in the table above.

    Handling of BSON type 0x11

    BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,\n                                   0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,\n                                   0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,\n                                   0x00, 0x00, 0x00\n                                  };\n\n    // deserialize it with BSON\n    json j = json::from_bson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/cbor/","title":"CBOR","text":"

    The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.

    References

    • CBOR Website - the main source on CBOR
    • CBOR Playground - an interactive webpage to translate between JSON and CBOR
    • RFC 7049 - the CBOR specification
    "},{"location":"features/binary_formats/cbor/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049):

    JSON value type value/range CBOR type first byte null null Null 0xF6 boolean true True 0xF5 boolean false False 0xF4 number_integer -9223372036854775808..-2147483649 Negative integer (8 bytes follow) 0x3B number_integer -2147483648..-32769 Negative integer (4 bytes follow) 0x3A number_integer -32768..-129 Negative integer (2 bytes follow) 0x39 number_integer -128..-25 Negative integer (1 byte follow) 0x38 number_integer -24..-1 Negative integer 0x20..0x37 number_integer 0..23 Integer 0x00..0x17 number_integer 24..255 Unsigned integer (1 byte follow) 0x18 number_integer 256..65535 Unsigned integer (2 bytes follow) 0x19 number_integer 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_integer 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_unsigned 0..23 Integer 0x00..0x17 number_unsigned 24..255 Unsigned integer (1 byte follow) 0x18 number_unsigned 256..65535 Unsigned integer (2 bytes follow) 0x19 number_unsigned 65536..4294967295 Unsigned integer (4 bytes follow) 0x1A number_unsigned 4294967296..18446744073709551615 Unsigned integer (8 bytes follow) 0x1B number_float any value representable by a float Single-Precision Float 0xFA number_float any value NOT representable by a float Double-Precision Float 0xFB string length: 0..23 UTF-8 string 0x60..0x77 string length: 23..255 UTF-8 string (1 byte follow) 0x78 string length: 256..65535 UTF-8 string (2 bytes follow) 0x79 string length: 65536..4294967295 UTF-8 string (4 bytes follow) 0x7A string length: 4294967296..18446744073709551615 UTF-8 string (8 bytes follow) 0x7B array size: 0..23 array 0x80..0x97 array size: 23..255 array (1 byte follow) 0x98 array size: 256..65535 array (2 bytes follow) 0x99 array size: 65536..4294967295 array (4 bytes follow) 0x9A array size: 4294967296..18446744073709551615 array (8 bytes follow) 0x9B object size: 0..23 map 0xA0..0xB7 object size: 23..255 map (1 byte follow) 0xB8 object size: 256..65535 map (2 bytes follow) 0xB9 object size: 65536..4294967295 map (4 bytes follow) 0xBA object size: 4294967296..18446744073709551615 map (8 bytes follow) 0xBB binary size: 0..23 byte string 0x40..0x57 binary size: 23..255 byte string (1 byte follow) 0x58 binary size: 256..65535 byte string (2 bytes follow) 0x59 binary size: 65536..4294967295 byte string (4 bytes follow) 0x5A binary size: 4294967296..18446744073709551615 byte string (8 bytes follow) 0x5B

    Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see \"binary\" cells in the table above.

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a CBOR value.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to null.

    Unused CBOR types

    The following CBOR types are not used in the conversion:

    • UTF-8 strings terminated by \"break\" (0x7F)
    • arrays terminated by \"break\" (0x9F)
    • maps terminated by \"break\" (0xBF)
    • byte strings terminated by \"break\" (0x5F)
    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)
    • half-precision floats (0xF9)
    • break (0xFF)

    Tagged items

    Binary subtypes will be serialized as tagged items. See binary values for an example.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to CBOR\n    std::vector<std::uint8_t> v = json::to_cbor(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/cbor/#deserialization","title":"Deserialization","text":"

    The library maps CBOR types to JSON value types as follows:

    CBOR type JSON value type first byte Integer number_unsigned 0x00..0x17 Unsigned integer number_unsigned 0x18 Unsigned integer number_unsigned 0x19 Unsigned integer number_unsigned 0x1A Unsigned integer number_unsigned 0x1B Negative integer number_integer 0x20..0x37 Negative integer number_integer 0x38 Negative integer number_integer 0x39 Negative integer number_integer 0x3A Negative integer number_integer 0x3B Byte string binary 0x40..0x57 Byte string binary 0x58 Byte string binary 0x59 Byte string binary 0x5A Byte string binary 0x5B UTF-8 string string 0x60..0x77 UTF-8 string string 0x78 UTF-8 string string 0x79 UTF-8 string string 0x7A UTF-8 string string 0x7B UTF-8 string string 0x7F array array 0x80..0x97 array array 0x98 array array 0x99 array array 0x9A array array 0x9B array array 0x9F map object 0xA0..0xB7 map object 0xB8 map object 0xB9 map object 0xBA map object 0xBB map object 0xBF False false 0xF4 True true 0xF5 Null null 0xF6 Half-Precision Float number_float 0xF9 Single-Precision Float number_float 0xFA Double-Precision Float number_float 0xFB

    Incomplete mapping

    The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors:

    • date/time (0xC0..0xC1)
    • bignum (0xC2..0xC3)
    • decimal fraction (0xC4)
    • bigfloat (0xC5)
    • expected conversions (0xD5..0xD7)
    • simple values (0xE0..0xF3, 0xF8)
    • undefined (0xF7)

    Object keys

    CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected.

    Tagged items

    Tagged items will throw a parse error by default. They can be ignored by passing cbor_tag_handler_t::ignore to function from_cbor. They can be stored by passing cbor_tag_handler_t::store to function from_cbor.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with CBOR\n    json j = json::from_cbor(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/messagepack/","title":"MessagePack","text":"

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.

    References

    • MessagePack website
    • MessagePack specification
    "},{"location":"features/binary_formats/messagepack/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:

    JSON value type value/range MessagePack type first byte null null nil 0xC0 boolean true true 0xC3 boolean false false 0xC2 number_integer -9223372036854775808..-2147483649 int64 0xD3 number_integer -2147483648..-32769 int32 0xD2 number_integer -32768..-129 int16 0xD1 number_integer -128..-33 int8 0xD0 number_integer -32..-1 negative fixint 0xE0..0xFF number_integer 0..127 positive fixint 0x00..0x7F number_integer 128..255 uint 8 0xCC number_integer 256..65535 uint 16 0xCD number_integer 65536..4294967295 uint 32 0xCE number_integer 4294967296..18446744073709551615 uint 64 0xCF number_unsigned 0..127 positive fixint 0x00..0x7F number_unsigned 128..255 uint 8 0xCC number_unsigned 256..65535 uint 16 0xCD number_unsigned 65536..4294967295 uint 32 0xCE number_unsigned 4294967296..18446744073709551615 uint 64 0xCF number_float any value representable by a float float 32 0xCA number_float any value NOT representable by a float float 64 0xCB string length: 0..31 fixstr 0xA0..0xBF string length: 32..255 str 8 0xD9 string length: 256..65535 str 16 0xDA string length: 65536..4294967295 str 32 0xDB array size: 0..15 fixarray 0x90..0x9F array size: 16..65535 array 16 0xDC array size: 65536..4294967295 array 32 0xDD object size: 0..15 fix map 0x80..0x8F object size: 16..65535 map 16 0xDE object size: 65536..4294967295 map 32 0xDF binary size: 0..255 bin 8 0xC4 binary size: 256..65535 bin 16 0xC5 binary size: 65536..4294967295 bin 32 0xC6

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Size constraints

    The following values can not be converted to a MessagePack value:

    • strings with more than 4294967295 bytes
    • byte strings with more than 4294967295 bytes
    • arrays with more than 4294967295 elements
    • objects with more than 4294967295 elements

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the dump function which serializes NaN or Infinity to null.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": 0})\"_json;\n\n    // serialize it to MessagePack\n    std::vector<std::uint8_t> v = json::to_msgpack(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        std::cout << \"0x\" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << \" \";\n    }\n    std::cout << std::endl;\n}\n

    Output:

    0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 \n
    "},{"location":"features/binary_formats/messagepack/#deserialization","title":"Deserialization","text":"

    The library maps MessagePack types to JSON value types as follows:

    MessagePack type JSON value type first byte positive fixint number_unsigned 0x00..0x7F fixmap object 0x80..0x8F fixarray array 0x90..0x9F fixstr string 0xA0..0xBF nil null 0xC0 false false 0xC2 true true 0xC3 float 32 number_float 0xCA float 64 number_float 0xCB uint 8 number_unsigned 0xCC uint 16 number_unsigned 0xCD uint 32 number_unsigned 0xCE uint 64 number_unsigned 0xCF int 8 number_integer 0xD0 int 16 number_integer 0xD1 int 32 number_integer 0xD2 int 64 number_integer 0xD3 str 8 string 0xD9 str 16 string 0xDA str 32 string 0xDB array 16 array 0xDC array 32 array 0xDD map 16 object 0xDE map 32 object 0xDF bin 8 binary 0xC4 bin 16 binary 0xC5 bin 32 binary 0xC6 ext 8 binary 0xC7 ext 16 binary 0xC8 ext 32 binary 0xC9 fixext 1 binary 0xD4 fixext 2 binary 0xD5 fixext 4 binary 0xD6 fixext 8 binary 0xD7 fixext 16 binary 0xD8 negative fixint number_integer 0xE0-0xFF

    Info

    Any MessagePack output created by to_msgpack can be successfully parsed by from_msgpack.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,\n                                   0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,\n                                   0x61, 0x00\n                                  };\n\n    // deserialize it with MessagePack\n    json j = json::from_msgpack(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/binary_formats/ubjson/","title":"UBJSON","text":"

    Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON.

    References

    • UBJSON Website
    "},{"location":"features/binary_formats/ubjson/#serialization","title":"Serialization","text":"

    The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification:

    JSON value type value/range UBJSON type marker null null null Z boolean true true T boolean false false F number_integer -9223372036854775808..-2147483649 int64 L number_integer -2147483648..-32769 int32 l number_integer -32768..-129 int16 I number_integer -128..127 int8 i number_integer 128..255 uint8 U number_integer 256..32767 int16 I number_integer 32768..2147483647 int32 l number_integer 2147483648..9223372036854775807 int64 L number_unsigned 0..127 int8 i number_unsigned 128..255 uint8 U number_unsigned 256..32767 int16 I number_unsigned 32768..2147483647 int32 l number_unsigned 2147483648..9223372036854775807 int64 L number_unsigned 2147483649..18446744073709551615 high-precision H number_float any value float64 D string with shortest length indicator string S array see notes on optimized format array [ object see notes on optimized format map {

    Complete mapping

    The mapping is complete in the sense that any JSON value type can be converted to a UBJSON value.

    Any UBJSON output created by to_ubjson can be successfully parsed by from_ubjson.

    Size constraints

    The following values can not be converted to a UBJSON value:

    • strings with more than 9223372036854775807 bytes (theoretical)

    Unused UBJSON markers

    The following markers are not used in the conversion:

    • Z: no-op values are not created.
    • C: single-byte strings are serialized with S markers.

    NaN/infinity handling

    If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to null.

    Optimized formats

    The optimized formats for containers are supported: Parameter use_size adds size information to the beginning of a container and removes the closing marker. Parameter use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The use_type parameter must only be used together with use_size = true.

    Note that use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container.

    Binary values

    If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\n// function to print UBJSON's diagnostic format\nvoid print_byte(uint8_t byte)\n{\n    if (32 < byte and byte < 128)\n    {\n        std::cout << (char)byte;\n    }\n    else\n    {\n        std::cout << (int)byte;\n    }\n}\n\nint main()\n{\n    // create a JSON value\n    json j = R\"({\"compact\": true, \"schema\": false})\"_json;\n\n    // serialize it to UBJSON\n    std::vector<std::uint8_t> v = json::to_ubjson(j);\n\n    // print the vector content\n    for (auto& byte : v)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    // create an array of numbers\n    json array = {1, 2, 3, 4, 5, 6, 7, 8};\n\n    // serialize it to UBJSON using default representation\n    std::vector<std::uint8_t> v_array = json::to_ubjson(array);\n    // serialize it to UBJSON using size optimization\n    std::vector<std::uint8_t> v_array_size = json::to_ubjson(array, true);\n    // serialize it to UBJSON using type optimization\n    std::vector<std::uint8_t> v_array_size_and_type = json::to_ubjson(array, true, true);\n\n    // print the vector contents\n    for (auto& byte : v_array)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n\n    for (auto& byte : v_array_size_and_type)\n    {\n        print_byte(byte);\n    }\n    std::cout << std::endl;\n}\n

    Output:

    {i7compactTi6schemaF}\n[i1i2i3i4i5i6i7i8]\n[#i8i1i2i3i4i5i6i7i8\n[$i#i812345678\n
    "},{"location":"features/binary_formats/ubjson/#deserialization","title":"Deserialization","text":"

    The library maps UBJSON types to JSON value types as follows:

    UBJSON type JSON value type marker no-op no value, next value is read N null null Z false false F true true T float32 number_float d float64 number_float D uint8 number_unsigned U int8 number_integer i int16 number_integer I int32 number_integer l int64 number_integer L string string S char string C array array (optimized values are supported) [ object object (optimized values are supported) {

    Complete mapping

    The mapping is complete in the sense that any UBJSON value can be converted to a JSON value.

    Example
    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // create byte vector\n    std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,\n                                   0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,\n                                   0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D\n                                  };\n\n    // deserialize it with UBJSON\n    json j = json::from_ubjson(v);\n\n    // print the deserialized JSON value\n    std::cout << std::setw(2) << j << std::endl;\n}\n

    Output:

    {\n  \"compact\": true,\n  \"schema\": 0\n}\n
    "},{"location":"features/element_access/","title":"Element Access","text":"

    There are many ways elements in a JSON value can be accessed:

    • unchecked access via operator[]
    • checked access via at
    • access with default value via value
    • iterators
    • JSON pointers
    "},{"location":"features/element_access/checked_access/","title":"Checked access: at","text":""},{"location":"features/element_access/checked_access/#overview","title":"Overview","text":"

    The at member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a basic_json::out_of_range exception otherwise.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j.at(\"name\") \"Mary Smith\" j.at(\"age\") 42 j.at(\"hobbies\") [\"hiking\", \"reading\"] j.at(\"hobbies\").at(0) \"hiking\" j.at(\"hobbies\").at(1) \"reading\"

    The return value is a reference, so it can be modified by the original value.

    Write access
    j.at(\"name\") = \"John Smith\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown.

    Accessing via invalid index or missing key
    j.at(\"hobbies\").at(3) = \"cooking\";\n

    This code produces the following exception:

    [json.exception.out_of_range.401] array index 3 is out of range\n

    When you extended diagnostic messages are enabled by defining JSON_DIAGNOSTICS, the exception further gives information where the key or index is missing or out of range.

    [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range\n
    "},{"location":"features/element_access/checked_access/#notes","title":"Notes","text":"

    Exceptions

    • at can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.
    • basic_json::out_of_range exception exceptions are thrown if the provided key is not found in an object or the provided index is invalid.
    "},{"location":"features/element_access/checked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown access to invalid array index basic_json::out_of_range exception is thrown basic_json::out_of_range exception is thrown"},{"location":"features/element_access/default_value/","title":"Access with default value: value","text":""},{"location":"features/element_access/default_value/#overview","title":"Overview","text":"

    In many situations such as configuration files, missing values are not exceptional, but may be treated as if a default value was present.

    Example

    Consider the following JSON value:

    {\n    \"logOutput\": \"result.log\",\n    \"append\": true\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"logOutput\": \"result.log\", \"append\": true} j.value(\"logOutput\", \"logfile.log\") \"result.log\" j.value(\"append\", true) true j.value(\"append\", false) true j.value(\"logLevel\", \"verbose\") \"verbose\""},{"location":"features/element_access/default_value/#note","title":"Note","text":"

    Exceptions

    • value can only be used with objects. For other types, a basic_json::type_error is thrown.
    "},{"location":"features/element_access/unchecked_access/","title":"Unchecked access: operator[]","text":""},{"location":"features/element_access/unchecked_access/#overview","title":"Overview","text":"

    Elements in a JSON object and a JSON array can be accessed via operator[] similar to a std::map and a std::vector, respectively.

    Read access

    Consider the following JSON value:

    {\n    \"name\": \"Mary Smith\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    Assume the value is parsed to a json variable j.

    expression value j {\"name\": \"Mary Smith\", \"age\": 42, \"hobbies\": [\"hiking\", \"reading\"]} j[\"name\"] \"Mary Smith\" j[\"age\"] 42 j[\"hobbies\"] [\"hiking\", \"reading\"] j[\"hobbies\"][0] \"hiking\" j[\"hobbies\"][1] \"reading\"

    The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a null value is inserted which can be immediately be overwritten.

    Write access
    j[\"name\"] = \"John Smith\";\nj[\"maidenName\"] = \"Jones\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"hiking\", \"reading\"]\n}\n

    When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with null.

    Filling up arrays with null values
    j[\"hobbies\"][0] = \"running\";\nj[\"hobbies\"][3] = \"cooking\";\n

    This code produces the following JSON value:

    {\n    \"name\": \"John Smith\",\n    \"maidenName\": \"Jones\",\n    \"age\": 42,\n    \"hobbies\": [\"running\", \"reading\", null, \"cooking\"]\n}\n
    "},{"location":"features/element_access/unchecked_access/#notes","title":"Notes","text":"

    Design rationale

    The library behaves differently to std::vector and std::map:

    • std::vector::operator[] never inserts a new element.
    • std::map::operator[] is not available for const values.

    The type json wraps all JSON value types. It would be impossible to remove operator[] for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward insert calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects.

    Info

    The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown.

    Danger

    • It is undefined behavior to access a const object with a non-existing key.
    • It is undefined behavior to access a const array with an invalid index.
    • In debug mode, an assertion will fire in both cases. You can disable assertions by defining the preprocessor symbol NDEBUG or redefine the macro JSON_ASSERT(x). See the documentation on runtime assertions for more information.

    Exceptions

    operator[] can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a basic_json::type_error is thrown.

    "},{"location":"features/element_access/unchecked_access/#summary","title":"Summary","text":"scenario non-const value const value access to existing object key reference to existing value is returned const reference to existing value is returned access to valid array index reference to existing value is returned const reference to existing value is returned access to non-existing object key reference to newly inserted null value is returned undefined behavior; runtime assertion in debug mode access to invalid array index reference to newly inserted null value is returned; any index between previous maximal index and passed index are filled with null undefined behavior; runtime assertion in debug mode"},{"location":"features/parsing/","title":"Parsing","text":"

    Note

    This page is under construction.

    "},{"location":"features/parsing/#input","title":"Input","text":""},{"location":"features/parsing/#sax-vs-dom-parsing","title":"SAX vs. DOM parsing","text":""},{"location":"features/parsing/#exceptions","title":"Exceptions","text":"

    See parsing and exceptions.

    "},{"location":"features/parsing/json_lines/","title":"JSON Lines","text":"

    The JSON Lines format is a text format of newline-delimited JSON. In particular:

    1. The input must be UTF-8 encoded.
    2. Every line must be a valid JSON value.
    3. The line separator must be \\n. As \\r is silently ignored, \\r\\n is also supported.
    4. The final character may be \\n, but is not required to be one.

    JSON Text example

    {\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n

    JSON Lines input with more than one value is treated as invalid JSON by the parse or accept functions. To process it line by line, functions like std::getline can be used:

    Example: Parse JSON Text input line by line

    The example below demonstrates how JSON Lines can be processed.

    #include <sstream>\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // JSON Lines (see https://jsonlines.org)\n    std::stringstream input;\n    input << R\"({\"name\": \"Gilbert\", \"wins\": [[\"straight\", \"7\u2663\"], [\"one pair\", \"10\u2665\"]]}\n{\"name\": \"Alexa\", \"wins\": [[\"two pair\", \"4\u2660\"], [\"two pair\", \"9\u2660\"]]}\n{\"name\": \"May\", \"wins\": []}\n{\"name\": \"Deloise\", \"wins\": [[\"three of a kind\", \"5\u2663\"]]}\n)\";\n\n    std::string line;\n    while (std::getline(input, line))\n    {\n        std::cout << json::parse(line) << std::endl;\n    }\n}\n

    Output:

    {\"name\":\"Gilbert\",\"wins\":[[\"straight\",\"7\u2663\"],[\"one pair\",\"10\u2665\"]]}\n{\"name\":\"Alexa\",\"wins\":[[\"two pair\",\"4\u2660\"],[\"two pair\",\"9\u2660\"]]}\n{\"name\":\"May\",\"wins\":[]}\n{\"name\":\"Deloise\",\"wins\":[[\"three of a kind\",\"5\u2663\"]]}\n

    Note

    Using operator>> like

    json j;\nwhile (input >> j)\n{\n    std::cout << j << std::endl;\n}\n

    with a JSON Lines input does not work, because the parser will try to parse one value after the last one.

    "},{"location":"features/parsing/parse_exceptions/","title":"Parsing and Exceptions","text":"

    When the input is not valid JSON, an exception of type parse_error is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a list of examples for parse error exceptions. In case you process untrusted input, always enclose your code with a try/catch block, like

    json j;\ntry\n{\n    j = json::parse(my_input);\n}\ncatch (json::parse_error& ex)\n{\n    std::cerr << \"parse error at byte \" << ex.byte << std::endl;\n}\n

    In case exceptions are undesired or not supported by the environment, there are different ways to proceed:

    "},{"location":"features/parsing/parse_exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    The parse() function accepts a bool parameter allow_exceptions which controls whether an exception is thrown when a parse error occurs (true, default) or whether a discarded value should be returned (false).

    json j = json::parse(my_input, nullptr, false);\nif (j.is_discarded())\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Note there is no diagnostic information available in this scenario.

    "},{"location":"features/parsing/parse_exceptions/#use-accept-function","title":"Use accept() function","text":"

    Alternatively, function accept() can be used which does not return a json value, but a bool indicating whether the input is valid JSON.

    if (!json::accept(my_input))\n{\n    std::cerr << \"parse error\" << std::endl;\n}\n

    Again, there is no diagnostic information available.

    "},{"location":"features/parsing/parse_exceptions/#user-defined-sax-interface","title":"User-defined SAX interface","text":"

    Finally, you can implement the SAX interface and decide what should happen in case of a parse error.

    This function has the following interface:

    bool parse_error(std::size_t position,\n                 const std::string& last_token,\n                 const json::exception& ex);\n

    The return value indicates whether the parsing should continue, so the function should usually return false.

    Example
    #include <iostream>\n#include \"json.hpp\"\n\nusing json = nlohmann::json;\n\nclass sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json>\n{\n  public:\n    sax_no_exception(json& j)\n      : nlohmann::detail::json_sax_dom_parser<json>(j, false)\n    {}\n\n    bool parse_error(std::size_t position,\n                     const std::string& last_token,\n                     const json::exception& ex)\n    {\n        std::cerr << \"parse error at input byte \" << position << \"\\n\"\n                  << ex.what() << \"\\n\"\n                  << \"last read: \\\"\" << last_token << \"\\\"\"\n                  << std::endl;\n        return false;\n    }\n};\n\nint main()\n{\n    std::string myinput = \"[1,2,3,]\";\n\n    json result;\n    sax_no_exception sax(result);\n\n    bool parse_result = json::sax_parse(myinput, &sax);\n    if (!parse_result)\n    {\n        std::cerr << \"parsing unsuccessful!\" << std::endl;\n    }\n\n    std::cout << \"parsed value: \" << result << std::endl;\n}\n

    Output:

    parse error at input byte 8\n[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nlast read: \"3,]\"\nparsing unsuccessful!\nparsed value: [1,2,3]\n
    "},{"location":"features/parsing/parser_callbacks/","title":"Parser Callbacks","text":""},{"location":"features/parsing/parser_callbacks/#overview","title":"Overview","text":"

    With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

    The type of the callback function is:

    template<typename BasicJsonType>\nusing parser_callback_t =\n    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;\n
    "},{"location":"features/parsing/parser_callbacks/#callback-event-types","title":"Callback event types","text":"

    We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

    parameter event description parameter depth parameter parsed parse_event_t::object_start the parser read { and started to process a JSON object depth of the parent of the JSON object a JSON value with type discarded parse_event_t::key the parser read a key of a value in an object depth of the currently parsed JSON object a JSON string containing the key parse_event_t::object_end the parser read } and finished processing a JSON object depth of the parent of the JSON object the parsed JSON object parse_event_t::array_start the parser read [ and started to process a JSON array depth of the parent of the JSON array a JSON value with type discarded parse_event_t::array_end the parser read ] and finished processing a JSON array depth of the parent of the JSON array the parsed JSON array parse_event_t::value the parser finished reading a JSON value depth of the value the parsed JSON value Example

    When parsing the following JSON text,

    {\n    \"name\": \"Berlin\",\n    \"location\": [\n        52.519444,\n        13.406667\n    ]\n}\n

    these calls are made to the callback function:

    event depth parsed object_start 0 discarded key 1 \"name\" value 1 \"Berlin\" key 1 \"location\" array_start 1 discarded value 2 52.519444 value 2 13.406667 array_end 1 [52.519444,13.406667] object_end 0 {\"location\":[52.519444,13.406667],\"name\":\"Berlin\"}"},{"location":"features/parsing/parser_callbacks/#return-value","title":"Return value","text":"

    Discarding a value (i.e., returning false) has different effects depending on the context in which the function was called:

    • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
    • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.
    Example

    The example below demonstrates the parse() function with and without callback function.

    #include <iostream>\n#include <iomanip>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    // a JSON text\n    auto text = R\"(\n    {\n        \"Image\": {\n            \"Width\":  800,\n            \"Height\": 600,\n            \"Title\":  \"View from 15th Floor\",\n            \"Thumbnail\": {\n                \"Url\":    \"http://www.example.com/image/481989943\",\n                \"Height\": 125,\n                \"Width\":  100\n            },\n            \"Animated\" : false,\n            \"IDs\": [116, 943, 234, 38793]\n        }\n    }\n    )\";\n\n    // parse and serialize JSON\n    json j_complete = json::parse(text);\n    std::cout << std::setw(4) << j_complete << \"\\n\\n\";\n\n    // define parser callback\n    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)\n    {\n        // skip object elements with key \"Thumbnail\"\n        if (event == json::parse_event_t::key and parsed == json(\"Thumbnail\"))\n        {\n            return false;\n        }\n        else\n        {\n            return true;\n        }\n    };\n\n    // parse (with callback) and serialize JSON\n    json j_filtered = json::parse(text, cb);\n    std::cout << std::setw(4) << j_filtered << '\\n';\n}\n

    Output:

    {\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Thumbnail\": {\n            \"Height\": 125,\n            \"Url\": \"http://www.example.com/image/481989943\",\n            \"Width\": 100\n        },\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n\n{\n    \"Image\": {\n        \"Animated\": false,\n        \"Height\": 600,\n        \"IDs\": [\n            116,\n            943,\n            234,\n            38793\n        ],\n        \"Title\": \"View from 15th Floor\",\n        \"Width\": 800\n    }\n}\n
    "},{"location":"features/parsing/sax_interface/","title":"SAX Interface","text":"

    The library uses a SAX-like interface with the following functions:

    classDiagram\n\nclass sax_t [\"json::sax_t\"] {\n    <<interface>>\n    +bool null()*\n\n    +bool boolean(bool val)*\n\n    +bool number_integer(number_integer_t val)*\n    +bool number_unsigned(number_unsigned_t val)*\n\n    +bool number_float(number_float_t val, const string_t& s)*\n\n    +bool string(string_t& val)*\n    +bool binary(binary_t& val)*\n\n    +bool start_object(std::size_t elements)*\n    +bool end_object()*\n    +bool start_array(std::size_t elements)*\n    +bool end_array()*\n    +bool key(string_t& val)*\n\n    +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)*\n}
    // called when null is parsed\nbool null();\n\n// called when a boolean is parsed; value is passed\nbool boolean(bool val);\n\n// called when a signed or unsigned integer number is parsed; value is passed\nbool number_integer(number_integer_t val);\nbool number_unsigned(number_unsigned_t val);\n\n// called when a floating-point number is parsed; value and original string is passed\nbool number_float(number_float_t val, const string_t& s);\n\n// called when a string is parsed; value is passed and can be safely moved away\nbool string(string_t& val);\n// called when a binary value is parsed; value is passed and can be safely moved away\nbool binary(binary& val);\n\n// called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known)\nbool start_object(std::size_t elements);\nbool end_object();\nbool start_array(std::size_t elements);\nbool end_array();\n// called when an object key is parsed; value is passed and can be safely moved away\nbool key(string_t& val);\n\n// called when a parse error occurs; byte position, the last token, and an exception is passed\nbool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex);\n

    The return value of each function determines whether parsing should proceed.

    To implement your own SAX handler, proceed as follows:

    1. Implement the SAX interface in a class. You can use class nlohmann::json_sax<json> as base class, but you can also use any class where the functions described above are implemented and public.
    2. Create an object of your SAX interface class, e.g. my_sax.
    3. Call bool json::sax_parse(input, &my_sax); where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.

    Note the sax_parse function only returns a bool indicating the result of the last executed SAX event. It does not return json value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your parse_error implementation. Internally, the SAX interface is used for the DOM parser (class json_sax_dom_parser) as well as the acceptor (json_sax_acceptor), see file json_sax.hpp.

    "},{"location":"features/parsing/sax_interface/#see-also","title":"See also","text":"
    • json_sax - documentation of the SAX interface
    • sax_parse - SAX parser
    "},{"location":"features/types/","title":"Types","text":"

    This page gives an overview how JSON values are stored and how this can be configured.

    "},{"location":"features/types/#overview","title":"Overview","text":"

    By default, JSON values are stored as follows:

    JSON type C++ type object std::map<std::string, basic_json> array std::vector<basic_json> null std::nullptr_t string std::string boolean bool number std::int64_t, std::uint64_t, and double

    Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen.

    "},{"location":"features/types/#storage","title":"Storage","text":"
    classDiagram\n\nclass value_t {\n    <<enumeration>>\n    null\n    object\n    array\n    string\n    boolean\n    number_integer\n    number_unsigned\n    number_float\n    binary\n    discarded\n}\n\nclass json_value {\n    <<union>>\n    object_t* object\n    array_t* array\n    string_t* string\n    binary_t* binary\n    boolean_t boolean\n    number_integer_t number_integer\n    number_unsigned_t number_unsigned\n    number_float_t number_float\n}\n\nclass basic_json {\n    -value_t m_type\n    -json_value m_value\n    +typedef object_t\n    +typedef array_t\n    +typedef binary_t\n    +typedef boolean_t\n    +typedef number_integer_t\n    +typedef number_unsigned_t\n    +typedef number_float_t\n}\n\nbasic_json .. json_value\nbasic_json .. value_t
    "},{"location":"features/types/#template-arguments","title":"Template arguments","text":"

    The data types to store a JSON value are derived from the template arguments passed to class basic_json:

    template<\n    template<typename U, typename V, typename... Args> class ObjectType = std::map,\n    template<typename U, typename... Args> class ArrayType = std::vector,\n    class StringType = std::string,\n    class BooleanType = bool,\n    class NumberIntegerType = std::int64_t,\n    class NumberUnsignedType = std::uint64_t,\n    class NumberFloatType = double,\n    template<typename U> class AllocatorType = std::allocator,\n    template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,\n    class BinaryType = std::vector<std::uint8_t>\n>\nclass basic_json;\n

    Type json is an alias for basic_json<> and uses the default types.

    From the template arguments, the following types are derived:

    using object_comparator_t = std::less<>;\nusing object_t = ObjectType<StringType, basic_json, object_comparator_t,\n                   AllocatorType<std::pair<const StringType, basic_json>>>;\n\nusing array_t = ArrayType<basic_json, AllocatorType<basic_json>>;\n\nusing string_t = StringType;\n\nusing boolean_t = BooleanType;\n\nusing number_integer_t = NumberIntegerType;\nusing number_unsigned_t = NumberUnsignedType;\nusing number_float_t = NumberFloatType;\n\nusing binary_t = nlohmann::byte_container_with_subtype<BinaryType>;\n
    "},{"location":"features/types/#objects","title":"Objects","text":"

    RFC 8259 describes JSON objects as follows:

    An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

    "},{"location":"features/types/#default-type","title":"Default type","text":"

    With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

    std::map<\n  std::string, // key_type\n  basic_json, // value_type\n  std::less<>, // key_compare\n  std::allocator<std::pair<const std::string, basic_json>> // allocator_type\n>\n
    "},{"location":"features/types/#behavior","title":"Behavior","text":"

    The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

    • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
    • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, {\"key\": 2, \"key\": 1} could be equal to either {\"key\": 1} or {\"key\": 2}.
    • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, both {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be stored and serialized as {\"a\": 2, \"b\": 1}.
    • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, {\"b\": 1, \"a\": 2} and {\"a\": 2, \"b\": 1} will be treated as equal.
    "},{"location":"features/types/#key-order","title":"Key order","text":"

    The order name/value pairs are added to the object is not preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified \"unordered\" nature of JSON objects.

    "},{"location":"features/types/#limits","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

    "},{"location":"features/types/#storage_1","title":"Storage","text":"

    Objects are stored as pointers in a basic_json type. That is, for any access to object values, a pointer of type object_t* must be dereferenced.

    "},{"location":"features/types/#arrays","title":"Arrays","text":"

    RFC 8259 describes JSON arrays as follows:

    An array is an ordered sequence of zero or more values.

    "},{"location":"features/types/#default-type_1","title":"Default type","text":"

    With the default values for ArrayType (std::vector) and AllocatorType (std::allocator), the default value for array_t is:

    std::vector<\n  basic_json, // value_type\n  std::allocator<basic_json> // allocator_type\n>\n
    "},{"location":"features/types/#limits_1","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the maximum depth of nesting.

    In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON array.

    "},{"location":"features/types/#storage_2","title":"Storage","text":"

    Arrays are stored as pointers in a basic_json type. That is, for any access to array values, a pointer of type array_t* must be dereferenced.

    "},{"location":"features/types/#strings","title":"Strings","text":"

    RFC 8259 describes JSON strings as follows:

    A string is a sequence of zero or more Unicode characters.

    Unicode values are split by the JSON class into byte-sized characters during deserialization.

    "},{"location":"features/types/#default-type_2","title":"Default type","text":"

    With the default values for StringType (std::string), the default value for string_t is std::string.

    "},{"location":"features/types/#encoding","title":"Encoding","text":"

    Strings are stored in UTF-8 encoding. Therefore, functions like std::string::size() or std::string::length() return the number of bytes in the string rather than the number of characters or glyphs.

    "},{"location":"features/types/#string-comparison","title":"String comparison","text":"

    RFC 8259 states:

    Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that \"a\\\\b\" and \"a\\u005Cb\" are not equal.

    This implementation is interoperable as it does compare strings code unit by code unit.

    "},{"location":"features/types/#storage_3","title":"Storage","text":"

    String values are stored as pointers in a basic_json type. That is, for any access to string values, a pointer of type string_t* must be dereferenced.

    "},{"location":"features/types/#booleans","title":"Booleans","text":"

    RFC 8259 implicitly describes a boolean as a type which differentiates the two literals true and false.

    "},{"location":"features/types/#default-type_3","title":"Default type","text":"

    With the default values for BooleanType (bool), the default value for boolean_t is bool.

    "},{"location":"features/types/#storage_4","title":"Storage","text":"

    Boolean values are stored directly inside a basic_json type.

    "},{"location":"features/types/#numbers","title":"Numbers","text":"

    See the number handling article for a detailed discussion on how numbers are handled by this library.

    RFC 8259 describes numbers as follows:

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, number_integer_t, number_unsigned_t, and number_float_t are used.

    "},{"location":"features/types/#default-types","title":"Default types","text":"

    With the default values for NumberIntegerType (std::int64_t), the default value for number_integer_t is std::int64_t. With the default values for NumberUnsignedType (std::uint64_t), the default value for number_unsigned_t is std::uint64_t. With the default values for NumberFloatType (double), the default value for number_float_t is double.

    "},{"location":"features/types/#default-behavior","title":"Default behavior","text":"
    • The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal 010 will be serialized to 8. During deserialization, leading zeros yield an error.
    • Not-a-number (NaN) values will be serialized to null.
    "},{"location":"features/types/#limits_2","title":"Limits","text":"

    RFC 8259 specifies:

    An implementation may set limits on the range and precision of numbers.

    When the default type is used, the maximal integer number that can be stored is 9223372036854775807 (INT64_MAX) and the minimal integer number that can be stored is -9223372036854775808 (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_unsigned_t or number_float_t.

    When the default type is used, the maximal unsigned integer number that can be stored is 18446744073709551615 (UINT64_MAX) and the minimal integer number that can be stored is 0. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as number_integer_t or number_float_t.

    RFC 8259 further states:

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable.

    RFC 8259 states:

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision.

    This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than -1.79769313486232e+308 and values greater than 1.79769313486232e+308 will be stored as NaN internally and be serialized to null.

    "},{"location":"features/types/#storage_5","title":"Storage","text":"

    Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a basic_json type.

    "},{"location":"features/types/number_handling/","title":"Number Handling","text":"

    This document describes how the library is handling numbers.

    "},{"location":"features/types/number_handling/#background","title":"Background","text":"

    This section briefly summarizes how the JSON specification describes how numbers should be handled.

    "},{"location":"features/types/number_handling/#json-number-syntax","title":"JSON number syntax","text":"

    JSON defines the syntax of numbers as follows:

    RFC 8259, Section 6

    The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.

    A fraction part is a decimal point followed by one or more digits.

    An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits.

    The following railroad diagram from json.org visualizes the number syntax:

    "},{"location":"features/types/number_handling/#number-interoperability","title":"Number interoperability","text":"

    On number interoperability, the following remarks are made:

    RFC 8259, Section 6

    This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available.

    Note that when such software is used, numbers that are integers and are in the range [-2^{53}+1, 2^{53}-1] are interoperable in the sense that implementations will agree exactly on their numeric values.

    "},{"location":"features/types/number_handling/#library-implementation","title":"Library implementation","text":"

    This section describes how the above number specification is implemented by this library.

    "},{"location":"features/types/number_handling/#number-storage","title":"Number storage","text":"

    In the default json type, numbers are stored as std::uint64_t, std::int64_t, and double, respectively. Thereby, std::uint64_t and std::int64_t are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as double.

    Notes

    • Numbers with a decimal digit or scientific notation are always stored as double.
    • The number types can be changed, see Template number types.
    • As of version 3.9.1, the conversion is realized by std::strtoull, std::strtoll, and std::strtod, respectively.

    Examples

    • Integer -12345678912345789123456789 is smaller than INT64_MIN and will be stored as floating-point number -1.2345678912345788e+25.
    • Integer 1E3 will be stored as floating-point number 1000.0.
    "},{"location":"features/types/number_handling/#number-limits","title":"Number limits","text":"
    • Any 64-bit signed or unsigned integer can be stored without loss of precision.
    • Numbers exceeding the limits of double (i.e., numbers that after conversion via std::strtod are not satisfying std::isfinite such as 1E400) will throw exception json.exception.out_of_range.406 during parsing.
    • Floating-point numbers are rounded to the next number representable as double. For instance 3.141592653589793238462643383279 is stored as 0x400921fb54442d18. This is the same behavior as the code double x = 3.141592653589793238462643383279;.

    Interoperability

    • The library interoperable with respect to the specification, because its supported range [-2^{63}, 2^{64}-1] is larger than the described range [-2^{53}+1, 2^{53}-1].
    • All integers outside the range [-2^{63}, 2^{64}-1], as well as floating-point numbers are stored as double. This also concurs with the specification above.
    "},{"location":"features/types/number_handling/#zeros","title":"Zeros","text":"

    The JSON number grammar allows for different ways to express zero, and this library will store zeros differently:

    Literal Stored value and type Serialization 0 std::uint64_t(0) 0 -0 std::int64_t(0) 0 0.0 double(0.0) 0.0 -0.0 double(-0.0) -0.0 0E0 double(0.0) 0.0 -0E0 double(-0.0) -0.0

    That is, -0 is stored as a signed integer, but the serialization does not reproduce the -.

    "},{"location":"features/types/number_handling/#number-serialization","title":"Number serialization","text":"
    • Integer numbers are serialized as is; that is, no scientific notation is used.
    • Floating-point numbers are serialized as specified by the %g printf modifier with std::numeric_limits<double>::max_digits10 significant digits. The rationale is to use the shortest representation while still allow round-tripping.

    Notes regarding precision of floating-point numbers

    As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples:

    • The serialization can have fewer decimal places than the input: 2555.5599999999999 will be serialized as 2555.56. The reverse can also be true.
    • The serialization can be in scientific notation even if the input is not: 0.0000972439793401814 will be serialized as 9.72439793401814e-05. The reverse can also be true: 12345E-5 will be serialized as 0.12345.
    • Conversions from float to double can also introduce rounding errors:
      float f = 0.3;\njson j = f;\nstd::cout << j << '\\n';\n
      yields 0.30000001192092896.

    All examples here can be reproduced by passing the original double value to

    std::printf(\"%.*g\\n\", std::numeric_limits<double>::max_digits10, double_value);\n
    "},{"location":"features/types/number_handling/#nan-handling","title":"NaN handling","text":"

    NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded:

    RFC 8259, Section 6

    Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted.

    That is, there is no way to parse a NaN value. However, NaN values can be stored in a JSON value by assignment.

    This library serializes NaN values as null. This corresponds to the behavior of JavaScript's JSON.stringify function.

    Example

    The following example shows how a NaN value is stored in a json value.

    int main()\n{\n    double val = std::numeric_limits<double>::quiet_NaN();\n    std::cout << \"val=\" << val << std::endl;\n    json j = val;\n    std::cout << \"j=\" << j.dump() << std::endl;\n    val = j;\n    std::cout << \"val=\" << val << std::endl;\n}\n

    output:

    val=nan\nj=null\nval=nan\n
    "},{"location":"features/types/number_handling/#number-comparison","title":"Number comparison","text":"

    Floating-point inside JSON values numbers are compared with json::number_float_t::operator== which is double::operator== by default.

    Alternative comparison functions

    To compare floating-point while respecting an epsilon, an alternative comparison function could be used, for instance

    template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>\ninline bool is_same(T a, T b, T epsilon = std::numeric_limits<T>::epsilon()) noexcept\n{\n    return std::abs(a - b) <= epsilon;\n}\n
    Or you can self-define an operator equal function like this:

    bool my_equal(const_reference lhs, const_reference rhs)\n{\n    const auto lhs_type lhs.type();\n    const auto rhs_type rhs.type();\n    if (lhs_type == rhs_type)\n    {\n        switch(lhs_type)\n        {\n            // self_defined case\n            case value_t::number_float:\n                return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();\n\n            // other cases remain the same with the original\n            ...\n        }\n    }\n    ...\n}\n

    (see #703 for more information.)

    Note

    NaN values never compare equal to themselves or to other NaN values. See #514.

    "},{"location":"features/types/number_handling/#number-conversion","title":"Number conversion","text":"

    Just like the C++ language itself, the get family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising.

    Unconditional number conversions

    double d = 42.3;                                   // non-integer double value 42.3\njson jd = d;                                       // stores double value 42.3\nstd::int64_t i = jd.template get<std::int64_t>();  // now i==42; no warning or error is produced\n

    Note the last line with throw a json.exception.type_error.302 exception if jd is not a numerical type, for instance a string.

    The rationale is twofold:

    1. JSON does not define a number type or precision (see above).
    2. C++ also allows to silently convert between number types.

    Conditional number conversion

    The code above can be solved by explicitly checking the nature of the value with members such as is_number_integer() or is_number_unsigned():

    // check if jd is really integer-valued\nif (jd.is_number_integer())\n{\n    // if so, do the conversion and use i\n    std::int64_t i = jd.template get<std::int64_t>();\n    // ...\n}\nelse\n{\n    // otherwise, take appropriate action\n    // ...\n}\n

    Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings.

    (Example taken from #777.)

    "},{"location":"features/types/number_handling/#determine-number-types","title":"Determine number types","text":"

    As the example in Number conversion shows, there are different functions to determine the type of the stored number:

    • is_number() returns true for any number type
    • is_number_integer() returns true for signed and unsigned integers
    • is_number_unsigned() returns true for unsigned integers only
    • is_number_float() returns true for floating-point numbers
    • type_name() returns \"number\" for any number type
    • type() returns a different enumerator of value_t for all number types
    function unsigned integer signed integer floating-point string is_number() true true true false is_number_integer() true true false false is_number_unsigned() true false false false is_number_float() false false true false type_name() \"number\" \"number\" \"number\" \"string\" type() number_unsigned number_integer number_float string"},{"location":"features/types/number_handling/#template-number-types","title":"Template number types","text":"

    The number types can be changed with template parameters.

    position number type default type possible values 5 signed integers std::int64_t std::int32_t, std::int16_t, etc. 6 unsigned integers std::uint64_t std::uint32_t, std::uint16_t, etc. 7 floating-point double float, long double

    Constraints on number types

    • The type for signed integers must be convertible from long long. The type for floating-point numbers is used in case of overflow.
    • The type for unsigned integers must be convertible from unsigned long long. The type for floating-point numbers is used in case of overflow.
    • The types for signed and unsigned integers must be distinct, see #2573.
    • Only double, float, and long double are supported for floating-point numbers.

    Example

    A basic_json type that uses long double as floating-point type.

    using json_ld = nlohmann::basic_json<std::map, std::vector, std::string, bool,\n                                     std::int64_t, std::uint64_t, long double>;\n

    Note values should then be parsed with json_ld::parse rather than json::parse as the latter would parse floating-point values to double before then converting them to long double.

    "},{"location":"home/architecture/","title":"Architecture","text":"

    Info

    This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes.

    "},{"location":"home/architecture/#overview","title":"Overview","text":"

    The main structure is class nlohmann::basic_json.

    • public API
    • container interface
    • iterators
    "},{"location":"home/architecture/#template-specializations","title":"Template specializations","text":"
    • describe template parameters of basic_json
    • json
    • ordered_json via ordered_map
    "},{"location":"home/architecture/#value-storage","title":"Value storage","text":"

    Values are stored as a tagged union of value_t and json_value.

    /// the type of the current element\nvalue_t m_type = value_t::null;\n\n/// the value of the current element\njson_value m_value = {};\n

    with

    enum class value_t : std::uint8_t\n{\n    null,             ///< null value\n    object,           ///< object (unordered set of name/value pairs)\n    array,            ///< array (ordered collection of values)\n    string,           ///< string value\n    boolean,          ///< boolean value\n    number_integer,   ///< number value (signed integer)\n    number_unsigned,  ///< number value (unsigned integer)\n    number_float,     ///< number value (floating-point)\n    binary,           ///< binary array (ordered collection of bytes)\n    discarded         ///< discarded by the parser callback function\n};\n\nunion json_value {\n  /// object (stored with pointer to save storage)\n  object_t *object;\n  /// array (stored with pointer to save storage)\n  array_t *array;\n  /// string (stored with pointer to save storage)\n  string_t *string;\n  /// binary (stored with pointer to save storage)\n  binary_t *binary;\n  /// boolean\n  boolean_t boolean;\n  /// number (integer)\n  number_integer_t number_integer;\n  /// number (unsigned integer)\n  number_unsigned_t number_unsigned;\n  /// number (floating-point)\n  number_float_t number_float;\n};\n
    "},{"location":"home/architecture/#parsing-inputs-deserialization","title":"Parsing inputs (deserialization)","text":"

    Input is read via input adapters that abstract a source with a common interface:

    /// read a single character\nstd::char_traits<char>::int_type get_character() noexcept;\n\n/// read multiple characters to a destination buffer and\n/// returns the number of characters successfully read\ntemplate<class T>\nstd::size_t get_elements(T* dest, std::size_t count = 1);\n

    List examples of input adapters.

    "},{"location":"home/architecture/#sax-interface","title":"SAX Interface","text":"

    TODO

    "},{"location":"home/architecture/#writing-outputs-serialization","title":"Writing outputs (serialization)","text":"

    Output is written via output adapters:

    template<typename T>\nvoid write_character(CharType c);\n\ntemplate<typename CharType>\nvoid write_characters(const CharType* s, std::size_t length);\n

    List examples of output adapters.

    "},{"location":"home/architecture/#value-conversion","title":"Value conversion","text":"
    template<class T>\nvoid to_json(basic_json& j, const T& t);\n\ntemplate<class T>\nvoid from_json(const basic_json& j, T& t);\n
    "},{"location":"home/architecture/#additional-features","title":"Additional features","text":"
    • JSON Pointers
    • Binary formats
    • Custom base class
    • Conversion macros
    "},{"location":"home/architecture/#details-namespace","title":"Details namespace","text":"
    • C++ feature backports
    "},{"location":"home/customers/","title":"Customers","text":"

    The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know.

    "},{"location":"home/customers/#space-exploration","title":"Space Exploration","text":"
    • Peregrine Lunar Lander Flight 01 - The library was utilized for payload management in the Peregrine Moon Lander, developed by Astrobotic Technology and launched as part of NASA's Commercial Lunar Payload Services (CLPS) program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on January 18, 2024.
    "},{"location":"home/customers/#automotive","title":"Automotive","text":"
    • Alexa Auto SDK, a software development kit enabling the integration of Alexa into automotive systems
    • Apollo, a framework for building autonomous driving systems
    • Automotive Grade Linux (AGL): a collaborative open-source platform for automotive software development
    • Genesis Motor (infotainment), a luxury automotive brand
    • Hyundai (infotainment), a global automotive brand
    • Kia (infotainment), a global automotive brand
    • Mercedes-Benz Operating System (MB.OS), a core component of the vehicle software ecosystem from Mercedes-Benz
    • Rivian (infotainment), an electric vehicle manufacturer
    • Suzuki (infotainment), a global automotive and motorcycle manufacturer
    "},{"location":"home/customers/#gaming-and-entertainment","title":"Gaming and Entertainment","text":"
    • Assassin's Creed: Mirage: a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics
    • Chasm: The Rift: a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters
    • College Football 25: a college football simulation game featuring gameplay that mimics real-life college teams and competitions
    • Concepts: a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming
    • Depthkit: a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content
    • immersivetech: a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications
    • LOOT, a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series
    • Madden NFL 25: a sports simulation game capturing the excitement of American football with realistic gameplay and team management features
    • Marne, an unofficial private server platform for hosting custom Battlefield 1 game experiences
    • Minecraft, a popular sandbox video game
    • NHL 22: a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience
    • Pixelpart: a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use
    • Red Dead Redemption II: an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay
    • Tactics Ogre: Reborn, a tactical role-playing game featuring strategic battles and deep storytelling elements
    • Throne and Liberty, an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling
    • Unity Vivox, a communication service that enables voice and text chat functionality in multiplayer games developed with Unity
    • Zool: Redimensioned: a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments
    "},{"location":"home/customers/#consumer-electronics","title":"Consumer Electronics","text":"
    • Audinate: a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks
    • Cisco Webex Desk Camera, a video camera designed for professional-quality video conferencing and remote collaboration
    • Philips Hue Personal Wireless Lighting: a smart lighting system for customizable and wireless home illumination
    • Ray-Ban Meta Smart glasses, a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features
    • Siemens SINEMA Remote Connect, a remote connectivity solution for monitoring and managing industrial networks and devices securely
    • Sony PlayStation 4, a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features
    • Sony Virtual Webcam Driver for Remote Camera, a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming
    "},{"location":"home/customers/#operating-systems","title":"Operating Systems","text":"
    • Apple iOS and macOS, a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers
    • Google Fuchsia, an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices
    • SerenityOS, an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance
    • Yocto: a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications
    "},{"location":"home/customers/#development-tools-and-ides","title":"Development Tools and IDEs","text":"
    • Accentize SpectralBalance, an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings
    • Arm Compiler for Linux, a software development toolchain for compiling and optimizing applications on Arm-based Linux systems
    • BBEdit, a professional text and code editor for macOS
    • CoderPad, a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple #include \"json.hpp\"
    • Compiler Explorer, a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive #include <nlohmann/json.hpp>.
    • GitHub CodeQL, a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries
    • Hex-Rays: a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis
    • ImHex, a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation
    • Intel GPA Framework, a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs
    • Meta Yoga, a layout engine that facilitates flexible and efficient user interface design across multiple platforms
    • MKVToolNix, a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files
    • NVIDIA Nsight Compute, a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics
    • Notepad++, a free source code editor that supports various programming languages
    • OpenRGB, an open source RGB lighting control that doesn't depend on manufacturer software
    • OpenTelemetry C++: a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application
    • Qt Creator, an IDE for developing applications using the Qt application framework
    • Scanbot SDK: a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications
    "},{"location":"home/customers/#machine-learning-and-ai","title":"Machine Learning and AI","text":"
    • Apple Core ML Tools, a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework
    • Avular Mobile Robotics: a platform for developing and deploying mobile robotics solutions
    • Google gemma.cpp, a lightweight C++ inference engine designed for running AI models from the Gemma family
    • llama.cpp, a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications
    • MLX, an array framework for machine learning on Apple silicon
    • Mozilla llamafile, a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format
    • NVIDIA ACE, a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions
    • Peer: a platform offering personalized AI assistants for interactive learning and creative collaboration
    • stable-diffusion.cpp: a C++ implementation of the Stable Diffusion image generation model
    • TanvasTouch: a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment
    • TensorFlow, a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components
    "},{"location":"home/customers/#scientific-research-and-analysis","title":"Scientific Research and Analysis","text":"
    • BLACK, a bounded linear temporal logic (LTL) satisfiability checker
    • CERN Atlas Athena, a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring
    • KAMERA: a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research
    • KiCad: a free and open-source software suite for electronic design automation
    • MeVisLab: a software framework for medical image processing and visualization.
    • OpenPMD API: a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms
    • ParaView: an open-source tool for large-scale data visualization and analysis across various scientific domains
    • QGIS: a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats
    • VTK: a software library for 3D computer graphics, image processing, and visualization
    • VolView: a lightweight application for interactive visualization and analysis of 3D medical imaging data.
    "},{"location":"home/customers/#business-and-productivity-software","title":"Business and Productivity Software","text":"
    • ArcGIS PRO, a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis
    • Autodesk Desktop, a software platform developed by Autodesk for creating and managing desktop applications and services
    • Check Point: a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
    • Microsoft Office for Mac, a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
    • Nexthink Infinity: a digital employee experience management platform for monitoring and improving IT performance
    • Sophos Connect Client: a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
    • Stonebranch: a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations
    • Tablecruncher: a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making
    • magicplan, a mobile application for creating floor plans and interior designs using augmented reality
    "},{"location":"home/customers/#databases-and-big-data","title":"Databases and Big Data","text":"
    • ADIOS2: a data management framework designed for high-performance input and output operations
    • Cribl Stream: a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems
    • DB Browser for SQLite, a visual open-source tool for creating, designing, and editing SQLite database files
    • MySQL Connector/C++, a C++ library for connecting and interacting with MySQL databases
    • MySQL NDB Cluster, a distributed database system that provides high availability and scalability for MySQL databases
    • PrestoDB, a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook
    • ROOT Data Analysis Framework, an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization
    "},{"location":"home/customers/#simulation-and-modeling","title":"Simulation and Modeling","text":"
    • Arcturus HoloSuite, a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation
    • azul, a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data
    • Blender, a free and open-source 3D creation suite for modeling, animation, rendering, and more
    • cpplot, a library for creating interactive graphs and charts in C++, which can be viewed in web browsers
    • NVIDIA Omniverse, a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries
    • Pixar Renderman, a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations
    • ROS - Robot Operating System, a set of software libraries and tools that assist in developing robot applications
    • UBS, a multinational financial services and banking company
    • GAMS: a high-performance mathematical modeling system for optimization and decision support
    • M-Star: a computational fluid dynamics software for simulating and analyzing fluid flow
    • MapleSim CAD Toolbox: a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation
    • Kitware SMTK: a software toolkit for managing simulation models and workflows in scientific and engineering applications
    "},{"location":"home/customers/#enterprise-and-cloud-applications","title":"Enterprise and Cloud Applications","text":"
    • Acronis Cyber Protect Cloud: an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware
    • Baereos: a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems
    • Bitdefender Home Scanner, a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers
    • Citrix Provisioning: a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments
    • Citrix Virtual Apps and Desktops, a solution from Citrix that delivers virtual apps and desktops
    • Cyberarc: a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture
    • Elster: a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use
    • Egnyte Desktop: a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection
    • Ethereum Solidity, a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform
    • Inciga: a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts
    • Intel Accelerator Management Daemon for VMware ESXi: a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation
    • Juniper Identity Management Service
    • Microsoft Azure IoT SDK, a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform
    • Microsoft WinGet, a command-line utility included in the Windows Package Manager
    • Pointr: a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications
    • secunet protect4use: a secure, passwordless multi-factor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities
    "},{"location":"home/design_goals/","title":"Design goals","text":"

    There are myriads of JSON libraries out there, and each may even have its reason to exist. Our class had these design goals:

    • Intuitive syntax. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code.

    • Trivial integration. Our whole code consists of a single header file json.hpp. That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings.

    • Serious testing. Our class is heavily unit-tested and covers 100% of the code, including all exceptional behavior. Furthermore, we checked with Valgrind and the Clang Sanitizers that there are no memory leaks. Google OSS-Fuzz additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the Core Infrastructure Initiative (CII) best practices.

    Other aspects were not so important to us:

    • Memory efficiency. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: std::string for strings, int64_t, uint64_t or double for numbers, std::map for objects, std::vector for arrays, and bool for Booleans. However, you can template the generalized class basic_json to your needs.

    • Speed. There are certainly faster JSON libraries out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a std::vector or std::map, you are already set.

    See the contribution guidelines for more information.

    "},{"location":"home/exceptions/","title":"Exceptions","text":""},{"location":"home/exceptions/#overview","title":"Overview","text":""},{"location":"home/exceptions/#base-type","title":"Base type","text":"

    All exceptions inherit from class json::exception (which in turn inherits from std::exception). It is used as the base class for all exceptions thrown by the basic_json class. This class can hence be used as \"wildcard\" to catch exceptions.

    classDiagram\n  direction LR\n    class `std::exception` {\n        <<interface>>\n    }\n\n    class `json::exception` {\n        +const int id\n        +const char* what() const\n    }\n\n    class `json::parse_error` {\n        +const std::size_t byte\n    }\n\n    class `json::invalid_iterator`\n    class `json::type_error`\n    class `json::out_of_range`\n    class `json::other_error`\n\n    `std::exception` <|-- `json::exception`\n    `json::exception` <|-- `json::parse_error`\n    `json::exception` <|-- `json::invalid_iterator`\n    `json::exception` <|-- `json::type_error`\n    `json::exception` <|-- `json::out_of_range`\n    `json::exception` <|-- `json::other_error`
    "},{"location":"home/exceptions/#switch-off-exceptions","title":"Switch off exceptions","text":"

    Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag -fno-exceptions or by defining the symbol JSON_NOEXCEPTION. In this case, exceptions are replaced by abort() calls. You can further control this behavior by defining JSON_THROW_USER (overriding throw), JSON_TRY_USER (overriding try), and JSON_CATCH_USER (overriding catch).

    Note that JSON_THROW_USER should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior.

    Example

    The code below switches off exceptions and creates a log entry with a detailed error message in case of errors.

    #include <iostream>\n\n#define JSON_TRY_USER if(true)\n#define JSON_CATCH_USER(exception) if(false)\n#define JSON_THROW_USER(exception)                           \\\n    {std::clog << \"Error in \" << __FILE__ << \":\" << __LINE__ \\\n               << \" (function \" << __FUNCTION__ << \") - \"    \\\n               << (exception).what() << std::endl;           \\\n     std::abort();}\n\n#include <nlohmann/json.hpp>\n

    Note the explanatory what() string of exceptions is not available for MSVC if exceptions are disabled, see #2824.

    See documentation of JSON_TRY_USER, JSON_CATCH_USER and JSON_THROW_USER for more information.

    "},{"location":"home/exceptions/#extended-diagnostic-messages","title":"Extended diagnostic messages","text":"

    Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult.

    Example
    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] type must be number, but is string\n

    This exception can be hard to debug if storing the value \"12\" and accessing it is further apart.

    To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that lead to the exception) can be created. That global context is provided as JSON Pointer.

    As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol JSON_DIAGNOSTICS to 1 before including json.hpp.

    Example
    #include <iostream>\n\n# define JSON_DIAGNOSTICS 1\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    json j;\n    j[\"address\"][\"street\"] = \"Fake Street\";\n    j[\"address\"][\"housenumber\"] = \"12\";\n\n    try\n    {\n        int housenumber = j[\"address\"][\"housenumber\"];\n    }\n    catch (const json::exception& e)\n    {\n        std::cout << e.what() << '\\n';\n    }\n}\n

    Output:

    [json.exception.type_error.302] (/address/housenumber) type must be number, but is string\n

    Now the exception message contains a JSON Pointer /address/housenumber that indicates which value has the wrong type.

    See documentation of JSON_DIAGNOSTICS for more information.

    "},{"location":"home/exceptions/#parse-errors","title":"Parse errors","text":"

    This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch.

    Exceptions have ids 1xx.

    Byte index

    Member byte holds the byte index of the last read character in the input file.

    For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack).

    Example

    The following code shows how a parse_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // parsing input with a syntax error\n        json::parse(\"[1,2,3,]\");\n    }\n    catch (const json::parse_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << '\\n'\n                  << \"byte position of error: \" << e.byte << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal\nexception id: 101\nbyte position of error: 8\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error101","title":"json.exception.parse_error.101","text":"

    This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member byte indicates the error position.

    Example message

    Input ended prematurely:

    [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal\n

    No input:

    [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON\n

    Control character was not escaped:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\\\; last read: '\"<U+0009>'\"\n

    String was not closed:

    [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'\n

    Invalid number format:

    [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'\n

    \\u was not be followed by four hex digits:

    [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'\n

    Invalid UTF-8 surrogate pair:

    [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'\"\n

    Invalid UTF-8 byte:

    [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"vous \\352t'\n

    Tip

    • Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened.
    • Paste the input to a JSON validator like http://jsonlint.com or a tool like jq.
    "},{"location":"home/exceptions/#jsonexceptionparse_error102","title":"json.exception.parse_error.102","text":"

    JSON uses the \\uxxxx format to describe Unicode characters. Code points above 0xFFFF are split into two \\uxxxx entries (\"surrogate pairs\"). This error indicates that the surrogate pair is incomplete or contains an invalid code point.

    Example message

    parse error at 14: missing or wrong low surrogate\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error103","title":"json.exception.parse_error.103","text":"

    Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid.

    Example message

    parse error: code points above 0x10FFFF are invalid\n

    Note

    This exception is not used any more. Instead json.exception.parse_error.101 with a more detailed description is used.

    "},{"location":"home/exceptions/#jsonexceptionparse_error104","title":"json.exception.parse_error.104","text":"

    RFC 6902 requires a JSON Patch document to be a JSON document that represents an array of objects.

    Example message

    [json.exception.parse_error.104] parse error: JSON patch must be an array of objects\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error105","title":"json.exception.parse_error.105","text":"

    An operation of a JSON Patch document must contain exactly one \"op\" member, whose value indicates the operation to perform. Its value must be one of \"add\", \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are errors.

    Example message

    [json.exception.parse_error.105] parse error: operation 'add' must have member 'value'\n
    [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'\n
    [json.exception.parse_error.105] parse error: operation value 'foo' is invalid\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error106","title":"json.exception.parse_error.106","text":"

    An array index in a JSON Pointer (RFC 6901) may be 0 or any number without a leading 0.

    Example message

    [json.exception.parse_error.106] parse error: array index '01' must not begin with '0'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error107","title":"json.exception.parse_error.107","text":"

    A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a / character.

    Example message

    [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error108","title":"json.exception.parse_error.108","text":"

    In a JSON Pointer, only ~0 and ~1 are valid escape sequences.

    Example message

    [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error109","title":"json.exception.parse_error.109","text":"

    A JSON Pointer array index must be a number.

    Example messages

    [json.exception.parse_error.109] parse error: array index 'one' is not a number\n
    [json.exception.parse_error.109] parse error: array index '+1' is not a number\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error110","title":"json.exception.parse_error.110","text":"

    When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read.

    Example message

    [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input\n
    [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error112","title":"json.exception.parse_error.112","text":"

    An unexpected byte was read in a binary format or length information is invalid (BSON).

    Example messages

    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C\n
    [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02\n
    [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648\n
    [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error113","title":"json.exception.parse_error.113","text":"

    While parsing a map key, a value that is not a string has been read.

    Example messages

    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF\n
    [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82\n

    "},{"location":"home/exceptions/#jsonexceptionparse_error114","title":"json.exception.parse_error.114","text":"

    The parsing of the corresponding BSON record type is not implemented (yet).

    Example message

    [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF\n
    "},{"location":"home/exceptions/#jsonexceptionparse_error115","title":"json.exception.parse_error.115","text":"

    A UBJSON high-precision number could not be parsed.

    Example message

    [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A\n
    "},{"location":"home/exceptions/#iterator-errors","title":"Iterator errors","text":"

    This exception is thrown if iterators passed to a library function do not match the expected semantics.

    Exceptions have ids 2xx.

    Example

    The following code shows how an invalid_iterator exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling iterator::key() on non-object iterator\n        json j = \"string\";\n        json::iterator it = j.begin();\n        auto k = it.key();\n    }\n    catch (const json::invalid_iterator& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\nexception id: 207\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator201","title":"json.exception.invalid_iterator.201","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.201] iterators are not compatible\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator202","title":"json.exception.invalid_iterator.202","text":"

    In the erase or insert function, the passed iterator pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion.

    Example messages

    [json.exception.invalid_iterator.202] iterator does not fit current value\n
    [json.exception.invalid_iterator.202] iterators first and last must point to objects\n

    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator203","title":"json.exception.invalid_iterator.203","text":"

    Either iterator passed to function erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from.

    Example message

    [json.exception.invalid_iterator.203] iterators do not fit current value\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator204","title":"json.exception.invalid_iterator.204","text":"

    When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (begin(), end()), because this is the only way the single stored value is expressed. All other ranges are invalid.

    Example message

    [json.exception.invalid_iterator.204] iterators out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator205","title":"json.exception.invalid_iterator.205","text":"

    When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the begin() iterator, because it is the only way to address the stored value. All other iterators are invalid.

    Example message

    [json.exception.invalid_iterator.205] iterator out of range\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator206","title":"json.exception.invalid_iterator.206","text":"

    The iterators passed to constructor basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range.

    Example message

    [json.exception.invalid_iterator.206] cannot construct with iterators from null\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator207","title":"json.exception.invalid_iterator.207","text":"

    The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key.

    Example message

    [json.exception.invalid_iterator.207] cannot use key() for non-object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator208","title":"json.exception.invalid_iterator.208","text":"

    The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.208] cannot use operator[] for object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator209","title":"json.exception.invalid_iterator.209","text":"

    The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.209] cannot use offsets with object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator210","title":"json.exception.invalid_iterator.210","text":"

    The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (first, last) is invalid.

    Example message

    [json.exception.invalid_iterator.210] iterators do not fit\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator211","title":"json.exception.invalid_iterator.211","text":"

    The iterator range passed to the insert function must not be a subrange of the container to insert to.

    Example message

    [json.exception.invalid_iterator.211] passed iterators may not belong to container\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator212","title":"json.exception.invalid_iterator.212","text":"

    When two iterators are compared, they must belong to the same container.

    Example message

    [json.exception.invalid_iterator.212] cannot compare iterators of different containers\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator213","title":"json.exception.invalid_iterator.213","text":"

    The order of object iterators cannot be compared, because JSON objects are unordered.

    Example message

    [json.exception.invalid_iterator.213] cannot compare order of object iterators\n
    "},{"location":"home/exceptions/#jsonexceptioninvalid_iterator214","title":"json.exception.invalid_iterator.214","text":"

    Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to begin().

    Example message

    [json.exception.invalid_iterator.214] cannot get value\n
    "},{"location":"home/exceptions/#type-errors","title":"Type errors","text":"

    This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics.

    Exceptions have ids 3xx.

    Example

    The following code shows how a type_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling push_back() on a string value\n        json j = \"string\";\n        j.push_back(\"another string\");\n    }\n    catch (const json::type_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.type_error.308] cannot use push_back() with string\nexception id: 308\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error301","title":"json.exception.type_error.301","text":"

    To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.

    Example message

    [json.exception.type_error.301] cannot create object from initializer list\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error302","title":"json.exception.type_error.302","text":"

    During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.

    Example messages

    [json.exception.type_error.302] type must be object, but is null\n
    [json.exception.type_error.302] type must be string, but is object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error303","title":"json.exception.type_error.303","text":"

    To retrieve a reference to a value stored in a basic_json object with get_ref, the type of the reference must match the value type. For instance, for a JSON array, the ReferenceType must be array_t &.

    Example messages

    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object\n
    [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number\"\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error304","title":"json.exception.type_error.304","text":"

    The at() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.304] cannot use at() with string\n
    [json.exception.type_error.304] cannot use at() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error305","title":"json.exception.type_error.305","text":"

    The operator[] member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.305] cannot use operator[] with a string argument with array\n
    [json.exception.type_error.305] cannot use operator[] with a numeric argument with object\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error306","title":"json.exception.type_error.306","text":"

    The value() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.306] cannot use value() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error307","title":"json.exception.type_error.307","text":"

    The erase() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.307] cannot use erase() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error308","title":"json.exception.type_error.308","text":"

    The push_back() and operator+= member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.308] cannot use push_back() with string\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error309","title":"json.exception.type_error.309","text":"

    The insert() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.309] cannot use insert() with array\n
    [json.exception.type_error.309] cannot use insert() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error310","title":"json.exception.type_error.310","text":"

    The swap() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.310] cannot use swap() with number\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error311","title":"json.exception.type_error.311","text":"

    The emplace() and emplace_back() member functions can only be executed for certain JSON types.

    Example messages

    [json.exception.type_error.311] cannot use emplace() with number\n
    [json.exception.type_error.311] cannot use emplace_back() with number\n

    "},{"location":"home/exceptions/#jsonexceptiontype_error312","title":"json.exception.type_error.312","text":"

    The update() member functions can only be executed for certain JSON types.

    Example message

    [json.exception.type_error.312] cannot use update() with array\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error313","title":"json.exception.type_error.313","text":"

    The unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined.

    Example message

    [json.exception.type_error.313] invalid value to unflatten\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error314","title":"json.exception.type_error.314","text":"

    The unflatten function only works for an object whose keys are JSON Pointers.

    Example message

    Calling unflatten() on an array [1,2,3]:

    [json.exception.type_error.314] only objects can be unflattened\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error315","title":"json.exception.type_error.315","text":"

    The unflatten() function only works for an object whose keys are JSON Pointers and whose values are primitive.

    Example message

    Calling unflatten() on an object {\"/1\", [1,2,3]}:

    [json.exception.type_error.315] values in object must be primitive\n
    "},{"location":"home/exceptions/#jsonexceptiontype_error316","title":"json.exception.type_error.316","text":"

    The dump() function only works with UTF-8 encoded strings; that is, if you assign a std::string to a JSON value, make sure it is UTF-8 encoded.

    Example message

    Calling dump() on a JSON value containing an ISO 8859-1 encoded string:

    [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F\n

    Tip

    • Store the source file with UTF-8 encoding.
    • Pass an error handler as last parameter to the dump() function to avoid this exception:
      • json::error_handler_t::replace will replace invalid bytes sequences with U+FFFD
      • json::error_handler_t::ignore will silently ignore invalid byte sequences
    "},{"location":"home/exceptions/#jsonexceptiontype_error317","title":"json.exception.type_error.317","text":"

    The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw true or null JSON object cannot be serialized to BSON)

    Example messages

    Serializing null to BSON:

    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null\n
    Serializing [1,2,3] to BSON:
    [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array\n

    Tip

    Encapsulate the JSON value in an object. That is, instead of serializing true, serialize {\"value\": true}

    "},{"location":"home/exceptions/#out-of-range","title":"Out of range","text":"

    This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys.

    Exceptions have ids 4xx.

    Example

    The following code shows how an out_of_range exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    try\n    {\n        // calling at() for an invalid index\n        json j = {1, 2, 3, 4};\n        j.at(4) = 10;\n    }\n    catch (const json::out_of_range& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.out_of_range.401] array index 4 is out of range\nexception id: 401\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range401","title":"json.exception.out_of_range.401","text":"

    The provided array index i is larger than size-1.

    Example message

    array index 3 is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range402","title":"json.exception.out_of_range.402","text":"

    The special array index - in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it.

    Example message

    array index '-' (3) is out of range\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range403","title":"json.exception.out_of_range.403","text":"

    The provided key was not found in the JSON object.

    Example message

    key 'foo' not found\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range404","title":"json.exception.out_of_range.404","text":"

    A reference token in a JSON Pointer could not be resolved.

    Example message

    unresolved reference token 'foo'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range405","title":"json.exception.out_of_range.405","text":"

    The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value.

    Example message

    JSON pointer has no parent\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range406","title":"json.exception.out_of_range.406","text":"

    A parsed number could not be stored as without changing it to NaN or INF.

    Example message

    number overflow parsing '10E1000'\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range407","title":"json.exception.out_of_range.407","text":"

    This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs.

    Exception cannot occur any more

    • Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers.
    • Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers.
    "},{"location":"home/exceptions/#jsonexceptionout_of_range408","title":"json.exception.out_of_range.408","text":"

    The size (following #) of an UBJSON array or object exceeds the maximal capacity.

    Example message

    excessive array size: 8658170730974374167\n
    "},{"location":"home/exceptions/#jsonexceptionout_of_range409","title":"json.exception.out_of_range.409","text":"

    Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string.

    Example message

    BSON key cannot contain code point U+0000 (at byte 2)\n
    "},{"location":"home/exceptions/#further-exceptions","title":"Further exceptions","text":"

    This exception is thrown in case of errors that cannot be classified with the other exception types.

    Exceptions have ids 5xx.

    Example

    The following code shows how an other_error exception can be caught.

    #include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\nusing namespace nlohmann::literals;\n\nint main()\n{\n    try\n    {\n        // executing a failing JSON Patch operation\n        json value = R\"({\n            \"best_biscuit\": {\n                \"name\": \"Oreo\"\n            }\n        })\"_json;\n        json patch = R\"([{\n            \"op\": \"test\",\n            \"path\": \"/best_biscuit/name\",\n            \"value\": \"Choco Leibniz\"\n        }])\"_json;\n        value.patch(patch);\n    }\n    catch (const json::other_error& e)\n    {\n        // output exception information\n        std::cout << \"message: \" << e.what() << '\\n'\n                  << \"exception id: \" << e.id << std::endl;\n    }\n}\n

    Output:

    message: [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/best_biscuit/name\",\"value\":\"Choco Leibniz\"}\nexception id: 501\n
    "},{"location":"home/exceptions/#jsonexceptionother_error501","title":"json.exception.other_error.501","text":"

    A JSON Patch operation 'test' failed. The unsuccessful operation is also printed.

    Example message

    Executing {\"op\":\"test\", \"path\":\"/baz\", \"value\":\"bar\"} on {\"baz\": \"qux\"}:

    [json.exception.other_error.501] unsuccessful: {\"op\":\"test\",\"path\":\"/baz\",\"value\":\"bar\"}\n
    "},{"location":"home/faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"home/faq/#known-bugs","title":"Known bugs","text":""},{"location":"home/faq/#brace-initialization-yields-arrays","title":"Brace initialization yields arrays","text":"

    Question

    Why does

    json j{true};\n

    and

    json j(true);\n

    yield different results ([true] vs. true)?

    This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The \"culprit\" for this is the library's constructor overloads for initializer lists to allow syntax like

    json array = {1, 2, 3, 4};\n

    for arrays and

    json object = {{\"one\", 1}, {\"two\", 2}}; \n

    for objects.

    Tip

    To avoid any confusion and ensure portable code, do not use brace initialization with the types basic_json, json, or ordered_json unless you want to create an object or array as shown in the examples above.

    "},{"location":"home/faq/#limitations","title":"Limitations","text":""},{"location":"home/faq/#relaxed-parsing","title":"Relaxed parsing","text":"

    Question

    Can you add an option to ignore trailing commas?

    This library does not support any feature which would jeopardize interoperability.

    "},{"location":"home/faq/#parse-errors-reading-non-ascii-characters","title":"Parse errors reading non-ASCII characters","text":"

    Questions

    • Why is the parser complaining about a Chinese character?
    • Does the library support Unicode?
    • I get an exception [json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"Test\u00e9$')\"

    The library supports Unicode input as follows:

    • Only UTF-8 encoded input is supported which is the default encoding for JSON according to RFC 8259.
    • std::u16string and std::u32string can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
    • Other encodings such as Latin-1 or ISO 8859-1 are not supported and will yield parse or serialization errors.
    • Unicode noncharacters will not be replaced by the library.
    • Invalid surrogates (e.g., incomplete pairs such as \\uDEAD) will yield parse errors.
    • The strings stored in the library are UTF-8 encoded. When using the default string type (std::string), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
    • When you store strings with different encodings in the library, calling dump() may throw an exception unless json::error_handler_t::replace or json::error_handler_t::ignore are used as error handlers.

    In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.

    "},{"location":"home/faq/#wide-string-handling","title":"Wide string handling","text":"

    Question

    Why are wide strings (e.g., std::wstring) dumped as arrays of numbers?

    As described above, the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding.

    Example

    #include <codecvt> // codecvt_utf8\n#include <locale>  // wstring_convert\n\n// encoding function\nstd::string to_utf8(std::wstring& wide_string)\n{\n    static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;\n    return utf8_conv.to_bytes(wide_string);\n}\n\njson j;\nstd::wstring ws = L\"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\";\n\nj[\"original\"] = ws;\nj[\"encoded\"] = to_utf8(ws);\n\nstd::cout << j << std::endl;\n

    The result is:

    {\n  \"encoded\": \"\u8ecaB1234 \u3053\u3093\u306b\u3061\u306f\",\n  \"original\": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399]\n}\n
    "},{"location":"home/faq/#exceptions","title":"Exceptions","text":""},{"location":"home/faq/#parsing-without-exceptions","title":"Parsing without exceptions","text":"

    Question

    Is it possible to indicate a parse error without throwing an exception?

    Yes, see Parsing and exceptions.

    "},{"location":"home/faq/#key-name-in-exceptions","title":"Key name in exceptions","text":"

    Question

    Can I get the key of the object item that caused an exception?

    Yes, you can. Please define the symbol JSON_DIAGNOSTICS to get extended diagnostics messages.

    "},{"location":"home/faq/#serialization-issues","title":"Serialization issues","text":""},{"location":"home/faq/#number-precision","title":"Number precision","text":"

    Question

    • It seems that precision is lost when serializing a double.
    • Can I change the precision for floating-point serialization?

    The library uses std::numeric_limits<number_float_t>::digits10 (15 for IEEE doubles) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip.

    cppreference.com

    The value of std::numeric_limits<T>::digits10 is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow.

    Tip

    The website https://float.exposed gives a good insight into the internal storage of floating-point numbers.

    See this section on the library's number handling for more information.

    "},{"location":"home/faq/#compilation-issues","title":"Compilation issues","text":""},{"location":"home/faq/#android-sdk","title":"Android SDK","text":"

    Question

    Why does the code not compile with Android SDK?

    Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your Application.mk. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default.

    APP_STL := c++_shared\nNDK_TOOLCHAIN_VERSION := clang3.6\nAPP_CPPFLAGS += -frtti -fexceptions\n

    The code compiles successfully with Android NDK, Revision 9 - 11 (and possibly later) and CrystaX's Android NDK version 10.

    "},{"location":"home/faq/#missing-stl-function","title":"Missing STL function","text":"

    Questions

    • Why do I get a compilation error 'to_string' is not a member of 'std' (or similarly, for strtod or strtof)?
    • Why does the code not compile with MinGW or Android SDK?

    This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to this site and this discussion for information on how to fix this bug. For Android NDK using APP_STL := gnustl_static, please refer to this discussion.

    "},{"location":"home/license/","title":"License","text":"

    The class is licensed under the MIT License:

    Copyright \u00a9 2013-2025 Niels Lohmann

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the MIT License (see above). Copyright \u00a9 2008-2009 Bj\u00f6rn Hoehrmann bjoern@hoehrmann.de

    The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the MIT License (see above). Copyright \u00a9 2009 Florian Loitsch

    The class contains a copy of Hedley from Evan Nemerson which is licensed as CC0-1.0.

    "},{"location":"home/releases/","title":"Releases","text":""},{"location":"home/releases/#v373","title":"v3.7.3","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip)

    "},{"location":"home/releases/#summary","title":"Summary","text":"

    This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes","title":"Bug Fixes","text":"
    • Removed reserve() calls from the destructor which could lead to quadratic complexity. #1837 #1838
    "},{"location":"home/releases/#deprecated-functions","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v372","title":"v3.7.2","text":"

    Files

    • include.zip (274 KB)
    • include.zip.asc (1 KB)
    • json.hpp (791 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip)

    "},{"location":"home/releases/#summary_1","title":"Summary","text":"

    Project bad_json_parsers tested how JSON parser libraries react on deeply nested inputs. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. Now the parsing is only bounded by the available memory. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_1","title":"Bug Fixes","text":"
    • Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835
    "},{"location":"home/releases/#further-changes","title":"Further Changes","text":"
    • Added WhiteStone Bolt. #1830
    "},{"location":"home/releases/#deprecated-functions_1","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v371","title":"v3.7.1","text":"

    Files

    • include.zip (273 KB)
    • include.zip.asc (1 KB)
    • json.hpp (789 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip)

    "},{"location":"home/releases/#summary_2","title":"Summary","text":"

    This release fixes several small bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_2","title":"Bug Fixes","text":"
    • Fixed a segmentation fault when serializing std::int64_t minimum value. #1708 #1722
    • Fixed the contains() function for JSON Pointers. #1727 #1741
    • Fixed too lax SFINAE guard for conversion from std::pair and std::tuple to json. #1805 #1806 #1825 #1826
    • Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728
    • Fixed integer truncation in iteration_proxy. #1797
    • Updated Hedley to v11 to fix a E2512 error in MSVC. #1799
    • Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821
    • Fixed the conversion from json to std::valarray.
    "},{"location":"home/releases/#improvements","title":"Improvements","text":"
    • The items() function can now be used with a custom string type. #1765
    • Made json_pointer::back const. #1764 #1769
    • Meson is part of the release archive. #1672 #1694
    • Improved documentation on the Meson and Spack package manager. #1694 #1720
    "},{"location":"home/releases/#further-changes_1","title":"Further Changes","text":"
    • Added GitHub Workflow with ubuntu-latest/GCC 7.4.0 as CI step.
    • Added GCC 9 to Travis CI to compile with C++20 support. #1724
    • Added MSVC 2019 to the AppVeyor CI. #1780
    • Added badge to fuzzing status.
    • Fixed some cppcheck warnings. #1760
    • Fixed several typos in the documentation. #1720 #1767 #1803
    • Added documentation on the JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER macros to control user-defined exception handling.
    • Used GitHub's CODEOWNERS and SECURITY feature.
    • Removed GLOB from CMake files. #1779
    • Updated to Doctest 2.3.5.
    "},{"location":"home/releases/#deprecated-functions_2","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v370","title":"v3.7.0","text":"

    Files

    • include.zip (143 KB)
    • include.zip.asc (1 KB)
    • json.hpp (782 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip)

    "},{"location":"home/releases/#summary_3","title":"Summary","text":"

    This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible.

    "},{"location":"home/releases/#new-features","title":"New Features","text":"
    • Add overload of the contains function to check if a JSON pointer is valid without throwing exceptions, just like its counterpart for object keys. #1600
    • Add a function to_string to allow for generic conversion to strings. #916 #1585
    • Add return value for the emplace_back function, returning a reference to the added element just like C++17 is introducing this for std::vector. #1609
    • Add info how to use the library with the pacman package manager on MSYS2. #1670
    "},{"location":"home/releases/#bug-fixes_3","title":"Bug Fixes","text":"
    • Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643
    • Fix a conversion to std::string_view in the unit tests. #1634 #1639
    • Fix MSVC Debug build. #1536 #1570 #1608
    • Fix get_to method to clear existing content before writing. #1511 #1555
    • Fix a -Wc++17-extensions warning. nodiscard attributes are now only used with Clang when -std=c++17 is used. #1535 #1551
    "},{"location":"home/releases/#improvements_1","title":"Improvements","text":"
    • Switch from Catch to doctest for the unit tests which speeds up compilation and runtime of the 112,112,308 tests.
    • Add an explicit section to the README about the frequently addressed topics character encoding, comments in JSON, and the order of object keys.
    "},{"location":"home/releases/#further-changes_2","title":"Further Changes","text":"
    • Use GNUInstallDirs to set library install directories. #1673
    • Fix links in the README. #1620 #1621 #1622 #1623 #1625
    • Mention json type on the documentation start page. #1616
    • Complete documentation of value() function with respect to type_error.302 exception. #1601
    • Fix links in the documentation. #1598
    • Add regression tests for MSVC. #1543 #1570
    • Use CircleCI for continuous integration.
    • Use Doozer for continuous integration on Linux (CentOS, Raspbian, Fedora)
    • Add tests to check each CMake flag (JSON_BuildTests, JSON_Install, JSON_MultipleHeaders, JSON_Sanitizer, JSON_Valgrind, JSON_NoExceptions, JSON_Coverage).
    • Use Hedley to avoid re-inventing several compiler-agnostic feature macros like JSON_DEPRECATED, JSON_NODISCARD, JSON_LIKELY, JSON_UNLIKELY, JSON_HAS_CPP_14, or JSON_HAS_CPP_17. Functions taking or returning pointers are annotated accordingly when a pointer will not be null.
    • Build and run tests on AppVeyor in DEBUG and RELEASE mode.
    "},{"location":"home/releases/#deprecated-functions_3","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v361","title":"v3.6.1","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip)

    "},{"location":"home/releases/#summary_4","title":"Summary","text":"

    This release fixes a regression and a bug introduced by the earlier 3.6.0 release. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_4","title":"Bug Fixes","text":"
    • Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530
    • Fixed a compilation error when <Windows.h> was included. #1531
    "},{"location":"home/releases/#further-changes_3","title":"Further Changes","text":"
    • Fixed a warning for missing field initializers. #1527
    "},{"location":"home/releases/#deprecated-functions_4","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v360","title":"v3.6.0","text":"

    Files

    • include.zip (136 KB)
    • include.zip.asc (1 KB)
    • json.hpp (711 KB)
    • json.hpp.asc (1 KB)

    Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip)

    \u2139\ufe0f This release introduced a regression. Please update to version 3.6.1!

    "},{"location":"home/releases/#summary_5","title":"Summary","text":"

    This release adds some convenience functions for JSON Pointers, introduces a contains function to check if a key is present in an object, and improves the performance of integer serialization. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_1","title":"New Features","text":"
    • Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with operator/ and operator/=. JSON Pointers can be inspected with empty, back, and parent_pointer, and manipulated with push_back and pop_back. #1434
    • Added a boolean method contains to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474
    "},{"location":"home/releases/#bug-fixes_5","title":"Bug Fixes","text":"
    • Fixed a compilation issues with libc 2.12. #1483 #1514
    • Fixed endian conversion on PPC64. #1489
    • Fixed library to compile with GCC 9. #1472 #1492
    • Fixed a compilation issue with GCC 7 on CentOS. #1496
    • Fixed an integer overflow. #1447
    • Fixed buffer flushing in serializer. #1445 #1446
    "},{"location":"home/releases/#improvements_2","title":"Improvements","text":"
    • The performance of dumping integers has been greatly improved. #1411
    • Added CMake parameter JSON_Install to control whether the library should be installed (default: on). #1330
    • Fixed a lot of compiler and linter warnings. #1400 #1435 #1502
    • Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498
    • Added nodiscard attribute to meta(), array(), object(), from_cbor, from_msgpack, from_ubjson, from_bson, and parse. #1433
    "},{"location":"home/releases/#further-changes_4","title":"Further Changes","text":"
    • Added missing headers. #1500
    • Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491
    • Fixed documentation of parse function. #1473
    • Suppressed warning that cannot be fixed inside the library. #1401 #1468
    • Imroved package manager suppert:
      • Updated Buckaroo instructions. #1495
      • Improved Meson support. #1463
      • Added Conda package manager documentation. #1430
      • Added NuGet package manager documentation. #1132
    • Continuous Integration
      • Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder.
      • Added Clang 7 to Travis CI.
      • Fixed AppVeyor x64 builds. #1374 #1414
    • Updated thirdparty libraries:
      • Catch 1.12.0 -> 1.12.2
      • Google Benchmark 1.3.0 -> 1.4.1
      • Doxygen 1.8.15 -> 1.8.16
    "},{"location":"home/releases/#deprecated-functions_5","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v350","title":"v3.5.0","text":"

    Files

    • include.zip (133 KB)
    • include.zip.asc (1 KB)
    • json.hpp (693 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip)

    "},{"location":"home/releases/#summary_6","title":"Summary","text":"

    This release introduces the support for structured bindings and reading from FILE*. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_2","title":"New Features","text":"
    • Structured bindings are now supported for JSON objects and arrays via the items() member function, so finally this code is possible:

      for (auto& [key, val] : j.items()) {\n    std::cout << key << ':' << val << '\\n';\n}\n
      #1388 #1391

    • Added support for reading from FILE* to support situations in which streams are nit available or would require too much RAM. #1370 #1392

    "},{"location":"home/releases/#bug-fixes_6","title":"Bug Fixes","text":"
    • The eofbit was not set for input streams when the end of a stream was reached while parsing. #1340 #1343
    • Fixed a bug in the SAX parser for BSON arrays.
    "},{"location":"home/releases/#improvements_3","title":"Improvements","text":"
    • Added support for Clang 5.0.1 (PS4 version). #1341 #1342
    "},{"location":"home/releases/#further-changes_5","title":"Further Changes","text":"
    • Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading from a JSON value. Details about this recommendation can be found here. #1363
    • Fixed typos in the documentation. #1329 #1380 #1382
    • Fixed a C4800 warning. #1364
    • Fixed a -Wshadow warning #1346
    • Wrapped std::snprintf calls to avoid error in MSVC. #1337
    • Added code to allow installation via Meson. #1345
    "},{"location":"home/releases/#deprecated-functions_6","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v340","title":"v3.4.0","text":"

    Files

    • include.zip (132 KB)
    • include.zip.asc (1 KB)
    • json.hpp (689 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip)

    "},{"location":"home/releases/#summary_7","title":"Summary","text":"

    This release introduces three new features:

    • BSON (Binary JSON) is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library.
    • Adjustable error handlers for invalid Unicode allows to specify the behavior when invalid byte sequences are serialized.
    • Simplified enum/JSON mapping with a macro in case the default mapping to integers is not desired.

    Furthermore, some effort has been invested in improving the parse error messages. Besides, a few bugs have been fixed. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_3","title":"New Features","text":"
    • The library can read and write a subset of BSON (Binary JSON). All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See the README for examples. #1244 #1320
    • The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three Unicode error handlers: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the documentation of the dump function for examples. #1198 #1314
    • To easily specify a user-defined enum/JSON mapping, a macro NLOHMANN_JSON_SERIALIZE_ENUM has been introduced. See the README section for more information. #1208 #1323
    "},{"location":"home/releases/#bug-fixes_7","title":"Bug Fixes","text":"
    • fixed truncation #1286 #1315
    • fixed an issue with std::pair #1299 #1301
    • fixed an issue with std::variant #1292 #1294
    • fixed a bug in the JSON Pointer parser
    "},{"location":"home/releases/#improvements_4","title":"Improvements","text":"
    • The diagnosis messages for parse errors have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., \"while parsing a JSON string\"). Example: error parse error at 2: syntax error - invalid string: control character must be escaped; last read: '<U+0009>' is now reported as parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '<U+0009>'. #1280 #1288 #1303
    "},{"location":"home/releases/#further-changes_6","title":"Further Changes","text":"
    • improved Meson documentation #1305
    • fixed some more linter warnings #1280
    • fixed Clang detection for third-party Google Benchmark library #1277
    "},{"location":"home/releases/#deprecated-functions_7","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v330","title":"v3.3.0","text":"

    Files

    • include.zip (123 KB)
    • include.zip.asc (1 KB)
    • json.hpp (635 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip)

    "},{"location":"home/releases/#summary_8","title":"Summary","text":"

    This release adds support for GCC 4.8. Furthermore, it adds a function get_to to write a JSON value to a passed reference. Another topic of this release was the CMake support which has been overworked and documented.

    Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_4","title":"New Features","text":"
    • The library can now also built with GCC 4.8. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug 57824 in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257
    • Added new function get_to to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the get function. #1227 #1231
    "},{"location":"home/releases/#bug-fixes_8","title":"Bug Fixes","text":"
    • Fixed a bug in the CMake file that made target_link_libraries to not properly include nlohmann_json. #1243 #1245 #1260
    • Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272
    • Fixed a bug that prevented compilation with ICPC. #755 #1222
    • Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238
    • Fixed a -Wctor-dtor-privacy warning. #1224
    • Fixed a warning on a lambda in unevaluated context. #1225 #1230
    • Fixed a bug introduced in version 3.2.0 where defining JSON_CATCH_USER led to duplicate macro definition of JSON_INTERNAL_CATCH. #1213 #1214
    • Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249
    "},{"location":"home/releases/#improvements_5","title":"Improvements","text":"
    • Added documentation on CMake integration of the library. #1270
    • Changed the CMake file to use find_package(nlohmann_json) without installing the library. #1202
    • Improved error messages in case operator[] is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: \"cannot use operator[] with a string argument\". #1220 #1221
    • Added a license and version information to the Meson build file. #1252
    • Removed static assertions to indicated missing to_json or from_json functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228
    • The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262
    • The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271
    "},{"location":"home/releases/#further-changes_7","title":"Further Changes","text":"
    • GCC 4.8 and Xcode 10 were added to the continuous integration suite at Travis.
    • Added lgtm checks to pull requests.
    • Added tests for CMake integration. #1260
    "},{"location":"home/releases/#deprecated-functions_8","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v320","title":"v3.2.0","text":"

    Files

    • include.zip (124 KB)
    • include.zip.asc (1 KB)
    • json.hpp (636 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip)

    "},{"location":"home/releases/#summary_9","title":"Summary","text":"

    This release introduces a SAX interface to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like parse, accept, from_cbor, from_msgpack, and from_ubjson use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but std::vector<bool> to track the hierarchy of structured values) which allows to process nested input more efficiently.

    Furthermore, the library finally is able to parse from wide string types. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32.

    This release further fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_5","title":"New Features","text":"
    • added a parser with a SAX interface (#971, #1153)
    • support to parse from wide string types std::wstring, std::u16string, and std::u32string; the input will be converted to UTF-8 (#1031)
    • added support for std::string_view when using C++17 (#1028)
    • allow to roundtrip std::map and std::unordered_map from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138)
    "},{"location":"home/releases/#bug-fixes_9","title":"Bug Fixes","text":"
    • allow to create nullptr_t from JSON allowing to properly roundtrip null values (#1169)
    • allow compare user-defined string types (#1130)
    • better support for algorithms using iterators from items() (#1045, #1134)
    • added parameter to avoid compilation error with MSVC 2015 debug builds (#1114)
    • re-added accidentally skipped unit tests (#1176)
    • fixed MSVC issue with std::swap (#1168)
    "},{"location":"home/releases/#improvements_6","title":"Improvements","text":"
    • key() function for iterators returns a const reference rather than a string copy (#1098)
    • binary formats CBOR, MessagePack, and UBJSON now supports float as type for floating-point numbers (#1021)
    "},{"location":"home/releases/#further-changes_8","title":"Further Changes","text":"
    • changed issue templates
    • improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86
    • required CMake version is now at least 3.8 (#1040)
    • overworked CMake file wrt. packaging (#1048)
    • added package managers: Spack (#1041) and CocoaPods (#1148)
    • fixed Meson include directory (#1142)
    • preprocessor macro JSON_SKIP_UNSUPPORTED_COMPILER_CHECK can skip the rejection of unsupported compilers - use at your own risk! (#1128)
    • preprocessor macro JSON_INTERNAL_CATCH/JSON_INTERNAL_CATCH_USER allows to control the behavior of exception handling inside the library (#1187)
    • added note on char to JSON conversion
    • added note how to send security-related issue via encrypted email
    • removed dependency to std::stringstream (#1117)
    • added SPDX-License-Identifier
    • added updated JSON Parsing Test Suite, described in Parsing JSON is a Minefield \ud83d\udca3
    • updated to Catch 1.12.0
    "},{"location":"home/releases/#deprecated-functions_9","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v312","title":"v3.1.2","text":"

    Files

    • include.zip (115 KB)
    • include.zip.asc (1 KB)
    • json.hpp (582 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip)

    "},{"location":"home/releases/#summary_10","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_10","title":"Bug Fixes","text":"
    • Fixed a memory leak occurring in the parser callback (#1001).
    • Different specializations of basic_json (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986).
    • Fixed a logical error in an iterator range check (#992).
    "},{"location":"home/releases/#improvements_7","title":"Improvements","text":"
    • The parser and the serialization now support user-defined string types (#1006, #1009).
    "},{"location":"home/releases/#further-changes_9","title":"Further Changes","text":"
    • Clang Analyzer is now used as additional static analyzer; see make clang_analyze.
    • Overworked README by adding links to the documentation (#981).
    "},{"location":"home/releases/#deprecated-functions_10","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v311","title":"v3.1.1","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip)

    "},{"location":"home/releases/#summary_11","title":"Summary","text":"

    This release fixes several bugs in the library. All changes are backward-compatible.

    "},{"location":"home/releases/#bug-fixes_11","title":"Bug Fixes","text":"
    • Fixed parsing of CBOR strings with indefinite length (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the 0x7F start byte.
    • Fixed user-defined conversion to vector type (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided.
    • Fixed documentation of the parser behavior for objects with duplicate keys (#963). The exact behavior is not specified by RFC 8259 and the library now also provides no guarantee which object key is stored.
    • Added check to detect memory overflow when parsing UBJSON containers (#962). The optimized UBJSON format allowed for specifying an array with billions of null elements with a few bytes and the library did not check whether this size exceeded max_size().
    "},{"location":"home/releases/#further-changes_10","title":"Further Changes","text":"
    • Code coverage is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957).
    • A Makefile target run_benchmarks was added to quickly build and run the benchmark suite.
    • The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use #include <nlohmann/json.hpp> to allow for selecting single_include or include or whatever installation folder as include directory.
    • Added note on how to use the library with the cget package manager (#954).
    "},{"location":"home/releases/#deprecated-functions_11","title":"Deprecated functions","text":"

    This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0):

    • Function iterator_wrapper are deprecated. Please use the member function items() instead.
    • Functions friend std::istream& operator<<(basic_json&, std::istream&) and friend std::ostream& operator>>(const basic_json&, std::ostream&) are deprecated. Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.
    "},{"location":"home/releases/#v310","title":"v3.1.0","text":"

    Files

    • include.zip (114 KB)
    • include.zip.asc (1 KB)
    • json.hpp (577 KB)
    • json.hpp.asc (1 KB)

    Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip)

    "},{"location":"home/releases/#summary_12","title":"Summary","text":"

    This release adds support for the UBJSON format and JSON Merge Patch. It also contains some minor changes and bug fixes. All changes are backward-compatible.

    "},{"location":"home/releases/#new-features_6","title":"New features","text":"
    • The library now supports UBJSON (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the documentation overview for a comparison of the different formats CBOR, MessagePack, and UBJSON.
    • JSON Merge Patch (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of merge_patch for more information.
    "},{"location":"home/releases/#improvements_8","title":"Improvements","text":"
    • The library now uses the Grisu2 algorithm for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936).
    • The UTF-8 handling was further simplified by using the decoder of Bj\u00f6rn Hoehrmann in more scenarios.
    "},{"location":"home/releases/#reorganization","title":"Reorganization","text":"
    • Though the library is released as a single header, its development got more and more complicated. With this release, the header is split into several files and the single-header file json.hpp can be generated from these development sources. In the repository, folder include contains the development sources and single_include contains the single json.hpp header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944).
    • The split further allowed for a forward declaration header include/nlohmann/json_fwd.hpp to speed up compilation times (#314).
    "},{"location":"home/releases/#further-changes_11","title":"Further changes","text":"
    • Google Benchmark is now used for micro benchmarks (see benchmarks folder, #921).
    • The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950).
    • The exceptional behavior can now be overridden by defining macros JSON_THROW_USER, JSON_TRY_USER, and JSON_CATCH_USER, defining the behavior of throw, try and catch, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938).
    • To facilitate the interplay with flex and Bison, the library does not use the variable name yytext any more as it could clash with macro definitions (#933).
    • The library now defines NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, and NLOHMANN_JSON_VERSION_PATCH to allow for conditional compilation based on the included library version (#943, #948).
    • A compilation error with ICC has been fixed (#947).
    • Typos and links in the documentation have been fixed (#900, #930).
    • A compiler error related to incomplete types has been fixed (#919).
    • The tests form the UTF-8 decoder stress test have been added to the test suite.
    "},{"location":"home/releases/#deprecated-functions_12","title":"Deprecated functions","text":"
    • Function iterator_wrapper has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function items() with the same semantics. iterator_wrapper will be removed in the next major version (i.e., 4.0.0).

    Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v301","title":"v3.0.1","text":"

    Files

    • json.hpp (502 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c

    "},{"location":"home/releases/#summary_13","title":"Summary","text":"

    This release fixes small issues in the implementation of JSON Pointer and JSON Patch. All changes are backward-compatible.

    "},{"location":"home/releases/#changes","title":"Changes","text":"
    • The \"copy\" operation of JSON Patch (RFC 6902) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception.
    • An array index in a JSON Pointer (RFC 6901) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as 10e2 are used.
    • Added the JSON Patch tests from Byron Ruth and Mike McCabe.
    • Fixed the documentation of the at(ptr) function with JSON Pointers to list all possible exceptions (see #888).
    • Updated the container overview documentation (see #883).
    • The CMake files now respect the BUILD_TESTING option (see #846, #885)
    • Fixed some compiler warnings (see #858, #882).
    "},{"location":"home/releases/#deprecated-functions_13","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#v300","title":"v3.0.0","text":"

    Files

    • json.hpp (501 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462

    "},{"location":"home/releases/#summary_14","title":"Summary","text":"

    After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to semantic versioning, this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies.

    "},{"location":"home/releases/#breaking-changes","title":"Breaking changes","text":"

    This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section \"Moving from 2.x.x to 3.0.0\" at the end of the release notes, we describe in detail how existing code needs to be changed.

    • The library now uses user-defined exceptions instead of re-using those defined in <stdexcept> (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single catch(json::exception).
    • When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, non-UTF-8 encoded strings now yield a json::type_error exception during serialization (#838). The check for valid UTF-8 is realized with code from Bj\u00f6rn Hoehrmann.
    • NaN and infinity values can now be stored inside the JSON value without throwing an exception. They are, however, still serialized as null (#388).
    • The library's iterator tag was changed from RandomAccessIterator to BidirectionalIterator (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition.
    • The library does not include the standard headers <iostream>, <ctype>, and <stdexcept> any more. You may need to add these headers to code relying on them.
    • Removed constructor explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) which was deprecated in version 2.0.0 (#480).
    "},{"location":"home/releases/#deprecated-functions_14","title":"Deprecated functions","text":"

    To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0):

    • friend std::istream& operator<<(basic_json&, std::istream&)
    • friend std::ostream& operator>>(const basic_json&, std::ostream&)

    Please use friend std::istream& operator>>(std::istream&, basic_json&) and friend operator<<(std::ostream&, const basic_json&) instead.

    "},{"location":"home/releases/#new-features_7","title":"New features","text":"

    With all this breaking and deprecation out of the way, let's talk about features!

    • We improved the diagnostic information for syntax errors (#301). Now, an exception json::parse_error is thrown which contains a detailed message on the error, but also a member byte to indicate the byte offset in the input where the error occurred.
    • We added a non-throwing syntax check (#458): The new accept function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter allow_exceptions to the existing parse functions to return a discarded value in case a syntax error occurs instead of throwing an exception.
    • An update function was added to merge two JSON objects (#428). In case you are wondering: the name was inspired by Python.
    • The insert function now also supports an iterator range to add elements to an object.
    • The binary exchange formats CBOR and MessagePack can now be parsed from input streams and written to output streams (#477).
    • Input streams are now only read until the end of a JSON value instead of the end of the input (#367).
    • The serialization function dump now has two optional parameters ensure_ascii to escape all non-ASCII characters with \\uxxxx and an indent_char parameter to choose whether to indent with spaces or tabs (#654).
    • Added built-in type support for C arrays (#502), std::pair and std::tuple (#563, #614), enum and enum class (#545), std::vector<bool> (#494). Fixed support for std::valarray (#702), std::array (#553), and std::map<std::string, std::string> (#600, #607).
    "},{"location":"home/releases/#further-changes_12","title":"Further changes","text":"

    Furthermore, there have been a lot of changes under the hood:

    • Replaced the re2c generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard.
    • Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575).
    • We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602).
    • Values can be now moved from initializer lists (#663).
    • Updated to Catch 1.9.7. Unfortunately, Catch2 currently has some performance issues.
    • The non-exceptional paths of the library are now annotated with __builtin_expect to optimize branch prediction as long as no error occurs.
    • MSVC now produces a stack trace in MSVC if a from_json or to_json function was not found for a user-defined type. We also added a debug visualizer nlohmann_json.natvis for better debugging in MSVC (#844).
    • Overworked the documentation and added even more examples.
    • The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (JSON_Coverage), compilation without exceptions (JSON_NoExceptions), LLVM sanitizers (JSON_Sanitizer), or execution with Valgrind (JSON_Valgrind).
    • Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753).
    • Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues.
    "},{"location":"home/releases/#moving-from-2xx-to-300","title":"Moving from 2.x.x to 3.0.0","text":""},{"location":"home/releases/#user-defined-exceptions","title":"User-defined Exceptions","text":"

    There are five different exceptions inheriting from json::exception:

    • json::parse_error for syntax errors (including the binary formats),
    • json::invalid_iterator for errors related to iterators,
    • json::type_error for errors where functions were called with the wrong JSON type,
    • json::out_of_range for range errors, and
    • json::other_error for miscellaneous errors.

    To support these exception, the try/catch blocks of your code need to be adjusted:

    new exception previous exception parse_error.101 invalid_argument parse_error.102 invalid_argument parse_error.103 invalid_argument parse_error.104 invalid_argument parse_error.105 invalid_argument parse_error.106 domain_error parse_error.107 domain_error parse_error.108 domain_error parse_error.109 invalid_argument parse_error.110 out_of_range parse_error.111 invalid_argument parse_error.112 invalid_argument invalid_iterator.201 domain_error invalid_iterator.202 domain_error invalid_iterator.203 domain_error invalid_iterator.204 out_of_range invalid_iterator.205 out_of_range invalid_iterator.206 domain_error invalid_iterator.207 domain_error invalid_iterator.208 domain_error invalid_iterator.209 domain_error invalid_iterator.210 domain_error invalid_iterator.211 domain_error invalid_iterator.212 domain_error invalid_iterator.213 domain_error invalid_iterator.214 out_of_range type_error.301 domain_error type_error.302 domain_error type_error.303 domain_error type_error.304 domain_error type_error.305 domain_error type_error.306 domain_error type_error.307 domain_error type_error.308 domain_error type_error.309 domain_error type_error.310 domain_error type_error.311 domain_error type_error.313 domain_error type_error.314 domain_error type_error.315 domain_error out_of_range.401 out_of_range out_of_range.402 out_of_range out_of_range.403 out_of_range out_of_range.404 out_of_range out_of_range.405 domain_error other_error.501 domain_error"},{"location":"home/releases/#handling-of-nan-and-inf","title":"Handling of NaN and INF","text":"
    • If an overflow occurs during parsing a number from a JSON text, an exception json::out_of_range is thrown so that the overflow is detected early and roundtripping is guaranteed.

    • NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like double in this regard (no exception occurs). However, NaN and INF are serialized to null.

    "},{"location":"home/releases/#removal-of-deprecated-functions","title":"Removal of deprecated functions","text":"

    Function explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) should be replaced by the parse function: Let ss be a stream and cb be a parse callback function.

    Old code:

    json j(ss, cb);\n

    New code:

    json j = json::parse(ss, cb);\n

    If no callback function is used, also the following code works:

    json j;\nj << ss;\n

    or

    json j;\nss >> j;\n
    "},{"location":"home/releases/#v211","title":"v2.1.1","text":"

    Files

    • json.hpp (437 KB)
    • json.hpp.asc (1 KB)

    Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57

    "},{"location":"home/releases/#summary_15","title":"Summary","text":"

    This release fixes a locale-related bug in the parser. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible.

    "},{"location":"home/releases/#changes_1","title":"Changes","text":"
    • Locales that have a different character than . as decimal separator (e.g., the Norwegian locale nb_NO.UTF-8) led to truncated number parsing or parse errors. The library now has been fixed to work with any locale. Note that . is still the only valid decimal separator for JSON input.
    • Numbers like 1.0 were correctly parsed as floating-point number, but serialized as integer (1). Now, floating-point numbers correctly round trip.
    • Parsing incorrect JSON numbers with leading 0 (0123) could yield a buffer overflow. This is fixed now by detecting such errors directly by the lexer.
    • Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error.
    • Comparing a JSON number with 0 led to a comparison with null. This is fixed now.
    • All throw calls are now wrapped in macros.
    • Starting during the preparation of this release (since 8 February 2017), commits and released files are cryptographically signed with this GPG key. Previous releases have also been signed.
    • The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser.
    • Some more warnings have been fixed. With Clang, the code compiles without warnings with -Weverything (well, it needs -Wno-documentation-unknown-command and -Wno-deprecated-declarations, but you get the point).
    • The code can be compiled easier with many Android NDKs by avoiding macros like UINT8_MAX which previously required defining a preprocessor macro for compilation.
    • The unit tests now compile two times faster.
    • Cotire is used to speed up the build.
    • Fixed a lot of typos in the documentation.
    • Added a section to the README file that lists all used third-party code/tools.
    • Added a note on constructing a string value vs. parsing.
    • The test suite now contains 11202597 unit tests.
    • Improved the Doxygen documentation by shortening the template parameters of class basic_json.
    • Removed Doozer.
    • Added Codacity.
    • Upgraded Catch to version 1.7.2.
    "},{"location":"home/releases/#v210","title":"v2.1.0","text":"

    Files

    • json.hpp (426 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-28
    • SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b
    "},{"location":"home/releases/#summary_16","title":"Summary","text":"

    This release introduces a means to convert from/to user-defined types. The release is backwards compatible.

    "},{"location":"home/releases/#changes_2","title":"Changes","text":"
    • The library now offers an elegant way to convert from and to arbitrary value types. All you need to do is to implement two functions: to_json and from_json. Then, a conversion is as simple as putting a = between variables. See the README for more information and examples.
    • Exceptions can now be switched off. This can be done by defining the preprocessor symbol JSON_NOEXCEPTION or by passing -fno-exceptions to your compiler. In case the code would usually thrown an exception, abort() is now called.
    • Information on the library can be queried with the new (static) function meta() which returns a JSON object with information on the version, compiler, and platform. See the documentation for an example.
    • A bug in the CBOR parser was fixed which led to a buffer overflow.
    • The function type_name() is now public. It allows to query the type of a JSON value as string.
    • Added the Big List of Naughty Strings as test case.
    • Updated to Catch v1.6.0.
    • Some typos in the documentation have been fixed.
    "},{"location":"home/releases/#v2010","title":"v2.0.10","text":"

    Files

    • json.hpp (409 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2017-01-02
    • SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d
    "},{"location":"home/releases/#summary_17","title":"Summary","text":"

    This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_3","title":"Changes","text":"
    • Fixed a lot of bugs in the CBOR and MesssagePack parsers. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's OSS-Fuzz, see #405, #407, #408, #409, #411, and #412 for more information.
    • We now also use the Doozer continuous integration platform.
    • The complete test suite is now also run with Clang's address sanitizer and undefined-behavior sanitizer.
    • Overworked fuzz testing; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value.
    • Clarified documentation of find() function to always return end() when called on non-object value types.
    • Moved thirdparty test code to test/thirdparty directory.
    "},{"location":"home/releases/#v209","title":"v2.0.9","text":"

    Files

    • json.hpp (406 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-16
    • SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5
    "},{"location":"home/releases/#summary_18","title":"Summary","text":"

    This release implements with CBOR and MessagePack two binary serialization/deserialization formats. It further contains some small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_4","title":"Changes","text":"
    • The library can now read and write the binary formats CBOR (Concise Binary Object Representation) and MessagePack. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the README file for more information and examples.
    • simplified the iteration implementation allowing to remove dozens of lines of code
    • fixed an integer overflow error detected by Google's OSS-Fuzz
    • suppressed documentation warnings inside the library to facilitate compilation with -Wdocumentation
    • fixed an overflow detection error in the number parser
    • updated contribution guidelines to a list of frequentely asked features that will most likely be never added to the library
    • added a table of contents to the README file to add some structure
    • mentioned the many examples and the documentation in the README file
    • split unit tests into individual independent binaries to speed up compilation and testing
    • the test suite now contains 11201886 tests
    "},{"location":"home/releases/#v208","title":"v2.0.8","text":"

    Files

    • json.hpp (360 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-12-02
    • SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120
    "},{"location":"home/releases/#summary_19","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_5","title":"Changes","text":"
    • fixed a bug that froze the parser if a passed file was not found (now, std::invalid_argument is thrown)
    • fixed a bug that lead to an error of a file at EOF was parsed again (now, std::invalid_argument is thrown)
    • the well known functions emplace and emplace_back have been added to JSON values and work as expected
    • improved the performance of the serialization (dump function)
    • improved the performance of the deserialization (parser)
    • some continuous integration images at Travis were added and retired; see here for the current continuous integration setup
    • the Coverity scan works again
    • the benchmarking code has been improved to produce more stable results
    • the README file has been extended and includes more frequently asked examples
    • the test suite now contains 8905518 tests
    • updated Catch to version 1.5.8
    "},{"location":"home/releases/#v207","title":"v2.0.7","text":"

    Files

    • json.hpp (355 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-11-02
    • SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf
    "},{"location":"home/releases/#summary_20","title":"Summary","text":"

    This release fixes a few bugs in the JSON parser found in the Parsing JSON is a Minefield \ud83d\udca3 article. The fixes are backwards compatible.

    "},{"location":"home/releases/#changes_6","title":"Changes","text":"
    • The article Parsing JSON is a Minefield \ud83d\udca3 discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed:
    • Files with less than 5 bytes can now be parsed without error.
    • The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected.
    • The library now accepts all but one \"yes\" test (y_string_utf16.json): UTF-16 is not supported.
    • The library rejects all but one \"no\" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings.
    • The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor.
    • A few grammar mistakes in the README file have been fixed.
    "},{"location":"home/releases/#v206","title":"v2.0.6","text":"

    Files

    • json.hpp (349 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-10-15
    • SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae
    "},{"location":"home/releases/#summary_21","title":"Summary","text":"

    This release fixes the semantics of operator[] for JSON Pointers (see below). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_7","title":"Changes","text":"
    • operator[] for JSON Pointers now behaves like the other versions of operator[] and transforms null values into objects or arrays if required. This allows to created nested structures like j[\"/foo/bar/2\"] = 17 (yielding {\"foo\": \"bar\": [null, null, 17]}) without problems.
    • overworked a helper SFINAE function
    • fixed some documentation issues
    • fixed the CMake files to allow to run the test suite outside the main project directory
    • restored test coverage to 100%.
    "},{"location":"home/releases/#v205","title":"v2.0.5","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-14
    • SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9
    "},{"location":"home/releases/#summary_22","title":"Summary","text":"

    This release fixes a regression bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_8","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code.
    "},{"location":"home/releases/#v204","title":"v2.0.4","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-09-11
    • SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda
    "},{"location":"home/releases/#summary_23","title":"Summary","text":"

    This release fixes a bug in the stream parser (function parse() and the <</>> operators). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_9","title":"Changes","text":"
    • Bug fix: The end of a file stream was not detected properly which led to parse errors.
    • Fixed a compiler warning about an unused variable.
    "},{"location":"home/releases/#v203","title":"v2.0.3","text":"

    Files

    • json.hpp (347 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-08-31
    • SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3
    "},{"location":"home/releases/#summary_24","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_10","title":"Changes","text":"
    • The parser/deserialization functions have been generalized to process any contiguous sequence of 1-byte elements (e.g., char, unsigned char, uint8_t). This includes all kind of string representations (string literals, char arrays, std::string, const char*), contiguous containers (C-style arrays, std::vector, std::array, std::valarray, std::initializer_list). User-defined containers providing random-access iterator access via std::begin and std::end can be used as well. See the documentation (1, 2, 3, 4) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol NDEBUG.
    • As a general remark on assertions: The library uses assertions to preclude undefined behavior. A prominent example for this is the operator[] for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a null value at the given key. Assertions can be switched of by defining the preprocessor symbol NDEBUG. See the documentation of assert for more information.
    • In the course of cleaning up the parser/deserialization functions, the constructor basic_json(std::istream&, const parser_callback_t) has been deprecated and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the parse functions. That is, calls like json j(i); for an input stream i need to be replaced by json j = json::parse(i);. Compilers will produce a deprecation warning if client code uses this function.
    • Minor improvements:
    • Improved the performance of the serialization by avoiding the re-creation of a locale object.
    • Fixed two MSVC warnings. Compiling the test suite with /Wall now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
    • Some project internals:
    • The project has qualified for the Core Infrastructure Initiative Best Practices Badge. While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the contribution guidelines document how to communicate security issues privately.
    • The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute make check.
    • The continuous integration with Travis was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
    • An 11-day run of American fuzzy lop checked 962 million inputs on the parser and found no issue.
    "},{"location":"home/releases/#v202","title":"v2.0.2","text":"

    Files

    • json.hpp (338 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-07-31
    • SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d
    "},{"location":"home/releases/#summary_25","title":"Summary","text":"

    This release combines a lot of small fixes and improvements. The release is backwards compatible.

    "},{"location":"home/releases/#changes_11","title":"Changes","text":"
    • The parser has been overworked, and a lot of small issues have been fixed:
    • Improved parser performance by avoiding recursion and using move semantics for the return value.
    • Unescaped control characters \\x10-\\x1f are not accepted any more.
    • Fixed a bug in the parser when reading from an input stream.
    • Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped.
    • The precision of output streams is now preserved by the parser.
    • Started to check the code correctness by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro NDEBUG, see the documentation of assert.
    • A lot of code cleanup: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds.
    • Added some compile-time checks:
    • Unsupported compilers are rejected during compilation with an #error command.
    • Static assertion prohibits code with incompatible pointer types used in get_ptr().
    • Improved the documentation, and adjusted the documentation script to choose the correct version of sed.
    • Replaced a lot of \"raw loops\" by STL functions like std::all_of, std::for_each, or std::accumulate. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement.
    • Implemented a value() function for JSON pointers (similar to at function).
    • The Homebrew formula (see Integration) is now tested for all Xcode builds (6.1 - 8.x) with Travis.
    • Avoided output to std::cout in the test cases.
    "},{"location":"home/releases/#v201","title":"v2.0.1","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-28
    • SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd
    "},{"location":"home/releases/#summary_26","title":"Summary","text":"

    This release fixes a performance regression in the JSON serialization (function dump()). This fix is backwards compatible.

    "},{"location":"home/releases/#changes_12","title":"Changes","text":"
    • The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number.
    • The locale of an output stream is now correctly reset to the previous value by the JSON library.
    "},{"location":"home/releases/#v200","title":"v2.0.0","text":"

    Files

    • json.hpp (321 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-06-24
    • SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c
    "},{"location":"home/releases/#summary_27","title":"Summary","text":"

    This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed.

    As noexcept and constexpr specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to Semantic Versioning, this calls for a new major version, so say hello to 2\ufe0f\u20e3.0\ufe0f\u20e3.0\ufe0f\u20e3.

    "},{"location":"home/releases/#changes_13","title":"Changes","text":"
    • \ud83d\udd1f A JSON value now uses uint64_t (default value for template parameter NumberUnsignedType) as data type for unsigned integer values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an is_number_unsigned() test have been added.
    • \ud83d\udc49 JSON Pointer (RFC 6901) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in at() and operator[] functions. Furthermore, JSON values can be \u201cflattened\u201d to key/value pairs using flatten() where each key is a JSON Pointer. The original value can be restored by \u201cunflattening\u201d the flattened value using unflatten().
    • \ud83c\udfe5 JSON Patch (RFC 6902) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, \u2026) to transform a JSON value into another one. A JSON Patch can be created with function diff(const basic_json&) and applied with patch(const basic_json&). Note the created patches use a rather primitive algorithm so far and leave room for improvement.
    • \ud83c\uddea\ud83c\uddfa The code is now locale-independent: Floating-point numbers are always serialized with a period (.) as decimal separator and ignores different settings from the locale.
    • \ud83c\udf7a Homebrew support: Install the library with brew tap nlohmann/json && brew install nlohmann_json.
    • Added constructor to create a JSON value by parsing a std::istream (e.g., std::stringstream or std::ifstream).
    • Added noexcept specifier to basic_json(boolean_t), basic_json(const number_integer_t), basic_json(const int), basic_json(const number_float_t), iterator functions (begin(), end(), etc.)
    • When parsing numbers, the sign of 0.0 (vs. -0.0) is preserved.
    • Improved MSVC 2015, Android, and MinGW support. See README for more information.
    • Improved test coverage (added 2,225,386 tests).
    • Removed some misuses of std::move.
    • Fixed several compiler warnings.
    • Improved error messages from JSON parser.
    • Updated to re2c to version 0.16 to use a minimal DFAs for the lexer.
    • Updated test suite to use Catch version 1.5.6.
    • Made type getters (is_number, etc.) and const value access constexpr.
    • Functions push_back and operator+= now work with key/value pairs passed as initializer list, e.g. j_object += {\"key\", 1}.
    • Overworked CMakeLists.txt to make it easier to integrate the library into other projects.
    "},{"location":"home/releases/#notes","title":"Notes","text":"
    • Parser error messages are still very vague and contain no information on the error location.
    • The implemented diff function is rather primitive and does not create minimal diffs.
    • The name of function iteration_wrapper may change in the future and the function will be deprecated in the next release.
    • Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that RFC 8259 defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like Native JSON Benchmark treat roundtripping deviations as conformance errors.
    "},{"location":"home/releases/#v110","title":"v1.1.0","text":"

    Files

    • json.hpp (257 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2016-01-24
    • SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05
    "},{"location":"home/releases/#summary_28","title":"Summary","text":"

    This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the last version (1.0.0), the following changes have been made:

    "},{"location":"home/releases/#changes_14","title":"Changes","text":"
    • Fixed: Floating-point numbers are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194]
    • Added: The code now contains assertions to detect undefined behavior during development. As the standard function assert is used, the assertions can be switched off by defining the preprocessor symbol NDEBUG during compilation. [#168]
    • Added: It is now possible to get a reference to the stored values via the newly added function get_ref(). [#128, #184]
    • Fixed: Access to object values via keys (operator[]) now works with all kind of string representations. [#171, #189]
    • Fixed: The code now compiles again with Microsoft Visual Studio 2015. [#144, #167, #188]
    • Fixed: All required headers are now included.
    • Fixed: Typos and other small issues. [#162, #166, #175, #177, #179, #180]
    "},{"location":"home/releases/#notes_1","title":"Notes","text":"

    There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible.

    "},{"location":"home/releases/#v100","title":"v1.0.0","text":"

    Files

    • json.hpp (243 KB)
    • json.hpp.asc (1 KB)
    • Release date: 2015-12-28
    • SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de
    "},{"location":"home/releases/#summary_29","title":"Summary","text":"

    This is the first official release. Compared to the prerelease version 1.0.0-rc1, only a few minor improvements have been made:

    "},{"location":"home/releases/#changes_15","title":"Changes","text":"
    • Changed: A UTF-8 byte order mark is silently ignored.
    • Changed: sprintf is no longer used.
    • Changed: iterator_wrapper also works for const objects; note: the name may change!
    • Changed: Error messages during deserialization have been improved.
    • Added: The parse function now also works with type std::istream&&.
    • Added: Function value(key, default_value) returns either a copy of an object's element at the specified key or a given default value if no element with the key exists.
    • Added: Public functions are tagged with the version they were introduced. This shall allow for better versioning in the future.
    • Added: All public functions and types are documented (see http://nlohmann.github.io/json/doxygen/) including executable examples.
    • Added: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe.
    • Added: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation.
    "},{"location":"home/sponsors/","title":"Sponsors","text":"

    You can sponsor this library at GitHub Sponsors.

    "},{"location":"home/sponsors/#priority-sponsor","title":"Priority Sponsor","text":"
    • Martti Laine
    • Paul Harrington
    "},{"location":"home/sponsors/#named-sponsors","title":"Named Sponsors","text":"
    • Michael Hartmann
    • Stefan Hagen
    • Steve Sperandeo
    • Robert Jefe Lindst\u00e4dt
    • Steve Wagner
    • Lion Yang

    Thanks everyone!

    "},{"location":"integration/","title":"Header only","text":"

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>\n\n// for convenience\nusing json = nlohmann::json;\n

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    "},{"location":"integration/cmake/","title":"CMake","text":""},{"location":"integration/cmake/#integration","title":"Integration","text":"

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    "},{"location":"integration/cmake/#external","title":"External","text":"

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\nfind_package(nlohmann_json 3.11.3 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    The package configuration file, nlohmann_jsonConfig.cmake, can be used either from an install tree or directly out of the build tree.

    "},{"location":"integration/cmake/#embedded","title":"Embedded","text":"

    To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call add_subdirectory() in your CMakeLists.txt file.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)\nproject(ExampleProject LANGUAGES CXX)\n\n# If you only include this third party in PRIVATE source files, you do not need to install it\n# when your main project gets installed.\nset(JSON_Install OFF CACHE INTERNAL \"\")\n\nadd_subdirectory(nlohmann_json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    "},{"location":"integration/cmake/#supporting-both","title":"Supporting Both","text":"

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)\n\noption(EXAMPLE_USE_EXTERNAL_JSON \"Use an external JSON library\" OFF)\n\nadd_subdirectory(thirdparty)\n\nadd_executable(example example.cpp)\n\n# Note that the namespaced target will always be available regardless of the import method\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n
    thirdparty/CMakeLists.txt
    if(EXAMPLE_USE_EXTERNAL_JSON)\n    find_package(nlohmann_json 3.11.3 REQUIRED)\nelse()\n    set(JSON_BuildTests OFF CACHE INTERNAL \"\")\n    add_subdirectory(nlohmann_json)\nendif()\n

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    "},{"location":"integration/cmake/#fetchcontent","title":"FetchContent","text":"

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)\nproject(ExampleProject LANGUAGES CXX)\n\ninclude(FetchContent)\n\nFetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)\nFetchContent_MakeAvailable(json)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)\n

    Note

    It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like

    FetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json\n    GIT_TAG v3.11.3\n)\n

    However, the repository https://github.com/nlohmann/json download size is quite large.

    "},{"location":"integration/cmake/#cmake-options","title":"CMake Options","text":""},{"location":"integration/cmake/#json_buildtests","title":"JSON_BuildTests","text":"

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    "},{"location":"integration/cmake/#json_ci","title":"JSON_CI","text":"

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostics","title":"JSON_Diagnostics","text":"

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_diagnostic_positions","title":"JSON_Diagnostic_Positions","text":"

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_disableenumserialization","title":"JSON_DisableEnumSerialization","text":"

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    "},{"location":"integration/cmake/#json_fasttests","title":"JSON_FastTests","text":"

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/cmake/#json_globaludls","title":"JSON_GlobalUDLs","text":"

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    "},{"location":"integration/cmake/#json_implicitconversions","title":"JSON_ImplicitConversions","text":"

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    "},{"location":"integration/cmake/#json_install","title":"JSON_Install","text":"

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    "},{"location":"integration/cmake/#json_legacydiscardedvaluecomparison","title":"JSON_LegacyDiscardedValueComparison","text":"

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    "},{"location":"integration/cmake/#json_multipleheaders","title":"JSON_MultipleHeaders","text":"

    Use non-amalgamated version of the library. This option is OFF by default.

    "},{"location":"integration/cmake/#json_systeminclude","title":"JSON_SystemInclude","text":"

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    "},{"location":"integration/cmake/#json_valgrind","title":"JSON_Valgrind","text":"

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    "},{"location":"integration/migration_guide/","title":"Migration Guide","text":"

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    "},{"location":"integration/migration_guide/#replace-deprecated-functions","title":"Replace deprecated functions","text":"

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    "},{"location":"integration/migration_guide/#parsing","title":"Parsing","text":"
    • Function friend std::istream& operator<<(basic_json&, std::istream&) is deprecated since 3.0.0. Please use friend std::istream& operator>>(std::istream&, basic_json&) instead.

      DeprecatedFuture-proof
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nj << ss;\n
      nlohmann::json j;\nstd::stringstream ss(\"[1,2,3]\");\nss >> j;\n
    • Passing iterator pairs or pointer/length pairs to parsing functions (parse, accept, sax_parse, from_cbor, from_msgpack, from_ubjson, and from_bson via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call from_cbor(ptr, ptr+len) instead of from_cbor({ptr, len}).

      DeprecatedFuture-proof
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept({s, s + std::strlen(s)});\n
      const char* s = \"[1,2,3]\";\nbool ok = nlohmann::json::accept(s, s + std::strlen(s));\n
    "},{"location":"integration/migration_guide/#json-pointers","title":"JSON Pointers","text":"
    • Comparing JSON Pointers with strings via operator== and operator!= is deprecated since 3.11.2. To compare a json_pointer p with a string s, convert s to a json_pointer first and use json_pointer::operator== or json_pointer::operator!=.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == \"/foo/bar/1\");\n
      nlohmann::json::json_pointer lhs(\"/foo/bar/1\");\nassert(lhs == nlohmann::json::json_pointer(\"/foo/bar/1\"));\n
    • The implicit conversion from JSON Pointers to string (json_pointer::operator string_t) is deprecated since 3.11.0. Use json_pointer::to_string instead.

      DeprecatedFuture-proof
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr;\n
      nlohmann::json::json_pointer ptr(\"/foo/bar/1\");\nstd::string s = ptr.to_string();\n
    • Passing a basic_json specialization as template parameter RefStringType to json_pointer is deprecated since 3.11.0. The string type can now be directly provided.

      DeprecatedFuture-proof
      using my_json = nlohmann::basic_json<std::map, std::vector, my_string_type>;\nnlohmann::json_pointer<my_json> ptr(\"/foo/bar/1\");\n
      nlohmann::json_pointer<my_string_type> ptr(\"/foo/bar/1\");\n

      Thereby, nlohmann::my_json::json_pointer is an alias for nlohmann::json_pointer<my_string_type> and is always an alias to the json_pointer with the appropriate string type for all specializations of basic_json.

    "},{"location":"integration/migration_guide/#miscellaneous-functions","title":"Miscellaneous functions","text":"
    • The function iterator_wrapper is deprecated since 3.1.0. Please use the member function items instead.

      DeprecatedFuture-proof
      for (auto &x : nlohmann::json::iterator_wrapper(j))\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
      for (auto &x : j.items())\n{\n    std::cout << x.key() << \":\" << x.value() << std::endl;\n}\n
    • Function friend std::ostream& operator>>(const basic_json&, std::ostream&) is deprecated since 3.0.0. Please use friend operator<<(std::ostream&, const basic_json&) instead.

      DeprecatedFuture-proof
      j >> std::cout;\n
      std::cout << j;\n
    • The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON to 1.

      DeprecatedFuture-proof
      #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1\n#include <nlohmann/json.hpp>\n
      #include <nlohmann/json.hpp>\n
    "},{"location":"integration/migration_guide/#replace-implicit-conversions","title":"Replace implicit conversions","text":"

    Implicit conversions via operator ValueType will be switched off by default in the next major release of the library.

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get, get_to, get_ref, or get_ptr.

    DeprecatedFuture-proofFuture-proof (alternative)
    nlohmann::json j = \"Hello, world!\";\nstd::string s = j;\n
    nlohmann::json j = \"Hello, world!\";\nauto s = j.template get<std::string>();\n
    nlohmann::json j = \"Hello, world!\";\nstd::string s;\nj.get_to(s);\n

    You can prepare existing code by already defining JSON_USE_IMPLICIT_CONVERSIONS to 0 and replace any implicit conversions with calls to get.

    "},{"location":"integration/migration_guide/#import-namespace-literals-for-udls","title":"Import namespace literals for UDLs","text":"

    The user-defined string literals operator\"\"_json and operator\"\"_json_pointer will be removed from the global namespace in the next major release of the library.

    DeprecatedFuture-proof
    nlohmann::json j = \"[1,2,3]\"_json;\n
    using namespace nlohmann::literals;\nnlohmann::json j = \"[1,2,3]\"_json;\n

    To prepare existing code, define JSON_USE_GLOBAL_UDLS to 0 and bring the string literals into scope where needed.

    "},{"location":"integration/migration_guide/#do-not-hard-code-the-complete-library-namespace","title":"Do not hard-code the complete library namespace","text":"

    The nlohmann namespace contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use nlohmann as namespace or, when the exact version and configuration is relevant, use macro NLOHMANN_JSON_NAMESPACE to denote the namespace.

    DangerousFuture-proofFuture-proof (alternative)
    void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(nlohmann::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p)\n{\n    j[\"age\"] = p.age;\n}\n
    "},{"location":"integration/migration_guide/#do-not-use-the-details-namespace","title":"Do not use the details namespace","text":"

    The details namespace is not part of the public API of the library and can change in any version without announcement. Do not rely on any function or type in the details namespace.

    "},{"location":"integration/package_managers/","title":"Package Managers","text":"

    Homebrew nlohmann-json Meson nlohmann_json Bazel nlohmann_json Conan nlohmann_json Spack nlohmann-json Hunter nlohmann_json vcpkg nlohmann-json cget nlohmann/json Swift Package Manager nlohmann/json NuGet nlohmann.json Conda nlohmann_json MacPorts nlohmann-json CPM.cmake gh:nlohmann/json xmake nlohmann_json

    "},{"location":"integration/package_managers/#running-example","title":"Running example","text":"

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n

    When executed, this program should create output similar to

    {\n    \"compiler\": {\n        \"c++\": \"201103\",\n        \"family\": \"gcc\",\n        \"version\": \"12.3.0\"\n    },\n    \"copyright\": \"(C) 2013-2022 Niels Lohmann\",\n    \"name\": \"JSON for Modern C++\",\n    \"platform\": \"apple\",\n    \"url\": \"https://github.com/nlohmann/json\",\n    \"version\": {\n        \"major\": 3,\n        \"minor\": 11,\n        \"patch\": 3,\n        \"string\": \"3.11.3\"\n    }\n}\n
    "},{"location":"integration/package_managers/#homebrew","title":"Homebrew","text":"

    Summary

    formula: nlohmann-json

    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json\n

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      brew install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#meson","title":"Meson","text":"

    Summary

    wrap: nlohmann_json

    • Availalbe versions: current version and select older versions (see WrapDB)
    • The package is update automatically from file meson.build.
    • File issues at the library issue tracker
    • Meson website

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

    meson wrap install nlohmann_json\n

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',\n  version: '1.0',\n  default_options: ['cpp_std=c++11']\n)\n\ndependency_json = dependency('nlohmann_json', required: true)\n\nexecutable('json_example',\n  sources: ['example.cpp'],\n  dependencies: [dependency_json],\n  install: true\n)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Use the Meson WrapDB to fetch the nlohmann/json wrap:

      mkdir subprojects\nmeson wrap install nlohmann_json\n
    3. Build:

      meson setup build\nmeson compile -C build\n
    "},{"location":"integration/package_managers/#bazel","title":"Bazel","text":"

    Summary

    use bazel_dep, git_override, or local_path_override

    • Any version, that is available via Bazel Central Registry
    • File issues at the library issue tracker
    • Bazel website

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(\n    name = \"main\",\n    srcs = [\"example.cpp\"],\n    deps = [\"@nlohmann_json//:json\"],\n)\n
      WORKSPACE
      bazel_dep(name = \"nlohmann_json\", version = \"3.11.3.bcr.1\")\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Build and run:

      bazel build //:main\nbazel run //:main\n
    "},{"location":"integration/package_managers/#conan","title":"Conan","text":"

    Summary

    recipe: nlohmann_json

    • Availalbe versions: current version and older versions (see Conan Center)
    • The package is update automatically via this recipe.
    • File issues at the Conan Center issue tracker
    • Conan website

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]\nnlohmann_json/3.11.3\n\n[generators]\nCMakeToolchain\nCMakeDeps\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Call Conan:

      conan install . --output-folder=build --build=missing\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=\"conan_toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n
    "},{"location":"integration/package_managers/#spack","title":"Spack","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version and older versions (see Spack package)
    • The package is updated with every release.
    • Maintainer: Axel Huebl
    • File issues at the Spack issue tracker
    • Spack website

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json\n

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the library:

      spack install nlohmann-json\n
    3. Load the environment for your Spack-installed packages:

      spack load nlohmann-json\n
    4. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)\ncmake --build build\n
    "},{"location":"integration/package_managers/#hunter","title":"Hunter","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current version and older versions (see Hunter package)
    • The package is updated with every release.
    • File issues at the Hunter issue tracker
    • Hunter website

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)\n

    Please see the Hunter project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\n\ninclude(\"cmake/HunterGate.cmake\")\nHunterGate(\n    URL \"https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz\"\n    SHA1 \"3319fe6a3b08090df7df98dee75134d68e2ef5a3\"\n)\n\nproject(json_example)\n\nhunter_add_package(nlohmann_json)\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Download required files

      mkdir cmake\nwget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake\n
    3. Build the project with CMake:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#vcpkg","title":"vcpkg","text":"

    Summary

    package: nlohmann-json

    • Availalbe versions: current version
    • The package is updated with every release.
    • File issues at the vcpkg issue tracker
    • vcpkg website

    If you are using vcpkg on your project for external dependencies, then you can install the nlohmann-json package with

    vcpkg install nlohmann-json\n

    and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install package:

      vcpkg install nlohmann-json\n
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#cget","title":"cget","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the cget issue tracker
    • cget website

    If you are using cget, you can install the latest master version with

    cget install nlohmann/json\n

    A specific version can be installed with cget install nlohmann/json@v3.11.3. Also, the multiple header version can be installed by adding the -DJSON_MultipleHeaders=ON flag (i.e., cget install nlohmann/json -DJSON_MultipleHeaders=ON).

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Initialize cget

      cget init\n
    3. Install the library

      cget install nlohmann/json\n
    4. Build

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake\ncmake --build build\n
    "},{"location":"integration/package_managers/#swift-package-manager","title":"Swift Package Manager","text":"

    Summary

    package: nlohmann/json

    • Availalbe versions: current version and older versions
    • The package is updated with every release.
    • File issues at the library issue tracker
    • Xcode documentation
    "},{"location":"integration/package_managers/#nuget","title":"NuGet","text":"

    Summary

    package: nlohmann.json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • Maintainer: Hani Kaabi
    • File issues at the maintainer's issue tracker
    • NuGet website

    If you are using NuGet, you can use the package nlohmann.json with

    dotnet add package nlohmann.json\n
    Example

    Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in \u201cSolution Explorer\u201d and select \u201cManage NuGet Packages\u2026\u201d

    Now you can click on \u201cBrowse\u201d tab and find the package you like to install.

    Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding \u201cnative\u201d and \u201cnativepackage\u201d tags to C++ NuGet packages to distinguish them, but even adding \u201cnative\u201d to search query would still show many .NET-only packages in the list.

    Nevertheless, after finding the package you want, click on \u201cInstall\u201d button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings.

    Note

    A few notes:

    • NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well)
    • One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (.lib, .dll and .pdb for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like \u201cv140\u201d or \u201cvc141\u201d in package name to clarify which VC++ compiler this package supports).
    • Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively.

    What happens behind the scenes

    After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI:

    1. A packages.config file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build).

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"nlohmann.json\" version=\"3.5.0\" targetFramework=\"native\" />\n</packages>\n
    2. A packages folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains json.hpp:

      Note

      This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear!

    3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package.

      The important bit for us here is line 170, which tells MSBuild to import settings from packages\\nlohmann.json.3.5.0\\build\\native\\nlohmann.json.targets file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain?

      For our header-only repository, the only setting we need is to add our include directory to the list of AdditionalIncludeDirectories:

      <?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <ItemDefinitionGroup>\n        <ClCompile>\n            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n        </ClCompile>\n    </ItemDefinitionGroup>\n</Project>\n

      For libraries with binary files, we will need to add .lib files to linker inputs and add settings to copy .dll and other redistributable files to output directory, if needed.

      There are other changes to the makefile as well:

      • Lines 165-167 add the packages.config as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn\u2019t affect build.

      • Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails.

      Note

      Changes to .vcxproj makefile should also be added to project source code repository.

    As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful.

    Please refer to this extensive description for more information.

    "},{"location":"integration/package_managers/#conda","title":"Conda","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the feedstock's issue tracker
    • Conda documentation

    If you are using conda, you can use the package nlohmann_json from conda-forge executing

    conda install -c conda-forge nlohmann_json\n
    Example
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Create and activate an anvironment \"json`:

      conda create -n json\nconda activate json\n
    3. Install the package:

      conda install -c conda-forge nlohmann_json\n
    4. Build the code:

      g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example\n
    "},{"location":"integration/package_managers/#msys2","title":"MSYS2","text":"

    If you are using MSYS2, you can use the mingw-w64-nlohmann-json package, type pacman -S mingw-w64-i686-nlohmann-json or pacman -S mingw-w64-x86_64-nlohmann-json for installation. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    "},{"location":"integration/package_managers/#macports","title":"MacPorts","text":"

    Summary

    port: nlohmann-json

    • Availalbe versions: current version
    • The port is updated with every release.
    • File issues at the MacPorts issue tracker
    • MacPorts website

    If you are using MacPorts, execute

    sudo port install nlohmann-json\n

    to install the nlohmann-json package.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found:

      c++ example.cpp -I/opt/local/include -std=c++11 -o example\n
    Example: CMake
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\nfind_package(nlohmann_json CONFIG REQUIRED)\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Install the package:

      sudo port install nlohmann-json\n
    3. Compile the code:

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#build2","title":"build2","text":"

    If you are using build2, you can use the nlohmann-json package from the public repository http://cppget.org or directly from the package's sources repository. In your project's manifest file, add depends: nlohmann-json (probably with some version constraints). If you are not familiar with using dependencies in build2, please read this introduction. Please file issues here if you experience problems with the packages.

    The package is updated automatically.

    bdep new -t exe -l c++\n
    "},{"location":"integration/package_managers/#cpmcmake","title":"CPM.cmake","text":"

    Summary

    package: gh:nlohmann/json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the CPM.cmake issue tracker
    • CPM.cmake website

    If you are using CPM.cmake, add the CPM.cmake script and the following snippet to your CMake project:

    CPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)\nproject(json_example)\n\ninclude(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake)\n\nCPMAddPackage(\"gh:nlohmann/json@3.11.3\")\n\nadd_executable(json_example example.cpp)\ntarget_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json)\n
    2. Download CPM.cmake

      mkdir -p cmake\nwget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake\n
    3. Build

      cmake -S . -B build\ncmake --build build\n
    "},{"location":"integration/package_managers/#xmake","title":"xmake","text":"

    Summary

    package: nlohmann_json

    • Availalbe versions: current and previous versions
    • The package is updated with every release.
    • File issues at the xmake issue tracker
    • xmake website
    Example
    1. Create the following files:

      example.cpp
      #include <nlohmann/json.hpp>\n#include <iostream>\n#include <iomanip>\n\nusing json = nlohmann::json;\n\nint main()\n{\n    std::cout << std::setw(4) << json::meta() << std::endl;\n}\n
      xmake.lua
      add_requires(\"nlohmann_json\")\n\nadd_rules(\"mode.debug\", \"mode.release\")\ntarget(\"xm\")\n    set_kind(\"binary\")\n    add_files(\"example.cpp\")\n    add_packages(\"nlohmann_json\")\n    set_languages(\"cxx11\")\n
    2. Build

      xmake\n
    3. Run

      xmake run\n
    "},{"location":"integration/package_managers/#other-package-managers","title":"Other package managers","text":"

    The library is also contained in many other package repositories:

    Package version overview

    "},{"location":"integration/package_managers/#buckaroo","title":"Buckaroo","text":"

    If you are using Buckaroo, you can install this library's module with buckaroo add github.com/buckaroo-pm/nlohmann-json. There is a demo repo here.

    Warning

    The module is outdated as the respective repository has not been updated in years.

    "},{"location":"integration/package_managers/#cocoapods","title":"CocoaPods","text":"

    If you are using CocoaPods, you can use the library by adding pod \"nlohmann_json\", '~>3.1.2' to your podfile (see an example). Please file issues here.

    Warning

    The module is outdated as the respective pod has not been updated in years.

    "},{"location":"integration/package_managers/#wsjcpp","title":"wsjcpp","text":"

    If you are using wsjcpp, you can use the command wsjcpp install \"https://github.com/nlohmann/json:develop\" to get the latest version. Note you can change the branch :develop to an existing tag or another branch.

    Warning

    The package manager is outdated as the respective repository has not been updated in years.

    "},{"location":"integration/pkg-config/","title":"Pkg-config","text":"

    If you are using bare Makefiles, you can use pkg-config to generate the include flags that point to where the library is installed:

    pkg-config nlohmann_json --cflags\n

    Users of the Meson build system will also be able to use a system-wide library, which will be found by pkg-config:

    json = dependency('nlohmann_json', required: true)\n
    "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index be0c66d50..f08934345 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,910 +2,942 @@ https://json.nlohmann.me/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/operator_gtgt/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/operator_literal_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/operator_literal_json_pointer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/operator_ltlt/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/ordered_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/ordered_map/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/adl_serializer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/adl_serializer/from_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/adl_serializer/to_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/accept/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/array/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/array_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/at/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/basic_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/begin/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/binary/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/binary_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/boolean_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/cbegin/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/cbor_tag_handler_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/cend/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/clear/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/contains/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/count/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/crbegin/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/crend/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/default_object_comparator_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/diff/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/dump/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/emplace/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/emplace_back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/empty/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/end/ - 2025-01-10 + 2025-01-17 + + + https://json.nlohmann.me/api/basic_json/end_pos/ + 2025-01-17 https://json.nlohmann.me/api/basic_json/erase/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/error_handler_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/exception/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/find/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/flatten/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/from_bjdata/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/from_bson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/from_cbor/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/from_msgpack/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/from_ubjson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/front/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get_allocator/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get_binary/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get_ptr/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get_ref/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/get_to/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/input_format_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/insert/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/invalid_iterator/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_array/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_binary/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_boolean/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_discarded/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_null/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_number/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_number_float/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_number_integer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_number_unsigned/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_object/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_primitive/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_string/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/is_structured/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/items/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/json_base_class_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/json_serializer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/max_size/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/merge_patch/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/meta/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/number_float_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/number_integer_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/number_unsigned_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/object/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/object_comparator_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/object_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator%2B%3D/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator%3D/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator%5B%5D/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_ValueType/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_eq/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_ge/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_gt/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_le/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_lt/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_ne/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_spaceship/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/operator_value_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/other_error/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/out_of_range/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/parse/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/parse_error/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/parse_event_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/parser_callback_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/patch/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/patch_inplace/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/push_back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/rbegin/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/rend/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/sax_parse/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/size/ - 2025-01-10 + 2025-01-17 + + + https://json.nlohmann.me/api/basic_json/start_pos/ + 2025-01-17 https://json.nlohmann.me/api/basic_json/std_hash/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/std_swap/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/string_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/swap/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_bjdata/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_bson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_cbor/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_msgpack/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_string/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/to_ubjson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/type/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/type_error/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/type_name/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/unflatten/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/update/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/value/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/value_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/basic_json/~basic_json/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/empty/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/json_pointer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/operator_eq/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/operator_ne/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/operator_slash/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/operator_slasheq/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/operator_string_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/parent_pointer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/pop_back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/push_back/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/string_t/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_pointer/to_string/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/binary/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/boolean/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/end_array/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/end_object/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/key/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/null/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/number_float/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/number_integer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/number_unsigned/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/parse_error/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/start_array/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/start_object/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/json_sax/string/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_assert/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_diagnostic_positions/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_diagnostics/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_disable_enum_serialization/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_has_cpp_11/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_has_filesystem/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_has_ranges/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_has_static_rtti/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_has_three_way_comparison/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_no_io/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_noexception/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_skip_library_version_check/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_skip_unsupported_compiler_check/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_throw_user/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_use_global_udls/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_use_implicit_conversions/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/json_use_legacy_discarded_value_comparison/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_json_namespace/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_begin/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_json_namespace_no_version/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_json_serialize_enum/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/api/macros/nlohmann_json_version_major/ - 2025-01-10 + 2025-01-17 + + + https://json.nlohmann.me/community/ + 2025-01-17 + + + https://json.nlohmann.me/community/code_of_conduct/ + 2025-01-17 + + + https://json.nlohmann.me/community/contribution_guidelines/ + 2025-01-17 + + + https://json.nlohmann.me/community/governance/ + 2025-01-17 + + + https://json.nlohmann.me/community/quality_assurance/ + 2025-01-17 + + + https://json.nlohmann.me/community/security_policy/ + 2025-01-17 https://json.nlohmann.me/features/arbitrary_types/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/assertions/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_values/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/comments/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/enum_conversion/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/iterators/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/json_patch/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/json_pointer/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/macros/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/merge_patch/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/namespace/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/object_order/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/bjdata/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/bson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/cbor/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/messagepack/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/binary_formats/ubjson/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/element_access/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/element_access/checked_access/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/element_access/default_value/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/element_access/unchecked_access/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/parsing/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/parsing/json_lines/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/parsing/parse_exceptions/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/parsing/parser_callbacks/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/parsing/sax_interface/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/types/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/features/types/number_handling/ - 2025-01-10 + 2025-01-17 - https://json.nlohmann.me/home/code_of_conduct/ - 2025-01-10 + https://json.nlohmann.me/home/architecture/ + 2025-01-17 https://json.nlohmann.me/home/customers/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/design_goals/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/exceptions/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/faq/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/license/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/releases/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/home/sponsors/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/integration/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/integration/cmake/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/integration/migration_guide/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/integration/package_managers/ - 2025-01-10 + 2025-01-17 https://json.nlohmann.me/integration/pkg-config/ - 2025-01-10 + 2025-01-17 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index b2c7de9d02402e4663fa5c0feaa531232b74cab5..f43f11e3d9829c9637e83d05123a33baa7a00b2c 100644 GIT binary patch literal 1726 zcmb2|=HO_U+nLVvzc{lbH8-(9uOc^x;p*J;d3VeNj=itsI_%K*?UrWKw#LT{ju+KE zs#P_zR4y*_Xmh@KPwv+n)t#UI6}}R2WvpAH|2p>euR5ib56={M+^?ycb@nDR>$P)r zHv9MOv9ecQ9kc%JkB@)0>+g^IQ}XZSx3g!3c!F)b_vie4{8MD{{|z^7?Cjz;^_h5| zpRU&<9Tr@5c=p%BXRkgz|9pG?xl7^u4!qm_sWf@cuCw6}OJ-V^eY+%Oe)iI>(=*M? zXa9Np`2IAR^y~Nc?XLR%@6oGYkA5BhqWwC3_v!p^*Z+rmU3&c~G1c?A=7|?g5|1SU zZ>g0AO>k3q|9^&K#q!)L?&Qv8Rq-wJn7&TXi&*+OIVwEzo0|cvZtuUvRr&h`E;8BI#qc;X)a3wK3_Ao!svm%w{&FJmKI` zyg8pOhPmog<07}J*UfHyM-HBl;H>;@8Gh;RS0gVI7LyEZj+@zR%4ck&Efd-(@gl@2?StSQjz%^ehZ2k0+`mFc9~{zAz7*&oXu`VUU$e_H8y0hRe4l@RUw(u0AHB0q@!RG}B`jRe>(HaS<;aZ#pS66rbrYj9IBz?7 zZniNpK9)x`!XR{U0#NmBh+!ThsS+GJ~{6&Zd^dJc7|jk8Bj5{Djl{K>sCW z<VU%n2L6%ggSm(ol9-9V*1Itw@9M!0R?4=Biv}#Rc5cl}sK^yn0ctIB`P}o7v%{ zhpAJ${mle#u&DO2omN&qYF{YLxP9W0U9Z(!bNa3Pnx^w5O6+s~^nZa)^>(QzUViz_ zAwC;jwKxPnyyz6pbm)5EBERwUbCv~D`wpyS{cGE{RL$VVmHzwtoiBMjZ)o}@ETQl0 zXJ!83Ma6U0TYU>ZtyLG$<>3yQu~$2IvcE>8$I+jTvOzifrl0>ED(L!OongYO<+cZH z59Y}Q#Mdw3U7cNjvOzPm-ji`v+Wq7QVN1Vr?4ByW!uEz@f-X~v)SRVUSEt_zyIAym z5~K9PKE^6t_tzF#Q^n;=@9jD7`yfFxqD<{(Ys%7ZNB;;FY&d8baxO^o{n4+c5=j@@ zDo#&KGw{${k!0YqY3|R5oQ7Ejo^zNcR!q6QbxDkI$(|_nEzPeM_bFR0dr+kIm}>G3ZTN+-K7?(mb^_@(Wj zO4T<3cgZ*gG^W1r+J9EmV1{SJhJ1(JRc(qofE z^!nVtPy16E*z(I?$e23>)HWYptzG~0gho-Y$S@ZK1FIi|~ z-~A`Pe1^1whNa`H+l*Cq&HKwj|76>AA2kn*JF#we-LKw~Lj5fFiu(a;w11snS#NVX zalZK!)%P28=iO)cL!T$B?wJ`4EU!qK(XdbeC z`by5wDsxq~vyMZc+>`6KCb?;Eim6R#H4*e$_Dc7RU1|1Rfqhd>x85>UIKC=t+IN;q z^S=JNtJllD=)^+DE&-QckyVYQ`}fQ1Publ3kAJd9Wn$O%dd8R88zt{lGB5xDlQcPW literal 1645 zcmb2|=HOsRZb)bPUz}NznwwalSCN~;aCPqOJZW=*w)dY!+8SeSZ3IYRiq;m1WLfYF}Gpb^pkV`na{*Zoggn;)HPJ z&XU9!&+VT6DO>mK*tP4=%Rk@lM*cb}e&c^=U0%=Yyw9O3vCsVG?A>xKS8da`qDNQH zYVEK6lR3#^=f7`-nz#5BGXfTDfu4lFu?4yA~X?aGSEt zbE?P*jVFKQjWynH@%2yCxfrs(`$F*pxggf=l6T8Wr>->jvdA#{)&FYiU#A+5Jf|uD zxO-j*2xJT0ZERin`iA?0I*u*Or?sE_W!`%I%3bBFAJ^8OUF>!$+dHxSn!DNmt;KC8 zl?1H{lwVvs`MuL*74OY^1r5_!Z_BNiH_M6Pl(n>Hw4=}&vB=+ycSV`D{QYWkA!kw1 zYwLH5Ufp?;DL;!rd+GJV3?cK?`-7jKlzt__w_wA(phX=H`i!^KEhi{QJ8-Q0ZEj%n zIl1q$$)!j+lTC^|ZAmFl-acR1^)=Ri;st>VGgd03EEnxDIQe2>+RlJ8udPdR6=IJ~ z-1w-==U4xm#fgR&Cf1~V5RBnyWY=*hv8c`cD|7Y1As4}y8cP_aF^Bwb?0FX&8PW93 zTbIjb_Z*H3ZHmfop5Iu&vv*pb(|Ow|ht3^qU|eR}&L(grL8j>CLrE2V%l_OcCv#l; z#qPL$pX?vNBL8K{;<^Nl)*}nvcDT*hZNZ)~xxQ4=;U@+ z5VqCwVJIt z*B&qRAcN`AvP4-I)BzOc5G~&Bq9A`{i!VhLd#kwZP1<4Qt>Ln z?3Vd~PZQR%l>~Ioev&(dHAvxz%v9+Rg>Dn6lP3kX*z8gh>tNp&5WYNtSw7$iF*n^>jS3Mdh-^kF5m8`_3(z0XbVTh zn?s!@3U>Av-QN^gGG;7QD&RJ(?@!#x$z%BS@pp3%sg*JT0rgCeHJ?b{XWP|R9=GtV zMAoLyEQ?yx8o4%qw@mudF{yP)wf$;mqrLo}a;iO!{pDm(`TD}4;QWT!>?+&kGY?NX z6>pUA>12FRL(oZni5;pBnVVd=1he_SaYS@8NV2KFY7*|r*jX%eKyOQOL)_(zxh{8A z=ev~Lv()!}kf7OeP3>lD%2K|WUsx@$&=>!0U1d8yf(ZCTS^^}RH7nH0XbFxx2WU2lWumnXgNO71O9oX*zb zW@Hnzz53poJt{XBojrH?^s48M(SH1n_D^{2zKZL_DQc~LsriX(^OgH%zr-f{n%?HR zey{5C5!K#3ni8!iCj4PvVscI|Z6WKr!}~5jvf1wN#pH!wNx10=`5B+4Wkd!>ypA~b z|ISsGrhr3dPAMOEthKb;&LbqyU}E5#qwKQ#$b|FG=1dP?c1WK1`+mB$*76_w1J>_* zQFdXy-N7$wcy9ixo8aDapZ#O1dg0Gk919NKmM>D}6$m;1vQE^+K22mBrJ!+HL9-}_?ZwLzZ*O%TSpV^iSiDQ++jZ|I zT`a$JbgzMCSDV;@O&vc?Zg-|v-V5hSJ!$=`>$!QuAAyKH+r{Iq-8jASPO0^&V@u=b zzP8M_@;~TrA08WV@AP@0%gI+)Ea&(>r&#LBixVN&+awwn*<9FuYm!@e&gys9bvG&Y zwyMPJZ8^F;YpwLr=_(5Ys-OOj*gE^gJjYv;g|DliH^c|KSSbVOOfdK$Ur7`ya
  • T5;dZmr<{)ZoZZv@`xn7w`h+txD<8xFs3{vE)Aw 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 z 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⪼JzArTYx82;bZ{8XYqOUl_zjm2AC1&;fN143eW7Tdg+xnC1@Fe$J zj8`1Ye$2mgyMOt~y{#^X+>-KbLOHE~Xi60CcNLrI zd?@qly$3OK=LkprKFPiHuyaFaOiLw$?j|;Ye!;NY(Fa#qYR5SG9Q(gWZ9|Oj37su1 z2Sttqgvc1`JPkW^$>U6n`kyb+1=9;=t~qk@%|??3SL2`w*EamQ%k_Oj=Gk_=KZ0jm zvV%H$dreEUt_Jgj+`j%SS^VFP8WkILsp+qjy)|Rc9zQ0$*26$>ukYI}KevUmE)AS5 z`dxhgkJiL*r%ugjs`>e9c8jxXy71!guR#G;)tu*ktxI_Sto`p|*I6G^pZ#1qJ^omD zWw-!yTypeJ?Rdivx$&=ee-fXk@oWCPqff*?hdX|(3cg@*;mzu4tkUbYCdId0xZ7YW zyhP>Lqc+FR9|f=L>hh0G>YdHQT=DXlZpIRULm63;e6lm17ll)O+$1W!%$vH+JS~{#v^) zk)!)<{|3qO1vL*sLh64gn_OSx>hPkH!{&ogm$<*ntDW~-?Q1tS|9eo$)Uvws*8Z)b zYHP!OpL0siU7EP$VE?n?zcS1Z z6_kq(Zavi|w&apjDBsNX-Z$4vMSCmuFOf3L*7)JgxHYlRQDUl8r_V3zxAMAH?g~s6 z*KRZSzqIuKFWAts{POg|%?`(_S&dhJhOypXN`dA8J5}X57)Wx6+I)>v3l+D zf)mF}m?z3RcXKFu{>Ig-`s)OI_T9@+c*z6#H|b8EJcvWCj4+6aMn+_x-$Imxs1S+i`p$$4-~ z$E*oCp7C89wf7f@#}qUgDr;`m1KsOU*qkZl%3`~8qsJ~Y=I#~R{(HCoJpGC zGG%|$Bd*3fj`I4(X=e=fPrbJ6dTe1;alqdzb+R&Y3zto;S;r$|aX}^`XYbtJFGm#j ztxB#A2-&+eX#4lG*J8h)yHvisUguImt^W-pA6uKJH_GSUwO-|a+vL^+-#cZ;E*#yb%u{@B3`L4zwc}R zj4DTsx*u2mJ7>1o|NHgPxk^@p4LoQ_P~@vzKXX~&&jOG{@% zg<6Jby8oCy-;eLnKEF#OaU$o8@9X(LoS!~D`NM}giD{z#FEh8#EWg9qx8R(Ylf{RI zCk#$+uNR+Zu{L|VZ~FA<=`8bZMZ50`R$eN;(e2V-qm|l=BErI^U0lPXd{CkJh`eBp z&c_o%$NIM2d3R;w>O%9p^{$1IzBR8Bo=R@2Nhmx9jgQO`)Js3UO(Cb5<&VpcDV+|z zwnqa6;#Pjx`@WX{;>9m7eGV-t*uC!pd*fwJCbsvsozgkiI}e*WdM{1e*X=U*%@2u? z2|HBRvgv-PJGbb}(!kI6Bju;eKYM%GRcqlHYSYsGKH9NPV@B!?o4IlIHVMinGMpx` zee?R`^|AjIYsLCmv#v3Adhn_gpRwoqxX{opxU3#Tq^}%<`lHO!2{M|3c#Wz!`WWqoIwUygo^j^8lZXQq@>c<_NqPIIm6XDyh0kHhZLl8c-7S-vlMepH=Ebl*u`%6E8&ru6= zt3&>;V|i_t{PfgRc2{w|tC0dZuJJy>3=bl&^)Y26D zx%Tm#6VIdO>57EBPMDYdxASn8Ov}V)md51@^WwJ3CckWZuvvF^0q53|>G{tVwrrR` zO{~A?N}bx;e7+ z+VV?zde4J55x*9yG6yW{NIt|Q;MgsgxFs#Mg*)fJVAZodl@c0O$qUYUJh-`OVr+o# zE-z75cCXdanM^yytiA3;#J@VWYLVBPbx-#>Hn!-f^(M|%n{fTwk*fFV!R6eno7ef3 zJ$@CadE&IsGl`OGSyw$?moo2Puk?7wq*81BRgKry|EkWqxlFEoJsy-M6plI(s|5S@(9CLhcs<Z=Fh%1YNp8j8rRS%vNi%8B9^877vV7ZI=Jel4LNvSipDn00Y zp`H?wR=s4cqUMqEdzHrpW-fjDO5s*te!L*l)(5YG?7nTg?x1ZmhE%>!kH|ftWHpTv5Ws5lNt>%bKtk4e5<61RYCA3s?#k;u& zcPv@Lvg=BJ*Ye#ecBXN=gmV6QY4_&;{CAPj@vrt<6VGp2H!9js2RkvZ>R(cpduv-} zPF&V*zRGRy%;x=aYgaS$vf?u1zZ(54IyEhnUG{2p?)0C^PZuhfEZ7^UrI`@FdB(m< zt+~hc`6OrVo4d}@An-*Fj~t6M(=DYlv3|t?Y_k716kjusFWYbaW8e3EIiD}Y$>lEk za=?H2rB(S8KBhl02;%p?``YR3lwywn11+uW4UZRx?s)w#Qlj>1iH^>Vj<>AQ0#ZVq zXG=wI?0djGXQm;?V)tG*zeurX^&2PnJjn2ovt|`Ns#@{oySCuZ zo1Ip7>O7TwbxyB|S{&|l|2E%w8`Es&&Bc7_RV%w&B7RLi=f~-GZJNWCkm-qU7_vf4 zJ&o@sA37s*F6wyuv3ce1X78E0xq15zj_FdiZ@4nmg^pXGB^9Jj-mtLul zyt;#Vbu`zGXF_|nvTV4MB5+ObROIg1-aWGncc`+KvmRGc)N!+x_^$Z=Sc~CBXMwRa>`ZFow)r?4$ zk28N~6>v*x{kgTRo?ml8v-sMrZxx*Q_lwnRcH=dgE>ZBUC;z+c!!+NNm}xe@l~%?7 z6#sKd`@)lDoiEs`*q3RZOM9f>Tel_0SpMDaX5|Gfxw2qSh`(X3YxE00 zi`Q#5^Z2@SF&yfi(w`xF=~?K7_urao^?UEO*Z<9K37#Ep!g$rUggMhkUN7U#&0XGs z$#-@XMr_NOx$)VjYti|M|Ni`BQ~!L{y<}(hx}9vsX=e`n`1p9Q*pD2$eTAX!-0277 zqpp|VuQeCbiAWG}xmWxBuJfnxD$YHpm@Xda6h6Co&7aDbs&Wy(rxh=nmwP@U_-yE! zXoFVkvyv_6xr}bh`1jf@I&{NvN&UMf{f$-jH*I2)mp@67{(Syb`PXQH!Y2}z+j1V= zQDHu7G|iIZ%#DCKg_g{X{QHiyd{C&_P$!?add0#8DFSwPHZVJ%RPf>XdicVclHhG? z=l{HTPyYOkNf$gTy!h@|hA*u8xi*8#lKmg=?Gp@o&IwLhe~q3n{kCh?){sAYboNfU zLjP}xFRC_&%?`c(D{IH;eJ;fgOn+WaS1_oYAo%K0g2C-(X34cL&rLS}tNH0cPqpbX z)|)3U?oc-r5`U|GJUW~2!TV_Kz@xUhGntionD**%iL_sspJ^}mZ`Ka}X`5c(zZKe? z^o#G?^Y1BKEGq2g$}?xJ_$S?O)5|7kV0POnHeWhO$0vOV?z3ZM*qKeO{mV zj@c(pOkv&1W>mF$XZe(?I|7}`nU8MeP0?dZus83mE&Y1KciFo*qs7h^?}TQCOBhT0 z&Z});)0+QNsB(wLk)m5p>$6W6|FE1P!h;pM+y&n#z+pD)p# zG0Q1Gzt^C%`a{3YWlssOf?Ix{ugn*nBD~G!eDDq3lcC+Gg;Z7?nCL0t6~BE_^4`v< z+b@?y*KTUM7W}C_AYff-+E%-*W{dU)<~}kE)^2$B-oH)v^}+*78yi2*^KUiT{P$#= zZOLWFhtJ!xmh4_-XyNx^d55^Mm|Uo5m1C^8Mw@{Bzl5iHKJ%yaYpk;leIu`Vq)jvW z63>zYf)|4N6FDDRWS@%o^YUl^#IuDVK5pA*SG%qdTN)?8qQBd}WVzL{ne$B7Sih`N zdeq&Te@e;>`Pso zIWzZ66IlEGThKkOUu*vyO$fWUOQm&3%1NQcM^%i?xTZ0#sg7PYxATJc{~O;{R#k;< z$The3J0RaZ!AmMct)`}#kL!AT{a(Z4OYHLV7jAy9vbOp#ulWzPlQBG z%3k~J--gN;|2`g0R=ej@Ciw!gGvOO)Tf z`=-~He*N;OTmRQSyC*-tUXO3*+c9_R-w7_uFK}DOS2<6vdA{bCbLs26zcrsN5_3QK zc*)vb%8W{LbYy*0apJ|l$g?Ls(m1AuJ)AVBo{ZR5r};>E zv0?R{6fZp{=hGQQD-yKD-rnw)j_ zU-j<&j}OAL`s8lSPg@$Z;;G^>orP@zm0tuxxTP%mCyHOw+VUuJalhU7!_OCdJt}0! zC;$6IQpTFBvq2jkU%mIX`u?1^=J(5O|G#NhjJ(*cyKU1hPGR>g31>E>>BKv0K8fV~ z;(GJuy33W*w6~ciAD$<0Mo#*i?XL@4_kX^!HvWEWSl8xa=MC#m@z3mZlu+0lq@H=9 z;)28^gGmK;Z@YyGHc9EYy1G7#+%fNc#OK^~_qg+g_0;e9oi{t7veWmr_BHqDjr*$k zof|%fRiB*be_w9hdqI)wj<;_`xA!Z2pRCqdro55GIB9WURD27U(Y_@!SAD-^5}L7_ z*Lpvz!#ejrg5Ha&bviS|_}pG_=fJ^AkHZ(gnWX2utz2RGc_F0NWXYucU<<{|e! z%V$`XiwQp05UO|Xls31L+NW}0ve2Q^xh57E`OcxiD-zP3v4W0}m@(D{8C%x3=4>A!csy<0c^!JKv9nr>x3-ugH1 zKEI?9%dS3?8#N)*9;7_{)tg^)nB%=?chqCAk1XB~Gpr{6xTL!)$p5I|=9p6oyYhCw zHOv3EsQkt5jHaZP*FllHayF#i_;u^M`lod}S8WZrwsMYZcW#QbkHQ|2OTSbf@A(o^ zvoG8Hk%iv;xD7lHQxsSY?yXR4_K|tI_`#!}7ES5<#11t#&uCh1Q(e`RTkaR7m3GX1 zQ5Vmi?cc)^{R<^ox5ifF`Ws%q!WJ{ze8<)Q>zDJXaUZ(Q60EyCZ{C`{+Bps`I!qBu zX0*L)@K~pB<9}I;WzzA3>px`vU_I;Pd@+56?#<>CPkhWGpXavwt===|zR0gT+eLYo zu2)uQ`Ph6+VbOn%;3>@dQ`f5ZyZ5`G;I7Z1$shWetJc0;RD0o1v6l{;>hTAE z5|{qSDK@-!`)-e`3G3VwUrpxu)SojrJVQj;yfJeU6Q}&4>lvKE7TNl`i)-(R_#Bj9 z_g#0>Vn;{8WgO{_5AUo$e1li9Ms5F%Goe%OpYYw#_BxUG`Fe>u-Y0UWBwaWjcL_@R zwJpxkVf{Jz<>~UjCtQ|@G`$r5+Go~lbScDagWcZ~p?kX4O<0zGG%2J?M{<8({uULN zIJRM?)}P1jxz9yeRewAy=AI}g*tgw$`lG5WxAch%*T<9;vTf++)Q+8Z;n$Nj{D%^b z>~IyRU2uJ;fOE)6U&R7_n;Yi?O;+nFD`amIPY#R}{-k_ohS2?{{Md5E`;&R~U#Avw z-dPJf3*d}$Lviihdt7%u|MtJ2ufkPaF7o(TEc=A{Q+u}VKJ{U}>+HgBEe9nISh)o` zIB0|z=EknSxr=}27el?tcTbl1iZ3Z`3;ncq_1b#>d!}_FJr52Q>fGqN{H<$4X~yrf z-}?XFyZC};FnkGJ{tx1TKDaVq#_ z?d4w~Tf^;dZTq&(>sG6Od(+Fy%cVEp?zjJEVfW{QbMcK`uh;F~a;Y>TclN(I#pev` zdY5u)YhKv@_iaAt#DRt1-^w04bL>dX*SF>Sf6JCg1PT~OsU2H-^7rZZf0sNa?fY`c z`^RJX{}~B^dX{`~pu`)!psKADEq`>wnr|K|a_ zTGy-jlP4!1TVEsf@8|h?wM!R@IEwF@+aHV(I&U>4_tut^2F;=Cd~&n)aj+@v(!R0l z*D`zAdDHdd^R5ZZ+#EVT%Hl?y!HU*&pBJ;=)*n1}>|^aW-~9cz%lG|!Jy+H_s`$$N z)6>>F+-flS7CEUr=Y~zm_VZ@;zx|$S^Ji{5y=1S-m8a)Df8PEYP*|mPIdSp6g?zK0S5Xcc>#*Q;L{q&pc+5_;_G!act)cy3I*-w_FG zF@Z-DUK(WN%`|i`&M5s7J!P_Mka?%}`M=5H=Vavj_b4X%XxCfLeJ{R^VXEsFrpS}M z$8;utD!Zg5E<4py>lPo6|KF0wGv^)Tx9+|(!+(FkPsv1yd2(HcLa!WNbY)%B*V!p` zTRtzJoV#uA4cp(R)@9yOZ-)PG9S_W6w%Zj`m6+wnt1FtD-f>Nub#MOeGc)*?-;m!Lm^*c9*P9(0 zYi_yMPs!Q2{jHst_?uhGL35N$gkMfjZJpxrYx>iFcg3cuv#;2rYy0eK=s7+9fHSjv zIBs5^5cgW>;mv-g(pxtVc^duOP^RiOjsM7jh~xFk6V}yt%@(~WpC117@%ydZ0?tL7 zW}JS@dg}ko1+$AMPVjxS{iglTL*I9IEaiLm;_~yisZ~45=lGmWnZtIXr$V1=ZSu4Y z-*VoR)vvi5-?FMw{!slj6Qjb{nVCltnSM_Eu-^Mtl@Y6^{VXG`%o%!zl8-nkT;ATA z7q;Z*+}NF*lR*D)s@+MOojW>?qt1@V@~mUx?OzN>~i;?8t>OVDc$liS2|?cr%S3a-su6c zVad0SZ7vs{Ztt?=y_fCnXZpL^)*X%v3bypRJ=G}ZZq=*2@RwCtk2W`@^|8KMa9}~c z)#3KbXU?xljQsKW7}FA#;5BUWIv#bQM0ovhbNzf7FcAC*J%{@#g%?xI6HgOhZLc{^6JZEhqfF=`!cMf41%K z8H+aGY0X?UJ8H3BUf-|lJ~w_}7HYA7>|x`VaP_F}p)Zqj+UW(=^Z8S zASvx0jbp0G#WOS;e+3ptHaUM;eeUnV8Ir9F|&KAs1$C?Z5pbU7Op`P)lU@>2HZ= z9yEU0|0W{!%i3^m$<>Qb?y+~c`ldgNY2(DY?VE*)Ig7VVuNCl>F`dCv(!H4b@`W=( zHD7f!*gx`5-LrD5Z0GU+JLmA+O{lvbp8i*7(S^@*H*fMtKX>#|Xsd+0WY1mGr!x$8 z*t4l!+OPjuQ~v98CkHnpwTtCHJ~ahR3F^r|y6tZpqfeY!ozZ@V{n2~blW&GQXL`k~ zGdJI`@%H!7OS>B6Z*LSAcJnLHNZqtR%{S3M*5{e+pW}U;yU)q5f0S$a_UZkL=F#fE z@2-peR(^ZWoAT4ECn*H`x7o23_&e=hufxpf%VrpV^vu+j`4i*}b4yRYIemTKH`B#C zHFZ7q3N!m>nnd1;n`XGC=dJlt!OIamLU*6~ziZ~VGk9ir`O+mH*)?VxIeK^f>S$%t zasPY#P+-el(3v3zLeF1X^!NAu|9!95?LIf7IV^tbc8yi~B1c~QeOJCeTO!rywem}U z!LIbPvr>!Q0OkZ^>;w>t8DRx%|Qc$BJ(^(|a|Q&+@Yh?nq_xj5;l~ z-K;l1PRo0i|F_v&CNAaGx$*x^y8Y*EhnH=9yK%q&)7`FZTh8tIbV~bJ$qI=BWouTw z6_aDjd~_pl!v+)kAIFbf%>S)(YcS`_GAwFc;@ncSDT5Cwd)G(uf4zD zD!Y5z<7Y3Q&$xWX{@Fj##$Ll6Zzol6tPdBg`*uM-V8e2u!|dwK*WPFRI_Io#`QWh^ zjxv#^x4m8GDc*4{ol$YJ;K(rn!S6k--yX^JmrI2kF|I9Kv`N%t-j|&E+t0t%m47+6 z@B7*FDeorl|C{@H`h%$~ekRMlo-2QIYlm&+cc0gMT_w-<*dKS{_RTR3vQp62l`xN= z*<^07bC~THzg>2bPSWBzjk+^d*~)J9JR;H>(v|kx*k10Xg?hz-Vlj!&XTSF+W$SJX zT3c$9t{WBJbJyg3$-x;CN8GLV<(7JENws?2m#?ROe)FvbhKk1LHsyS@|Nq(E&DrHl z{M*9V*wZ56ERL_m&qv9>D{1WKA-1XYPI9X$lnDncR{+l(sqVnE%l>f=f zy`VDRZJTWRx$^#Prks6B{MRm-Ji0B~{qbu@$}EegGh5%!k>Yw+H$!ZC|JLg5$=Q$N zth5An?#f+f$66)V>(=u;a^u^4^`*<>`RAWqDEYbfSY!9sRm*-JTe&WA#)b3AeBXaG zZoOM2bMo{vHKCuGPE(VX9*I7&MU{tzEwia`@>hd~vjyfGuE!+kD7K|Y2$(;N<%xeg zv+Mq>w!#xU=IeQSa^%aFPpd207}R;J@h3-L*&T-%!+)%+ z4dyucac_UqGJDqFM-S)83U^LSNzvSL&U>v~-HJQ^S|hCwU3NPly5e)YpN!vx3m!*5 zT@TzpH)@|?^2Lz9d@+aLI~bTYi7K%@S(ta=ZiZ%!WZlBY0sG$_*XVuKenas2VSNX+ z;<cx?}>gve*K(O9{0JsWeR^zcWSz__ST_Q{XrjiTn~R~Gzqz{^qMVevuu6T zHj(27Iy-lpPdd2HJWHike)Y4mnp+=N*;E&A_`0R`Mt}N&&+fbjA`kz1_^Vbl!qfNM zRg;;2B-b|UFY~`Al6NHV3Qu3c?4u4>B)7CacAxIIz<0`wNeWB$x6JlfuyATp{)KnC zb57hmz19AQ^QYfU#SI_Q>l9Y-3h(Ufskj(;it~SxQ62m4SB84KSa)^`O3apPchsC% zGWW`=&h@z-&ap3lUXNb(Iic$8o4xnt=QmxP*?G*XBe!_=3EO|cTQBbs+7p(id+77& z?TYG39E@K@C5$xgUUAQxE3>wY*+6ANW7V+*88y$}Pif#Nf7sg}o^a_zPD|j1#VZ$z z-PYXTdbL{1r8Ps`>`-ab-gDo$glwz=;yRnW%$+>1-*u2`*s^2k%Cmfl)BfEEEMPF7 zKd~kEclO5{ho(wM$ThAy#e71#s_o?Bi$}!6j@GZKH`)5>IFHvN)5fnIoqUIiKTm(W zXXRl5(K9}?R|~|-H|b|O{pr=sVPv)_VE@WR zitt_HGlF7I|Tto-!E`N7i4eYL;K{ydidZ(ze8zppX=_IdGH`P$9*bEEE;e~X@-viy&~brQ?#)B5}GoT*(a zcsoA9)P0Ix`zNIQXJ*jOSJ6LhE?Kko=1*O_)vqVF+2O<9-0htubN=7Rv{bQX4qm3Z zxWO#tkR^M?zPDu@OP;*EHuva{YhNopByDW$*j*oH4GzuX_$C1x$& zf1KIMcfYGAPJPtAQ8`FJ@?KR{*lm+}Z)5_#zL}`l!Tu?s zSZrJVoKv%7kA8N4`6aZPwe{1+tZdC|?^hnb@Pr}8*jY?E<6U=YVPTH!obJijPyV|8 zt~dEukKw+D|9)NHKdaRL^~|QU6^(276Q;U-*!FvN-D`nmU*GS1KF>KU?3$x*RFU5~4KSFC;Qc>U7NuOTdQ{;PLQ`ykSv`f!q{eDkTl zOIIv%WxsttYFTc))rV(MPKTDoXe>KgQS)EO?l`lt#nuD&xD?wH-rTlIw`rT;v1du4 z^e6A@$wiku+zQ-Q^-4Miw_H|oOLG1h*D~wehWM!WZ};cv?tc5-`Sqn);m`eLnC~R7 zmd>7de@0{WrSr}?En6~NUgYSm|7=tBZ}nY!XJMg+lUt^Idy)UpDw%7h;gOzBeGQ8p zo#k8;e)#V>796_u>^k|b+{ae)Tkm%$9?)0Q7H)pOi;sWl2mU3gi?+@d{Pne4z(;8- zXPJ=I{;EIgTci8MYkIifx+SYV1efx2ilG~couG&i~uUsqPap%|P zv#f0&@A!PLDn8cZw&*zfR?XX+J$J3{4*d8pHe+2}kCagn^Q2>kT(kN9C3$_0zI?8A zg>J>n{hA*4H*kFQyuLX8pJiHU#=?M3?Fq~FtKaLqw6nfNzIN#@rX6;=f6TnL*SPS; z8@W0uKMap{I`+Og=4m>A+2SrRd75{E$AN2>$upn2CwyM)FkQR5FV)`h zr1jIDWQ8<^h37ZbJvcSD`AB1Oz{aP-S44ANU5;5?nexWD#LbRx&2ItEWPSCs*OQBG zGatTJw>kNc$@HnbYKQA@G*}d0y|#O0@2v*i->Wy|`Ll*izmn)2DqObX<@4!2`y-g# z>`GOW6)v@`DfuB8zbWXG=#@DN2h;yP(!Bgeur5W&{8Q_iC7B+fAH79+Jx(uj;Y#LH zdt4w;d!KKq>sCikMF|1vBgPx~cFnUho_lQm8Rw^EB3I1bT2K7qS?i|PDkq`CcRg^H zTy1{ajLQwvPHEX#SRTE=BDCnYa{6Tl-Jkm*!_R!v&&EW$T{0Bvx5D7iwqlHemB>)LoD>1$st z@eX}t$S)-v^*Tk&aa=CUt~6!rsI31oad+A>ZGpK6jPn?~0t9~F-c`@?fFC$-S$OGNy4=A;*0?^7fXEV`X{d)rxqhTNZ8 zr>^;aNnO1|@mKrP`ifP>ck=x5<+i{1ZS=0$;kUqs$$pbPCNFradingNUn0u>XRHh} zQ-UfEG%&V3OjKW-`XI|mo8MQjcJjB05=!3F^-QIvUNRE=>{fW>$JR6PORuK{*Zw+m z(b?fc=!7plKDy#!Vvicxy=KINcweAa8K?p{r!I~Wn^p3m;d*nU2X5L_`h#< zH_YOnXKy5~tNZZG8K1)}7qgFU?OrJsW_WK&@1Bf{N}CpnfKc94E&;NhFmoYU>Y|59;-B*==`PI(c4}a4xzsQ?Eb4Tu^ z%dfU4torK0(>yzG*U1R!2??Du(zyQrod2Km=Z1fey7kY@`1|ks{`@oj|DT!fH{?m| z^;DFL3Qw67of!U5PegV>XBgL7n?D~8r=9utd;kC4hOzo-YmUu3bME!-mdItkv(rp2 z|9@=1uiyIp9_D_#U;B?aHGbOlY*uzpgV+CmD`oblOZOI>RqUiEB> zel+{}`yXc($-3dd;`})N*=N-o7cSeb-MGAP+6;m2*?Lmlx8K*ZFaG=}&@=bJJN9*o zBKExe-G_IrWz|@(cc^D#vf+|dBHY*49{P01H)8X80q4b!4K1zP_w{OhxUu=XqJE}E z-tI4aYod2@ez*P2vQ($pAgM^|mBu=)lP@0gPF7g;KTmh{(WmMB2Ts_?B~=@6e0#;L zxP?pV^*+b@Z+j6Xa0vROVYUNl=|ZGAw< zy#`+E)f;m2b&Z5#cjP3^nJ5vq@6>5IC!hV_j6P4>AKKDeB3{x6o}0(lN?4tI37Cme4K z`tkSvY>pXo{MxuoS+h;waYplH9nV?*>XbZN{e$YQ7X{w99{F}u-1SJgk1IEyyO_oU zc^Thx2lGsx_d1-L`FwVcpVSVy$i=^dzB(=l=HU2#U1r6@nOAhZLrhJ+KIXht{brw> zs9am7Guwmt`R|?VFKO$0_qtbQb@jg5t8H&y_~Py)nWf+ALv?G*ezVMu|KDP9#>4+e zw{)3Ow28^NABiG!?5dlRUmmd559MUDpOsV2yL0lgnaUUTJT^4ReQaGcaZ8Cwp(n>D ze>K0UEp5NbU%vS&r!x0zY>RuKfNOTwmb^-Sf7z~M+;$E>-R&1m{$zeZ#!9Sr_w$7- z9|W$l6;e;0de`yqjym3@$Mk9ok3Uy7s@)N$5qjXj$t&}p{tP@V-R+2Gk+Fmtkvqeb@$;Pp+mkldMYBF6ZN7(K05!`codTI zWm!P8iKW_{-%DcBHYnFN-POy9t+gxtk#T&5Z1cDBcFw8~&9^Qtay;KQ*VycG%(jY$ zx*?Iu#jyqgk3-HxwlAGFU99=x_46hX%Xj(CSpMxw=Hem)W&8H?uU!4xUkNwQIC!fy zSc$3Nx=gwZ_dGYo+cn`j>N5-v{CH(Mvo`FW&fMvfm;3BFePR1cS^v3iOI#9;Y`y$5 z?&X*BCsQvyFqySkEPB4$e$$;NpYU@`k*LWIuz$ThNG9g>HH+h)J(Has|H$mD5LxTM z6RLUq%zS(K`E|cmM(U?1hD7c7Rr~d7xb&@6CfWIlbzdy+9_lpHfA(f>`Mu0f0={83 z3s$e&b?QPzZ?taNu8i-OjKt>prPev`}w@L=@zf~orIQ0Z|7|IDf7Bo zp7}?F^A`R6dd?2qd(~#Bb;o|G<-ESwt=DLB+PgbD(=KHn0+sqcPBRaSUi23ZbxHHS zaIHm9FeYkhl#WTEs_Cb*`E{2wzG&{7vEOTTQEpXq-E{5y;u~W*ZnQ>m&(@RPvY_^L z^nD|H>*y;v|GNX1pJtoMZ2$Ys=Cl5{uYa3;cgh+`56{OQ(J=?j*VRrlTh`>$B7ZvJ zw%$sG*nN&_N+$Psrak@Lcz)8qzzJI>rq1}$=YBt3cq4axj#PE{B;k#P-Xm!TlR-}|IcT$-3%Op(k{hJ`L^}U#MAs+&(wJ|S6J45|M%m# zz1g!}+lzgL4p&@Tb2II*m~hy#J*H(_x1HFs(x|&r1CHr=QoN^A{fb&N4aP(XsKQclN9q`!8v2OLITcaqav2+V|DV)_tm9X{m1f zdQymW;KM^VCmZ~E+PY%JQ^p>aS8j)Hvaq*5PIgzmSb6`-m5vB6uXVATrIpotTkTzy z#Mi`h^-NLub!~1F@9k|0Egrc+Nlf=*KPZ~zX&u=byw6E3U*X^Tne|B@C*75>3b-`& z%8Dtvcl)}mvlwo&S*|FlSit?1`}Bu={xgmtD*Weiw#OFt?OLIimT>yA)uOM*)_LYm zzFoTQ?eA^-t-bD>#ofLy_S5##m)y^{j6ON`fs{+1Tp-dDwA(tiBqmC6SSm+oCWv7<2Y z%8&C(h9OtZKNc`qA3Fc+?~KrvaD(sO6VqjaypOYL&0XW0qn+#2a*cgykdgo6nwyrg z&x^9^J~l9LUh(i$`dG|wnxt|i`9vK1*S+#hJ0q66ojNq(TExK*3pkdmHB>DMy<^jC zVYhwzo5O!L=@(SKxOpQyyys|W_J_#3Y;TIED^8iEcIB|Zi)xz{9&bfO{;E0dk*m~Y zE;!rpS?1aLncnIPg4~%{d&B!~b8sC?|Nm#Xg+aC0sri+Rb@@7Nug~O|uw8g1_PoKE zagBh~@tsol10R^5WnF9N_uN9F-S?4$+kTy%A9KHc_&j-j{M^EyowEYI?%wZWT6tin zeJyX{-^)L`-mty9Si6v)X}K|rN%5kSHG8de`=aW2V~Y8{{m!WUcuvMpqWD^#i-K^B ziJG`!;Ka1EpKSS0gcRk~s5nVwX&e#iwPh1qo^)#>72uj85|4Z zKiqKSI9bK9v3dEYGeUI*c4_iUyQiNq>Z#jV7KxlfT!vziLX~ zZ)R=%a^F^tB^P!y$(v4yP5Jk0<2*%X{iK;&o=wsCd_~N7Q}*=Ex}d*?rsf|~@2`6H zjQ{qT@{11_K9icXivQDj?adE-ZSpUjH##o$^KePAKciu2mi5YcG;(rdFF$}7xL=U+4MxjrYg@lvv-AnxL0QCx@jhj{|XnT z@rhkN`R(5#qg@L#-L#&^Z?QOdw#4`3-c1X3^qo=(HDSElZ` zq>e6}aztZivf1Kojc0B?+LWboQDjGVt>VdF229v1c1+4%?lJB__8o-(9eIZ^rhZJG-9GtL|yKIZ4%$%O`NucB$PZ%LY~o-zUw_XBr^#tgPfb0x zXl>n^`2F`Xgws<~CEdQsmfuO7(z3)wW!A7l{?7=T9DnQ3 zrE9{6Q;zq^UfEQAC3|-4B#AKQ2p^%T>$e=wZkl;)j$6HsjQ;L7MvF7GBUaB>S(*I% z`ms!Yombqfx}PRJxOhlMbMA^28kgP69KZTz2U;2)6H$4(*fsW9ZEj7k*6s;ip34{f zk~y7lTa`CCS3oNI)|M@ro(~)jUc0(ICYs++qSjoPnLBrj%=K;Ww(;EmGS~KY$=sus zbN59qBZE7h8bHYtDiTiY_Tv)5)_wCpK&ZT^=X@- zj;8tA;z=2oqgE&!6hF%vX*r>@nssKtRf%AmwdG}eGy83SxEox37~1j9xjepu``l0N zV{x;3Chd~yOPqMc^q=WG>s3>nXJjojNDhiHxECGU@znm0{hhkIIX!9iZ`a#3oS&w9 zc&5vbZ*TRFG4tE^ojzwFpL~8^YpeX_ONZavA8T;jc;%Xp3A^-K752&NthBy!+^=4d zp{tT|>_W>$@$Byxw*SyLGso;;O2+XUg3s=)P02ldY0q@g9%0dteNETmg}3z0RXJ$* za>=P}*KUTzpXE{sG%cU7PAnv3*M`L#q*j}6U$ARh%QXgb{ zH9pj&b@t)zwpnjYc`sezb6}AS*5o|9BO!-l=5Zw^%cqhzHXhhkyGm-J`q7nF9}2E`~FI|stn_A71z#v^ZKYeKS@i%YgUYu z>^@ET$!CNYdQSSYywIRP_1`o>$u^^3{!5Gm#LtJ#$lw&c@~CsUYvld?WfSdtAC|3| zrFT~;_pjiW54#uS>7M$2C8_qU-o?`=X)Kj^4`=l zK2l2B^L$M*YrEXZ_TG#4#GP~}ZSmH3(`j|@zCWY=(((CDr|${<;P+lGdEU+Bs=0*I zrdLZ|D)6dVE5C`o-xAN^rl+iPnDyBFT`oG#Y6_}Ju92pGa??D2OpJQ7aQ=tbuW=@F z8j8wYr#eK^xOcy?H+_Is=w_~Yn&yT;~2N}lTrUR{-Y zx3*}ie}<2ilX`6buRo_VlD2X6mR@y}IO6&&C?Lb+j%n(O7(?-Qru!dCh4w9T&0myr zRmWxCZx$i8CmT%cReW}dofTehR$5e)+uEAD{2u#`Ilow3k4Uc;{ui@&QG0v}i@!=k zQsU|z%bg4kANW%km3*%6S>SW``a{m*cVDz_Sz2mU@Jf#-XFk_2so*l1GV}S9HTTW6 z&)2`(clGu5qzJX+wN*x!c$sJXi!B#Ryg99O$L}uBiie9szqIpwS#Gxb(DT=24;KH7 zPm1uXfAh0Ibf00m(JxoFMJ*-`?D4;tCjVwvm>`xhX;IM$hO&jzEM7e>7FV(}n!zPf zC*i6%@pRe~FLQC%t-2LIrndfgpRFc&bVt@Ch5E0bf_VBe4s2gPyOFKz*k*3CgujC+!i=RRLJt%|YuC zJxMlyE8L~sKBsGMPdKEX5$dfyaCHd1`?q8afyQ_vxwqEvp!gVpt-6y8M`}X#B z@9jPQc0XCB$5pLd*zWZ>yhh<-@zSZ;m5hsYJN9Wu?a|XbuA;8)d?q>b&OXqTdHwny zZb@9-eXAB2xlY$tuX)nvUlMb%By^rh#r|Jc*GomM{ggAenBCcNOSI;fj(@99U;4I` zb4>}CmjBa^F!S_tGK=r5_+f3h@48i@Wbm|3 zt%ZWSC*CgaQg&oo9jV8Xcy(21+s`cDx2xix%#V!Pamx9=>ANJ`y3#kx^o_r1g`bI@ zX)sY`<{979Hd~sG?J_wat{21MIV!{&*tz_lLRpbv>QW)i1FGGGBD_I$^2aaroLP-{LUlMTb_j zhPMCS_dR@0<+*^E+Os-5{>w5`4e!59|9-A`f8U~6Y=6F=pMUt=U(*xPa}VuXctrbb zcH#Gg%5xVlh*ZXW2o=0nap1|rSEuKS?kK4-+E;tsG)>Jm+JDznx0*uD!QdLE4`XOAZU8Y zr5zn=M}oIl&1m1m@r$2tF`I+H(p8>nU&WG+`z){ZNMt_D`fb^(>J0)fMDomn?*HA= z)UYgDSUp>1`PrWj_pJ_aH@?HjUwO=9xtWX41dfIKUiRt!$T_!3Xo5S_*@RP^W&xA- zYddDTUYR=c=d}a!zwRHc-DY}sP5_%v-g3)Y`YtOi3{e;`*!fDIwun z^=e_J^?7u4tMo4jq?M>UVA?)mnuU+-Sc(2DG5+x0jk z?cmQ~!J>mXF1*ssKNJt2*mKfi;f{jo>@M*~>^Qy{usC^qv5&c6Y2RaV`fzLCr%l-# z)(F1U)H@oz+B})-yf(LnjqUee#S`z%pS5Go_qUJF`el8dE6TyeWf*>Ym&faX)f~o| zvG!lu_V4|f)tJb^$7w7sW6S&bT%~;9hMDCHvmS_Csr$)uhjqWJcZA-dWKGvY3ucvE z&tHFPTUhiG-5jQem8;nG&(um~Ex7-yJ>KTShtA>;i!aBYv;LZ!&BZ>Y-MhXZPyM(4 z?ORq^)$>fPxGx`nE@6LCq|i9I?$e8$HFqN0)bB^PPnea|vyjO{xo{ps7Vq^*?@BK| z$(duDsj~0;m6$g-N*VqZ8PC|)*|f5EN5-)V(EVyHzc)@?{m4z~N=WnU=Vz31SF`S~ zdt*AszS3Z8&C!e}X5R68w*B7Ho_z!;=>;=kf zKaBSmFYiCrpptdoc<0IXULoaQo0)Zgl)PlSB;GDD`GK!qBwtDLi3W`n-Wgqc^>q)4 zPBxx6d)k?jRSPAiiz(S&-dxrzbUBR6EUBmKpH|iKGe+GDwT;hzzhA$9<%CD!VPUh< z4a1J!3B7Pfpx4duOR47N6N?r{YX69?QH-88*Zq-p=eyP3VQ;^^zyJQJxu(2y{CTg% z_qkThfAK3QCPcvB;hMDQl<7~sJLGad3oMTO8f>R^JnEuxXW!-dc5ELCnR4Q{#kM!h zZ7^%Cdwoge;?k3=yroK3u3UL+;8xp=Hfz?;o5Uuld`uxI z<&W1Vr^zur3BEb8r@~XewkC5k>NZ5xuqN+5P|AL;Y@t}PPg-$m)AwHUdk1{Y?>;$u z{#wM(RXm=5I|S9)He6cq{%FYLFTFD=rPM!NUiCidlIHuqrcYC*EuC{v`$p^D#Xt7F zzglJ}n0x!H@AmHjYaUkhc=EM26)!V|8qbfaDIG!o+6p5_3RrBlJT;~Jl z@(#w=m8kw$xKXkAnVf>n5j?41xBIke z%snN#N$Kp@qut`OH$4rG%AR>^!6y+DGc}(X38&2T{SL?6NZM?{CK^ z+&MaNg=+Bij7KGmjZeN9KkHW6GSOU<^)>gmN9Uyf@lUVM)mgXeUCgYbUdLbO|CRlG zFQWC0V5fwa=Sitq_dlxtE9E$NkFOz_lRwi_Ahmzl&H4J~(;qcGRQz#2{*IUYiH~V( zGp(=pr(T@A}B=~}wc_ZlSyq24J{iohUz>a@ zJo}|xy3qM~H?1~Ho?c^a=My@=^8M`gwe6PvGuwXGq_$Z(XP)giCDFU#N_#2dXPU+dHZVZq2evi9V z{rbPn_rHF>RJ=E-oZgnRKmGrgwX@IP-CO>B-}im(^Zz9BO1(by;pBJU1vAsMwr74j z;zBU(sxW#>C-qNyswSL{~ve&YoR#|>~ec`>t+y%#clZCk0Yd7lp zdtRL5wcO;W_oNFUf5JY#U;08-{okI7pOaq8SQIdvo~~cMCn7R)ic#OW%XfWq6FHlY z{-18tH(lFfnn}h51)KkWKKrfod4II{`xduE?;iM z7N7R<$${`~t% zTdzI$towCqCc}>Pf?I!7wKhmq&Pdc%?6%r>&vS;-!ycBzD)n9q&N!7jle_kHG+WL2 z;}Nm=@b1#D4_y_$yr~b`IX(Vpt(JB8`UZ>B%#}(SF^Bih6Z0-rUtacM=J}dqg6^@? zbs`_NWE@O*((c3;zMWh4 zX9xeE$B#p!cR!z3J?CdZZSZXCiJzGpw_GW8Tcf}K)^fI`=j*<0Ugx{5Q+?9=?Dc!a z_-#Hgyxa5HPu*qDlS$q&zpp85&$(%&E)ZhDxkPowm!CPp;q3hT?5uv2#O;gPkl^UO zvvubjgG&cqzfWb0N@qCz)0gR!vhe9&Cp*STqxRpq5ax)+x^KVR@H`vdTgO78vDOrlKXRYe*fX{f8Rb!7*$-5 z6#mDR@1Gx{ky~{!jp_Xt+dr3oe<=PDm+N`HXxI0WvwL4Wli&Y(lX>FqnJ)9Ix+f%N zeL42%Z+FGN_1SvrdB%2g&ik;KJzCx>E?&%g)}&fZEt{v1XNGaqLCt6HmMz>-YxUWZ zM>VTevg*0qn|{RvjslB`Gn8i8r{^~{#ps^9dRyfS_qvPwCYLpeyKh*~|EbDqPR4eh z9jul75?p&d!_y1dnpdrR7E&GM-Lq&}zGv-B;SH;QrAifgtlF|#iOJYM;e61EMV9KF z57%$qS{CyE*D1pnD(0pZA9otFzPLThA$xw@gs>gDY<9c2F3Z)(yZ_j$pZNRBp}Irg z@9n?0@y(y;ivi6u&o2J3@nN`f_cK1z>w*8R!{_LCpAtR1ZGN?2>*mWDK_7N$7rbb< zcReisk3Vp;zKgN1zu9$`<1JgZaV9wye}5o3t1!jp`O^y*YJQ4ckyEs~b3@EFS@Thv z&Vh!R+y)x;GDd9AmGp{QdXJw!FMGGfWK-Yw`){&1B$x!VZt~80{JSW82J6Kwm-N5x zZ=YW)y1P$gap&_oyZxUvxGMR6=zUuFuk4q`pRZ@H@BW(D|3XeU(|6(OJ0)Lx4NC+( zxp~f%>-c&`@Ub~tSCMk=d-jjqj&eYk475X*n-)QJbKk1+kMApro=PJYk#I6Ed8TvuH)ur z^;EFt^|qvq#wspXldI~~?p6FYXyZAZ{nGeUJIjH(U&}*7SG<|^k;;q%?)f{WNF8|Tv7ml!@0HoBJ%o>?eth%LJMHoG)7us2hn=jr zwC?vh-V>} zekZ-da*ld`GZGMgA@bLd@q;GQwMB0&nO?n#(^y^o|Fctq;nu5xdlVwhUwZO+x7C%( zr!^KozoyMs{d09MOV_Ixzg9M%T)%Ul^MS`Vr{6d?)0n;dPGS3P)5XPeOC5IktIsLE zy8qQz?)V=~muLMs>0j4$|Iah?ck1<*_DyN{`fPT7nbZuc^(K3wEoG*2>|t4dE8@f2 z{95jAas9IS)?U}!gRQ6D-c_m{SNT-*|E*Zl8Fz|K>mC;@-D>wVy7`9q{vWO@)?8xy z`?0_N&6&B{8y-!4_Nv$X-iur7yFakh*Vz62%5v}g?DO;7TDWz3{``J-M?2?6yv4f5 z?_7`nxODve{_Xthzbz}jce4IRD|;Bk9=nsYfauU zq420|*IAQP_2RORugV`j*wbJ1(8g-ltLxU!3sZyc+`QRhD|&Usoxo1R;Kv_U&%fL8 zdi~BjGhcn0eCXcNOXdszM65XZWM$c^uH3s`_UhL6zjgo3+&_8Ep=m45O`m=5%i?=U!e`HkIqUwDx|Dgb zW^SyeoSXFXdAIjZ;V%t1$9Yq%WM3+$rO`#-tu?bBH_bm))t|U)sm-kg+ZM`g-KT5R zeaHBc^6@aAe?hX{7yrL>>F2uUeZI-xbndC*I`?JQlC6E8njSStWKfrXIkEVo)vND& zectu3T(()UU>BR_#!?$2=Qn%%GG`h+Z`ocu;q>N-TwStJ(pNivZhZV<Lf8d=0tB%@KT>AopS^AxXZ>nX zdU4wUNw)*rk4Jo(bMHnG2k%FlCS7gTV7F(1F;cy$?{nN@3OVz3ztpn%uz&sIquZ}N zJXLu)X5DJ-(}tBPYR~-S-p)&Pi%d6uJz=Hu(WMc`ipz|Hk~Svf=;==UFoSK||5=-u zVl3(m-JbIvY5xCNw^sFvO86R| z_ZJb}a^~|Eu2m~m9@BnZo)C~GCDwE1K*O9yJ^im=uV$=RaVTcq``^FIwu1gC8be_r01Gbj6&v@L%)UrSHCN`9CqB{MD6}j&?u7i}^Hvy;L{Px}s5jRlasI zL%99>FXyx$?D)xL@4>NWLRVPg^XGcMo{4H4sn1{BbC}`L_OAQle%H^}itN|1IrVeP zq4Sd*TSX_%asS83-BTMeU;h2__3Lx;&#bj{UNB#A!8z5mZRVN0MynqBuV?o5{cpU{a{C!YN(%XI0)wRJLrZxo%I8W*c?JpHDr>{dp2 zuZf}SJQtR)ap@boB)T`O=Cdxkw|`&e;)ZkF6TYo~75}iLZ9~kB`PCQS_1~I&t~m7f z45QSp-Saeh&aM7d`Q@VK`!4UderYw<$}b-7P%R0Y*V_C?dybja3g6Q|IXnFqFJ8T+ zuYZ$VNn4M6jn$|0_dJckoej6P&bd|S>Z*D#Zl~P&{eR5rKL662bx5s!?*#js``W=p}jDWAVMZwXgB=9<6fvx)ol5B~Ref7X$b=v!R7<6B|NUu}7#%zCrl%~`(c z(UY^jwMf5zo8ge?C_L?4@ADbLdxY!umex+(es5Xry7plCPhU<=zq{rUiD6YA;O-U&V&fe+xvnQwLto%ck1Jc{x9{q4I@`RVab7G|^-=`G^KR!Ng zvG!i<@h*Yr`1XmF&bL0yS-oRh#P(eKRbCZgx~!*-)%%McX7A+8KE1B?i@ijr&AgP$ z+iWE!PCm)|RdU6O)yMm6+YL194IU*6Ys|RdoG<*;iu;#v^Tm_?PYU(Te*V&$Rwm3WQj&{B5)96AC{vzA6ySY>9c^Zvd9De`PsH$DFK;pJV;N9*2 z6<${68Z=uw|FllrG^Z!?&WV$!4zv_5o-o~d#&J%TWhu9&zila;+5VY{ablL4G*^Rk zV90^bsn5K!V<-PA-u$C3$LhLQdUEdlD;X7r_sk8WblM!g3x0UJeulI%cct2mh_@H) z!#fMVCtBv$vb{N5Tw?HUQP^LLx5rHVg1WxFKfEn;_1(0`7IHU@vJSEE$ey`5^%LwY z0CT>Rl2_Jne(g_~=e^D}a_-yXN4}kpRmq>v!|41#MESw-U44@R?YI5AC1~{RoWKi- z#)LB=`!kp8xEZJxZ**JVWz!;lrD4Zb4D~d^;Ty zG#9Q8x>#<+GpE#MX3w;#(>1mq_K%m0G&U7ddiXcS?QfjaF`+Q+J=OPx+_RH<{kS99 z7A?K%aJPHeu>(T!AC5GfS^w$oq3*m#oChwIKASl6&uuGyR!4li}sRJx-slh?`01G?zpbymQ<%xApy- zznzQ1EdJKS{rT$h@XOuhH}4wUt4}X1H=kE<%WmDgmamC5bydRGjwgmYFIX>-U|ur$ z(z!G1zK2>ZSDyFp*7hm-e{1GnU-ZDIztB#9`Qo@=-cnhwAI)Dkh2cj8^R#o`342-I z|MHg8m2W$+v!mfxWc;oPGE4Lq=L%0hT@?Rp_Lk>9m;aivzES6wlHNM)O4Wy$qD$v2 zHh!+#l_mM<^40I>f?jIGl;8hpVg2d-{;%I|*_}(sE7`aH&*9=D=O#>jnc z^cgp*ogd^lIQ)(Ft2M8wH+ypTQwGNuZ5EUCD|0$xPswgrn4I)O$N1cXi=4gdR)36a z3jb=&8Bw`qCbz)PXEPYz-P>Dww0n`gT+m^Q3Yn$d-u0?F*W!D3e|gPv@{$R<>14c24YSkHs_PIr9#FS?P5oLPETM+QWw(@Al1fN}1U=t=K8^B71G& zdX<7Q|36-d`nD^c{PAhra9S|`>-jr7n;bU8K8(@qo%(o=ivv@vZ%WBmr&!%bdtave z798T1dLQ0h^Y_b|`E&N~@|?IL?#W+E&O4GCQ;u)n?pZFjZ}WF`FZYLjYHvCp@z=l4 zwR&jrr#Ak`Rq?_fe{NhAu!v-F$uh0wc{XcS%q3Ri^K!0l#kbg9c$xitk*edW<@&zy zr{2X*U0-l7XVX2~JAQNZ^%kxX@{`?DD^o0eYtgSU+iD&RXe>YJN?>? zUwjw*k}ln-SjSl(dgWd2s@HzZulwfr9e4|llpj{GNcnbtZ}0ave9xbE=++3t&*Au3 z^4a54^chK}wgWfY8{XePRr%xJ8|}`gHv}vWa}@ZLC@U`KYh+BZZ@)10RNB8le<}O9 z*VcbpQyr_US9JeV7gKWQ#KV5~la!J-++%OLf348MYSq__^$&Kl>^`^n-z7sk^_sHs znrGp&O872)d42PN=A8E)DvkB7%Ib-QD)qU=k~Q1*r`t2BG1&cn{b7$rWAp?Uj^uQ; zqVwDeYbLZcC?;^sIm+>abM^jtM_o6rk!DhNd9X$1WW}MF8SU>B63%RTw;-jChtc_f zfC0<7GL}0P;z<_s-#*>=N16$&Spq_p^fqud>^^pU-@L^f5{uu^yCG~J1iUl zAEZS^S^q8MxzTb!-QlzyMm{_c+19|>aDEfl<~LH1k_J6hb8(KG zDa>MSZt7@XjGWb>dggG0ng%f|T(z4O6F9y|GHv_5|NMe29U!;ZxGz|KE5vr;{>G!{ z(l+0!oVVRjdmp$2vvpIDaF}yo`-{8f8&gk-y!rEM|AM0Xb}p{&yXW)j*}7e2f*OyY z9PC{by3XvJ_u=-hL_r;Iuv6y9Fex>k`xCu8LrPk@-i@=3hS9X8< zPpnvc+Wj$#cJ&;yJEgew0>NYrN_4Y(Z}+X`QyiNe>sSv77g|eRV)YRBvGA$`c;m z9Y5aRulREP&el&_A<}bqdc=B&U79Igoe!!u9PHf=aM#a%^{U{-Mfbulljpm9d6T&$ z)39UGf$gifdS9C>zPz_S`N-P&?w=+ot~0TVvDcfGdKOX6o-<%dtXsJ0QCQeS`?F{7 zG(1z?JMrq2`kdHqPl+7uwZ<{M)AlG9_<_pH;!RO&1KJuCFNiY5H7MAZrZ9zug)CaO zPwcD64<$1;PQ#50`qs~`IohFkL~^EDQk~Ot(`HqTyhYPCv>Xv)TCSoVtT5+B=%sIO zZJZ8lpMB_%(~;xHw{sjir_8Zt#dAX@f7`Dj?{>ept9ha!}wb1g>{T7bj1Ualhr=|4_9+IJ3|s^W(3zM}K_F|F(G3HonVkY7f`v z%k|FDIeLFr^R4BH*BKb?>nd$*w(U(d`tjpd^1a(XYW9JLoZB4cD?2zn&5%3Z|LSo2 zhTqly8(-z$`rAMR;8#Ffu6r<7w${N-OvJL=A|uZ_POb#i}!+#&uax~Ka86y+WI zud7#b`_s8RP{w*95Ku32-)XPji(=XDCfk!1*q?v>;?(<-PhWg#H)H(p^7x$~6BeFE zeDTcL~zo$)^wrJ%#IZsZJTWUuaPu%@!1#^QMS5xyr#t9q3Zymhnc{$uE(Q;O7w3}YOO-V>1z5_>EK3;Qp116Gu)TeKw|2Oay1Mk^v2S8wwueYb0N*>l4i;@}$j z7hB_o2isn(H7|UyPJhw6t>uEHA6u{dSo>hl+%1z@f=qmU84Q9<7D(&A=Gw+-*6>i^yH@2fp4r%d>$`tZ#?$nj4+y*nX8H5PGkDdbM@d(%Tv3RW+O4@VPbkbk&_#LXgI-== z1!up&7c`y67q!$+su2{9oJuuL4)8@@`c*(+ZO5#zTvO{+%jZvVf<( zFEsJ^KchFcQH{+@O*ItvK02rNVGi?=W3I^_MKVR3Cry|?yX()wnG#bbH#IT`PnHD^SYELAJkS;96qT81_Ab^h-?TkAGjgVThcAXCyW3pYQLS6*HPFY4u8 zKR(ZQ|9qsdW2QCxS<$7xe0Ht$oqKT4{iiMZvsY<1JW(;xpV7L>`aj>*_3IBTsQy5`AjzGD5_a_P6TW+w-R3wN)b-9O3x zLeG^g5lcQypF8)+&k!c>+o3*xC3sHX(sXwCoc{jS`h|b0ch8GsiP67m)3}*kv%w`e zVfC)eM^hZ6XRqXIlG?X=4P)Ol^Tj(@R;*I_zhRYFX-xD_(?FT)-kKi^B__yp_ngsK zvebQ|xn!@2n!x#rDSgkR8XYV?HHjD3wl}Qi=6YB9CcZS6S7^4dfT;YH<*!2SAC|uU zTQ9ZyWr)&)muUz3IgVXzYja!vXKVWTICX9f9UZs8M8QhssqcOqSKG#XwbaSU=J;ci z<$IL(y*<##Y*2Kh;M>_LX1R|4Zo0(Wx1XB&^7Rg1<{j$=ZM7eL7VcbNJV!Kgn~xNe zdSe3{BQJx|O`YOBLbsMJDJZv}Yf|&|vbp8VqHE=xd0UxRC@=q!_4;*yuVX=JscBYr z_R5d5Tb@iwIWjR(PFA*g)~hH!4bcULCs->UB8L+2{n%>x0tG&#Brc0yOoY?_oV(l6w&o`D&Tea7m117eT{q+lqvWf(!n0M?J^)`~S`1i&>q~q{$ufh)j zoMrE{4;+(ajo7@H<8}E|#@U(=a+j>ynj9){#l}dkc+tdzy*|tuZ+bf)N?aGXGC3(+ z_R8eU!X49&tB6dN3_S61lT!{Km)|DMR(Z+ppUK9Cxn~%Bq-+@$yFE+D$P;VhJ9X?q zb9{c;&9?2`ul!$qa(~|= z>%f~<+>cL}+zDmeHSuI#MP}!&%Qhv(Yo~SGy8A_i|83K@$~PwU_rm=@d;X90Nsd{g za#i-xo$%C8k?%jRmQS|epR8T|JonB2?fHuyT~rq|f6tVcr}*}9+BspS2gYv8`1#&A zo|)&AV)rGO=idom509rezws$lSqVr!wc7po*Hgvv!RcR9-Bc#D1WuYN!av6drlJWsbIz1ff!W5G4ULW%V-n|t%I z4G*@tWS>0x;q1jr4n2In_G_NAFZlLneU`KP&xys|D`tergzk^i4(YPr^l!zl>!Isv zs|)ns`tNr*@ZI-*eCd_P?`(f>sQfIprsA>enyAf!`s;4+Ovz8IoBY%JdB2T7kP^K?EHwSTC7aAp0~s+w8vT`F%#M+mznFFDjji7~?nUer);524@c$Yu zhPb6-(Z;O`&O2tD>~KoTk|`2eG|@viyfEgCS#f(6^W#;|mx->86I%ReLusjDfD_}% z6uq7;3dHYa!1#wiJ1P8Rgvy)reWB+35o)Jx|(SkBC~ z7Wl08Jn5qAV#7)&JvTn-GaomU&Uw2+W?jPbkMdV@w51oNJIwL9F>h(fw;%8LbJv(x zzVMx~d3l&$tl!~h^RoNo4o-Bh?`^Vv=Tcl}l~jCu;Y=yHbFMyj%eB=PZU6Y>&?Gyv zy?cdD&i`l8_UG>16SIu2vhpv#x%NlZ%ahwV#rL!`%{NPwbgX#uLd*K?;nJtucNc2) z%{z8m_$*Q>e{?zS?(;91 zV*Y;l;{2|o_4b8zd;0rMKiGfEw1?sM-e0??`MhbE^my9m&)b^MMr>Rrm7mvhsBbZ^ z#=0yv(ccp%NyyAx{7>@nv7Gzvf2T^d_vm?L8wyR4(waV{c=L&eZ4ysZT$5itP&*^d zA7f<9IJxb(W#H5=-Lhu`YTkB+SgbCqcVaoR|LdVx_q3b)BSm$0uzfL?_^v8&?fh^1 z#3#=lZc%#ha^ZX7)+=vn^RH&@+3-g6&!hVI0~g=Eo@klG)W+-K>{X=ndg9}CyEeVr zBO4no^D4@2omJj7t<@`zP21WYxoqu@l9%%z{`wx@*E;>o;SjBF9&HNCcUT3>70dlP zDKE_MeR7vY=uLrzTv8j^q>O$BoZifl@n#yYiCS0s%t_7S+=h>v8a3`P)-1LUt$dyT z(M#dPyE?Z`Pha-+KCb27FTX=O^VY&OYj}*DSCy@Goncb$`eP~QoAMIP((CL_qJm%M zD8x^UJJi1I@6qp~oKyP6#4cP(6K&&>d&9=^^`OwKdEHCH3jE3n>SlbGKay2{o{eQo zV8Z)*drdyZdarIcDPfiq(JsvF_yySoH zmgK|x?cJTehlkseE-W~xJGt9{?dj8}S8iGROinC4vFPQ*h0dQ3&3}7Oz(QLImPqm+@|A~o< zY!43;d+1Tfo96FvsHd~}&Y@pCyl*EmeZ6}$`9-ph*2*Kle5*g4njQV&czF4Px63v5 z$evlB`NV?Da;}yqlMQ{>Y`H zn=RU&?y#JA>BDfES1hrBX z8!f)5@jK3O+N7)O`!q;$?@xnF7Sj*UZ*TW{JG<(^^l9!Zbl3i#_eA+k{P6&p=TkhE zELI74d}4Q1UeIT?HA=iKdKypQ_oO-T23C(wQ|8J`dV< z{`q6mmT*6Bg4(2KYIe&sqCx{#U5R-dvDR+gVyj1wQ+I7D-S@Ee_SR&UD{-a^wmrJF z)4uX;2b;Fb?=ty3`?twC@3;T`{?3N|CtpTQ`oF_3Ti#oLuHVL?XLb7j$~yUk6K)q` z{O=yHxU%_T$fmbBH?B6M|GU!g{94e9=!*@Cofk!ZsVU8xoi2TIdFyIx<_KTk{d_W0 z>m`L(GXE~$EVcMpmEY;49XFRO+s5dgHS455%euMuTC(-Kj-I)Aa>3M$>+eKjG0d~5@^LEaArx$6?gcNR4pe_g8;I^&(iHmA~n@aIv%S$9L+7;1J2+TVS-QPj-UbkUwpo{OuRZv=0VWfg6= zIQit=iKJq;WC3l|aIO`bYWAq@2hrS+) z*WIA?!|&VQ$-*li9#NC~@iq0zOu4mwwg>nHckxfFsyeB@_k-U&rSnrmr{38ApJCG` zBSVGs2JZNvpjTr2msq}4es+9&t6uO!sp`Tv=VEsow58c|b$bN_#k5RW!m?!9l0u^c z#&b`^gha1iv&NN;_3zB)qK$ugb9X%aRDW>GQs<3*Y7x`VojJ;U{|{3ezvuDBz19`a zN|=Kt2TycqTckGW7H{0Svs_o_Ea;IiY)U^GvT(-&f#Bu7@Afl9p5tlEQ+V)uqR)r= zf1l?cf81~1cXG1&#w+&_|E*=EQ@9S5>?kO-!ZV$dVbEf{o}3q+a67{&pU8> z|1IvGN0X*X?OXBa#nxV?12;Q&BpyrfkzUWM5}9}SS7x_ESRl-OOl+w0a{HQg%WbY;@F(B%7#$|hS&Sbp=1B_ICg zq;tQ5=Xd&cz`(RtC`L)-YK2PXd(mXCb&r}TOM@rO5`uKr;E|GODm>hcBi-iB~LaND+Z$`qD6 ze_OLNI90bUjj=nUou7B4d4C-%>R*{{Kzdo!_*Z&-%ul-DVLEY!#oVi&ZcnVUClnr+J+b?l_lv?ubhzue{9zM=4SU{v0NV~UN=>i_S#zC0m)>73@{VuRi- zdlv85bN@r>)m^bV?uzDjRd$#PRrA=der#Db+k1D|$0FhDQ#ucScs2WWMO-oFQvM|udIPl`u2$OoIO-32&Q}X_%T{}DN@VTCX9ey=0 zG@fm2lx8{BbLIf6c+bc6{kz#pWfOkgyJdUhAaAUZuZ-KWuXZ~w$G?@m*d}js^>No} zHDz1fR(Jm?k9y0$U07pyyZe>Km9UsYES|}}Njb9XA}(d|zTDw6w^3Yc^7^Zj7DcUz z5ATq*_6i6IIcqq3W}0ipoo}<#mdwWPMs-~vXUVF{b>0MIIw&2Zo&$gE#k)gb0@|wqP{bkj7v`orx z-UP=g^HhzOPd7Mv_;YUAy@hd8*Xv^SiXzn%=_HaV!)5BbR+h_;mKiGq*1t%RT1s%~JCd z_wyBMNtz0*Hggxxn7FIMX6N^V@?V3luD`6EX7Mvk=9l_w-zD-FLv92~x!)99w4&w1 zLGDF`kEgzzF;Dz>;N-Qm-x5mQxqS( z4!?D0{oZX%_kUlke|+-zzYfnW+g6m$zh<2G_sOq>`zg-3CVg*%9)B;>`YUs9A8&p2 zb=ejl2mIJuzG zt@gFjebbZmEU^20m=rKTG08q|>e|S3=BR7Kol^Jm|Y8!tzjDsfdA+i1&v# z_u0AEB?z8ix#O~E={lvUs~R<0pSNZ*?kIg7=2s*&Vfysrn;VP+91`O=TQAO(l*~QM z=2`lCz5JV9vJX^jznR&#PR>5KqW!1E%@4Mo>o#vWRO#>I^)yMB>-LU@Stf}xi=Y2I z&l{S;R%mppHP-8#z!DzMLkE>rf4uwK|FChrU0-H+&w*WMk7opJ<SS3 z|FP@D7AfBLG&vmf;B@PvGi%%~nq+1D@-Ue!xwrJUosW#MOsb*ly0t5G9_}d#GmGzg z_v^imTy;Lj7geUL=~??I`}F!&>G%lJyJUVj$zi%RckU zt)sFe)xvLJfvZl<3%V_J(1#e(OyoQ>wUW;BSec%OdvD)-7MAAN80 z1swRM_V1~Bb_HL)@ucGgQueK>w*z`L!&4vMYW-=$Zz=!Sjov?}V#+>-q%2|WF}okvG~?H^_5GXoY~tdt&sQ~=`uzKp!guPq30db7%0=J(_>!t; z*c)S;X=r-o!0&^#HvSnF&P9GFJ5@I>n~?F@@lJ)W!k+A zC9ShIKG76m}(BaD~XT7~$_~qmMg-_P)zPMuVna}B;b@Vr7 zY5wW$S~{WdtJRXa@75>&KUseBTK0zb6XO?rI{m-lh38_&PN~xoo)tT!6ijj$8ylAT zGIIKfTt8QHJtp4y^e+*%SQ}~4`@iMN_Uzzse*fRBXkDHC`H749<7eg``u^tN<=RY! zyepH`&F3F^E_EF0+W!5KzWraN{V!IqwoWhR zVBLPME5fku!-J!K3^J9KhfZ%kZT3k1eNFQ}rbIPsi}$K~!|t5wHksD{Ae~>okm*5t z-B+=?pMUSxJpZg%uYUSikkumZU2YAJV;}snUb>P0bo^dc$(NZw4!F-(pS#Fm-O>Gj ze(re@r@MqBdi&jXEC*^{T&c7QhzxD#|8v(UVXoCI{rcYtr|ui(-28Z5m+8Uv|67FX z|GiBA5tn|0bN4sD!ouRywc;gO40%`obRT+Ow_nOU?!VCCA63_`K3=rri_V^!%F~&J zDq`#HKPoOyJ;#4z_kIrZ*#GYLJT=s8_5|D5)fj(z9+LdIOS7hYQ|XJx_B*q8oX(30 z@7f+F;}96h`$)KA539L|Tj#QldoCX))N_^`Wmvaz<+BSL`Q?9J$$8Q*)p&^Ml2F}r zhPW1&|4%~hPqb$5?d~m{bmtPQ4eQTNwR*o<$6klMe|Y1Hk7I$HX}h+D!o_3ET+J`s z4<)pIl+d=Fxoq8{qf?_U^*nhcv28z#x<=reXHkLzVT+1Yr|5HzP;g3*Tx+=VFv!z$9P-HZGKsq%O2giGDPy{F7cw;;_vNZkDl`WF0?nFx&E=_ z<<2_`M329dKfBZW?Wwyz4$Y9cvn|7jEi-2E?ZOot`>V3GiyRS5P9V_Ek-iMkwW$*7b%m00n zzT&E?lelAeZ2PH?~Thp zzW@GT%>L&~`-h9=_a4lB@@>zQe_{1&_r6qd*s$O)e`6GvX!*P4ng`A#an;Q~-nCZ$ z1IKm?xkA}?M#IHBBY4FA_C-v35fU=xVQ1+6Bf;5|4eI{{osr%yQ29}Lg23HA%M0C$ zew{4RZ`#IrDg5IPkGm|hQmX1t=H=LIoAhZqn~%JS_+exB$ulyN?!NlfmA0kdo%!UZ z?|qNj{ofz`(718OZ)IV_tbz@j*PE8^e$C62b^DUp=~JhQ4#mBdm~3Ftdno+vt&0|G z8Ka!;YGj%H*mW^9Sio0n&*$%t7EgS7_`1>6BaQCe)|U3)UR$#-N+=X_74{R}ka}87 z#;!)fxsAus&(Ew+#`f7c7QZE(GtSNVbZ;iNn!wu3E#I$)Mm+Vk_qCYfZdw2J?x(o?5z+9oM-%w|SUrwZThuRe zyKQ=0B|rbY|5iH-duLRA^;lD#rkuC?vy#r95=|~`t)0TWJKjEGm zP3()C*JqwuY{fhM^3=f8<@*a{cU36O$haEi|5jqEea!rG{eKNvsu~*J2OnoZU^|7YemrHE3ws)^v!1?0w^0lw{iZne7C1wfs_wLr3I7_V6 zDeEo&QUQ~Km^62*p6~KMFXZblvOVP6{nXjr`@;?4{DiyKdEJ1uL_Y%u5 z+s%8AhT6|KXk6wV?5x@SckA0fOBd{5n!o$Cpv~Xk%o5hNqD!~lij{jX+pF#3HFK_w zZ>~E0c>QwC^2cuve*7v?r@!k7N6-(|V2`ECn(LI?`4^g9;o0+kQtgbN|K=+dS{&D( zmd(@JS18hCxBZvIyx&jrKm3b!dw6<#tQ+G?5xrT~@{ez+TwdJ1V4;ik+pdr^C%hdh z`HoBGb@ZtJy?aFQ=5*^zOLocbe#Ievv^nhf#Rp}t&6RqS|I9k8DcHO9+KP3%Upd|R z+AF)`|G}*@%uFSxUbz)K`%2%(6?YE)_z^yT@wOKl*PfqfxVfM|*5YdCs|N?&o%U8lg;dJlPx;ZEO78|5i390dPxXVgLoXp{u zUUgC;C7vtFL!7hxgJ$EIBEx^n`#nixvJKTK4+eMY|Z`+v!^8XT|K_K5^Fl($~~{^W{%$f7$w zDgg)NkNPgqtaLW)O#kt2zBNB<{BN#T)AsrqU)&tv&-=m6=&#Anpy}6sEeJmTGtgLf zo6Fh7m6=8}`QoZ&z4rYQ<=OeRYzd#N7)x;7%sT(M8T&I%x#cBPJ#g25e31Q{L03e| z`JTfwSQ!sT)?G0>QhcrdX5k`BcOIo&rPf*hGp`)!IsHhc@1v&rm$tj?s|(Igzy3gO z%^~+Z`M&-C-Z16eIaz-5%j3T42lGXaukbx~=Jd|O<+s-R9(lr7v!w9xqgPMAdX$(P zZnyeqdNlKDYVxmC8||sdlU|+3Jr;U*Q_jks{I8pIX6@s-744_?`&mbcR_XCYW{Y|~ z3;gF?;H>4CcrKR9+-^;6=W)@11MBwLB*$5G^&Jh&IJb3*Lw+ISzFP%bmrjYQ$vf=T z@V&EWWySO!?_*lmt}mD(!8QHR$E=)y=$=E2nX-j;?_z~oy+wi(e@#jWnebk@cVoe9 z-(_YmZcV>&U(@1+hI-xP#tJunyFY6C3SPgKu+^XXxptf8TIbszovv(Kq&d^$>9X~q z`eBdG|IcID_i1Uifywl!RTFKpbwq9VCwMBI%GkAK?c<3YOBAh7%`#MtKl4FY@v_;M zl{H-FZuTC!oiFyVH=JKVZJ*hK(o2VuUq3NX+)>pKX~J2rt?d;USI8p2FH_Fk_}QZq z4~xv%gKzd}&#zXWB*4MEWgFMAM-1v`_kZCw`E}*o>y3@lg(+!OkES?Y>04dM^f2R- zj*3OrJPl#TAZRlJ0A@4253C-1Li-@j*@)O0`D)z@=pg<04?KfU+$ zZk9tIf8CIiim=b_GkM&;fAz7?(piRD+KiRVE6$#`>P-8)!_N0g#qCEnrJt`)<6kIU z%iYAX?@xU1`d$2K``74H2}%21HET&uOb*t0SGkHud%MZQZ~V&>s`6~2^?N0D^RR5W zy8UZFQTms#ExsoD1#glW155k0R#(N&Nc&Yi)meh|#)Wv6eAX`o)@wYT|B>>$zlZzy z;_@o7KCZ=IZ#h2tcIo2Qh^>jDc{6t~B!6}j%1JtD`F`CmA)7DH6!ZQ;$#SSLoMM-*bJVIp?3%Q zRV~+TvYzlBnDS6E;{O@1Kd(;iHb}gsv*y=jsaKXVN7?NQh0WIAZ<$~F{QrloS8a@i z`9GLX-M{#c=*Q)}3V{*^AC!(?=w7O@Z`!hj{4y3E!mFPyQC@VL@$&Vp+ZNoq^1|Y5 zPRZ_;%R!gtT&v7=MU|h7^acb}mzhnCk-&^Wawbm-IW{+9W z2i;@Wk9bZ#sq?PpGE?&`V-_n{hqvB&XJ#1Q*ioo_ukyL9&up{aWkt(&)vd{YwR>&f zzn}GTtik0Q`(>APZrgaJM9TN_rgI->*Jy`{chw7>yz}GD)yj&8{p}kT@8gi4F}c%H zyodMC>aVAZkF>sQslPsd-8{q9c0Vq4@&0&SU&|*w&$jK)PtO~!>w+VbWdD8r?|byO z{(b@BV|_WwUqWwwx%|lEbKm=aUo36@ex5sHiwbM&RFnTwiE_&(&&z*0=kdJXX_lMM z@B6cF-Jj2$>loK57AP|wN(-SE99Am^+5McNkn*cT zWKC>XhrQi@zOCQZJ-L1DL`c?EZ`HH@c0X2|uW&q@tSYf@PWpWJ$%|hHUTouC>&&!# zyVk}z-vw>9{^R`=>lN3r{*v0Z^AV=Ux~}y$to;}LKIZm<`B_HhS}R+{)|P07Oqh04 zvhYyw&uPhb!!8~2d&qr$;g5g%3+v=x|2m}EaY|je?^eaFD;JyAZ#rGoD`z4k`n^VW zw%k8Kw*SYQPwf7b#S^_lVkW=^XZ#T?iu?!Y7Z)}u~a{YfLE&6rHtpKU{Nm9uh zvW_~|JpaA9@OS$92Wg5~t~+;q*U(tIV6VtYmC6&HPU^)mYtk)E&0p%D`@S>uy~v}j z)4waJ`Z9%uEqTT|v5VhJ{gUvO&|H=E8p|{PJxkv4b27JKfrFW8z4o0d&s=K(4fj*> zFSWb8YeS4CSeT0RU1k)HKI?ja%e|EUswS5-dKNM`?b%iO`uhewX@j~;0_zS-Wk%|} zcx{(2`*1~t2UlQB%=yLa8Cqel?b6&c=d3?>{d2W7-(%tWnC6I2V(TBZEmP|&d=n`n zo+;Dx`hU^7>ehI!%mB5*-A2l+|G&Mfds19{Y|jyiEUwAN5B3V2{31NhzqL^GoaLW& z8>eyYl5ml`u&FlY@MhoGnP+yT*Rri`{(8owEFj_IPQ#fq41(ORxxDI3d@R8}o9VZi zuT63DiEW#*_P8y47rJte`KMaV%yb>!bLz#x;mXgsd_`hnT|VE>_L}wa>i_7@W)s8M z=}Y$1EDealJB){n3LT&_}^=3IO|v#|3=x47AZ?>8kSCYxWl$dg!LXYFnl z$$s^Z?)^I*@_+m-uP^#I!$M=`4%32ra)A;BqLK+$rH@1%-g2+yWLm*`^!CD`(MtL*6&z(ZBgR#O>DJFJ6^@T zKhl3`@3SjXQ)TMA!oQ~9-CeLJJpN1VocY#!uix?8`(9(?t++~&^>1T(OWnUedUf!z zVYx}`o~Rj{-cK*s6SXf{w9T}r`2B|(SIwF0PfrQU*;P6_+vEM#R^OeA^)?HIwU<84 z?mKh8S#v?rD*3}(IS$=j{Cn}9_WRkqYs>#F|MatT>x-T9tQXs_-N;t{&|;VLvRawH zPb1&DKb;=={QtkBhj+ZacK$(AWw$~3HIArr6K?)Bo*0~0cI{a9wfCyt&mOHz&3|bA z$M*l{_YW_%7RR=Qu>WPPo@_L?)2vAAa?0xag)4;aR~Lz|n|bn>$7TDayjML|EbZ(# z5-4GwCBwCv|IyiA{f(b9rbjzi1PcYP3^bZHd3KlbN5 ztx_f5DJ+v~#Fus7Qx#efp`GQuG3onfjkVfGA3U)+BfD>h>*pQ21xyNxwyjODy(S;) z>2xajZCgy&AI3Yrf}V?ae=K>`UuZU|AbWXs?c}n$?n1F2-(=H)^8n{SW8v zw(IUXE1hx3oPFcht1|m6cO1EJW(CWklxeQT+a??^R_rQ!cWj~Sl|O&_<*kYfv-ef< zZ(8@yxM%0DUDJNluubK^-*&8jy5)`JqJ7=TkI;?;Lo+^r?TJc1&cXq;J6I8tJ@m z6B25^yttUR=;7n530lin*F}|t1!e5}f56V>|Dnx0UM$)eTMjC4muNY&M=S1rokNQAA4Xw1F6?VX-}{FXYud-%xc5p zb4)gWR@;A?^HrK>l$lEA=qpzau zd9MAV$^%#PHamG{a$d{7;o?|hW;(^~Gmql5$v?${vSbB|o_bwzDW1LcOuC}sZHL4% z-t(&G)bnm;&g{5c)%f4UH}#;*wWJ%I%@W5nWu7uEW1alK{;OanL;jsTJD=|Mzh1e` zzRf{jKtT4Q{+pV3?)}N1iw|wu*{t#9sl{5>^>c2m`TqXpjvZg4*6_>D>hr%l>)6>a zlWw=OOE%QYZVm8u%k)z_`*S1zm+t)=_NY$`mh9Z zf8Q*>`;cx@?JllLqjQ%FF9vWBo0gf?b8OZ0 z%wLm|&+TYkx#PL@>W?Ritv^1nk8k&Wo?Yy7+sc0Cp1GSgDD~VeNLs-;|DrP6!`ABc z$1l0^2WQM~a58#!MQN$2bzz8*+|PevI&(ftu}<^0?hXB@VK?*pze~0C40=mMIUnif zvix(GIvbX^aPO|@e`z{-|2{m`n^$l@Q@$`;&~ID5L5)V&h1}mNw{5mBliw4TfBzSk z@AXNt!Y((aMT-33`agAlM#|Zx*G#2%WXIPmHj_|4`0Er`o{BaH%YmBvh5MrJcg;Ie z>~q(9ZP1$wZtJh**St7%G~vUZ6r;Swn&l#E7lmi>Sgzi9;VsZazQH$zA#BArqsD zqYB^N@2<@4-1chNqiYk0f4<$(BEC!Oat?)C+;TKhinOVqv2^^mpXn*8tM{DO*iH8Ovn*E?K( z{a$g_vbnQgoS#{oFFx68*$&$&leV9f$tX_MT=e|BOUcJXnH@QtTJQJsE8Bg|Ji;%x zMB#4HKG`?7q8onBuM`S&PBv(ZddXhm6TtpcK-Yii6{U&$v-)zQvbzLV@^VYYq z;&bTIgv*m}Ev@@xtG{W#?d@jA z?g^ap_Hl0IJC!_nxA2R;^V#R0FX++Zs=9DvzMRIFUo_{%XPn}6-v1%FLH$5wN)oLsbhZpymuP2bx6_nm)x-+S|_)BK7v zpM7lp>VM&}4c9(Tjq|q@Vvju5oweBe<3<0NV`s0fj47Y$dhMXlzh41g&Q#l4)|B|) zDGke)S^7(eZ-VIaSKc39Mpk&8(D~UgEj2Kt>O$pAX|p#^tG4o8PVY&PyV<_eFoMbE z=~myWQwc{-CWW}RvYgx^a{v7Ey>{o9zk2n$GN1AGpUu(}ubwELbaMNO1p(rR;T;Ja5y@l0C~0?KfWT+ZVN1 zBe!cxM(9L$*TUwrf!CfdoaM!nXq~a7$w!s*_PJL@I&%;D`g~EIm(nv^r8{-$ha731 z^DiQ8x6$VBR=w(xb{h@wTS5k2h{xFzt2qHQVFu zLhCxcZlsBAl2zICcb&$m)puK-UH#;`ZiGR9;n7Dg)8`$Xh}) zWxM@HhT*586WgyeMSqLD(s`FdcFX*4zRPN3E8|u>o!n{I68`h@-fM5{dgguoyeH=8 z^}QP=Ot$|Rmg?y8{KD(mEhmc->y}qv?Ehb3=PG*pbba0bXBBxw(-Q4NE#bIAN^3S-PyqIWHo@HiTD|zq6C#Cb93o5T$33|#k`6&g& zg*Vi;Mo$#9=eT?$r~hax~`kE@>3`x7PP*MNzPzoyk(BX3Y(At)iaYb_t07TUzq` zuZ-@ZpL^54KmO|5x}ze?Ow9lCy+l5#IY;hpso?lzls(Z^_jIdqCf77!r}+7@M>F61 z^)$5fU$VRUK<%yP)}>~*y7K~$+S|lG-79b3ve!S?L9G1TRB`c3Z-m(k>bkB=#!I<- zs3uz&uUo5s^xhhun5ygH6CK~)U$lI_!^Q7)jmf+DlU|&e>2XH(p_)n7Eyv9qYH?Yo zIXOG8oRD!l_|}fg=y;&P#GXx$g49!{mMtycUH+c$Ovv)3J6o5`3uSv6|MAK5=hnQt zOtY^&cyO@U?{x5e6@{tye|~;$9ehMcAlu=(gJ$FN6BCv1syMt~a?+~eL&EeWTY5Kd z-aPlf=Mxi^b%oiN&U6>9oT>9(F^Vl>UyY@h?yf6GRekRW`Azzx;#|llWx^p8m%V6V zjaPN}bGhdM3-k`I{KyzXtyLS4lA@?}fPR zuPx}CwZpvTS61G)69wI!%B`w1OjCuPos;Z0mF|0ZplkVr>Z2Z6E^!C;o$q|4H#hS5 z-Cbw$MbBTHW1cQFsd8EH&sSG9v~?adIrC^t)Vdh-{>PEl)IS?+p7_t~Yiw>$ID2dB ziKKmtEgN+sb~A1~690Uz#uACVzL#!$<`(oG@h@He=w+?x)?1&a={!thZM)8O$@-V2 z;=|8%Z?iZ`8X9gzb|?Q1o*!Oc^LFd?52v)(Ke*(rUuyp~`1$ppA9;=)sOOyd^Srpp zgo&4WGEWBXuuyL-mNfLZ(QMJCcI?ESs0n?K{$Jk3WV7)RN7kz(gJc(xyd6m*;*($T z|6OgVeO~MPxxMa%$8Gm7eD*HRXNL`Qw3*n$*YUd;=KuKcdxF2PbJ3^OLc3%y=qxUe z+x+}(X!Q!u-7?AgzOI5#mCmM^Y~1qaqK)CfTfee6pY#Cg-2N_WdDK%`}}koz?p{%l`lJbh}|*pw{^v z&ywc!%vMS=`F1Jg&cEmSkD6XCHb{SFaozq_fBw4r0w>t(|8o8Na-*&%dXk^+h7Lhz zBMq6^lO8{xJO8)K=|~sH`LBKp$%-%5vUudQ{azrJ%?i16iWhL*OiA#1y!>?04v$~YubtMOu)bTo@`BOytRz>Lk3J{U^2B;0 z4FsN+|Fzw=?}JUz{*S&-&dhY~ceMWS(0bP@f9>o0YjQ--H?J+0PT~vyB*8cJsOWN2 zzNK?d{IcCJzvQt(?!@kGaC~U6%hk?Mkj!dIzk!N6*8mQn18S-n6$G9vIm=^y{!{f>;ILxJj!SEm zMLj;goS&_+XzQw`6V`rXp3DM=`m_ z9X};hhTLco+^ILsV{#&E&{{0A z-FG{!y(Dr@wD|<~)0$henU}`s`+7f$NqZ^cBWHRhvhs$%;}8F7`A0q}Pd%Z=?-Evd zY{K`CTxWypCw-pGD9N}#e8=2)KdDP^>UGLgx&PhB=Kb*~Kg)3b>`${S`X9vUmxX`a zwc_>4zEg%?!Fx2KZkAl;zZQ~kbkX~O;Jxg3AOZ>i^PwBy${`n|9(XqQj_%hq$ zbF9}tmP}}@Xm#IVTbg0cm9;A4s$fLm9_ICVv97%jI3>(dM9d@J9C@vM|ImG%eT+Bn z7#y1PfJ5}izb#v(embYDSjuR6@#PBrwTJ$^)VvWP(fd~>d41Frzt>I|=S)4~blmmy z%BwG~&CFFld#$bi(xjlM8m~g9+>0s~i!T;jQ_8>6Z+iWD#f7eg8I?2U{Z7wS;9~k) z|7{(!!Rl8z_BX55RTzafu}dGi=j>2$-s;u*u-9={SFH_QeJyJ1)u`z3*tL^)scUTt zbeLf4ETPyqVej`p^Pk^&uO@GpsKK>O?nL?ZneQXtSE^s$Xb^shZL7eK3C|P0iPxD} zOk(4EUdx@?8`B}-DmL9DuJ8PUZ!7Dd&*ZZC01G|IV2w z&7V&D$}4GUa2^giuGAq_KJ%vZ$6uS&0}MB?JQnhESdcF9`C-&0-=lAj-o39a;Jo$9$w4G&*PUOIln_(bV+&3$LRvz51o zMK8h#l!r=!|Rmxs-w}?9VuHY6QZIR9xYmN_OOD* zvLh`DE6siTUd|8eoqwpjsbNOS7#k<;*mFI}&caM=FZ&nw*Xz!nsQhKfa$cr;l5F>em%Y~w-^`M} z@a*B?8&*Oa^kpZz)UN8a(b1VRYuQng^q7<_)v=WmR;VRkxE2&3f)3p5aS@YyyUtS7adLlEg{$J&vN8Ocb%h6eO?7q{h!D3a~C`P zvsu6ISJte~bD8z^_bQ)1JjAVkWKHDe2@@weem-j2_EU%Vwq^0NEys6%x#V4VQg!-_ zU0e1)Is5f`eEy|=8A~DOc0N;|NW;#hoNr{Vgw32}`~T19x$*Un<4PyHeVU-?%=bfW z^Z84&=9y#)g{_OpRC&U({M-h4_hnbo=hvqxx*y#4weAYE3qjVth}l0b~pXh zgmgCCZ16U3kY`crbBk#Td^%*o8ZKU&=NpYwX@MwOgMC$-DVe6#aU{Q3FW zF!hwk=bZjv>$!Xe??tvfnk*&m@}Xq&hG{(U*WG$}Hm5hw?fn*_bwk ze(l@7FKcPoAGNVz8!^KrWBl{stNZ@K*1xl|!`sSlHN==J$&oSVu`9=zgy z{GtB2&%?x%y*=$If4)5||8VVer9>6e(gW#x8?V18e*MQ-edeEBiPG@-@`tNSXP#ZM z|IZ@f56`+{k6HQnb1|OcS+Q$XGSL(>^9$O-tl-JixShrQH^6&onzOEc+ z_2oQ0yknaq)%UbX%sQ->J*7?LxCW>6ECwYb*}M-^JN>xo&;2OYI%kvl=b@VM$7TLE zdxO{4cAg3U^x%$XfJ&pgvH!E!(;3%xUYx=8J8hcMB+U&k)jTXrCoEGgU#D~UzPx@&z*QXB&yZ&BIU+{?kyW+=9rys}* zcYoRa?%=*e<$#jYsRi-zJl74CFZif!=zb|(Jta!v$_k^#ub21!(eD0s&C8otZu0R3 zTNT)EcOL$=|C`pY`Sp##wK6Z~=tX&7_2D$EG0^9Kr=oPKWnB+fl-k<4N}sPyKeGF8 zi1z*$TLNPKeGYu#{Loq7NG~R`olWS(ref}o=Zr8 zJ5$R_^q)nO;-^*H+9VSM)wb@_i`^$IeC}sY^9s4n#d}ZuncA(Ky*4DKxGvSm{M=Hx zqByOyCd zd}L>4=H;wuj872$rRJ_+bEf~0!$Xmpcbw+yj#}N0I>eZzzxeZche_cN-KxSiB&ynY zFTOt6gdsdjU{Y}6nOE8M;>m&k>Td7&zgkYHLNG9{V2ep(qwUR~$5_5}Oq|HUz5JWn zTN`O@Ki!mfvtHiZrxp41)6zAzS3}H$IDVh_#y9z3{lWfT>)dmihb~)tUA%rp zRnghg>sKGOw7vadb+Gy*O_2hJ?7y9pzrGXfVl1>RyzVYN!8cLn)9+6I4eKkWR<|{? zt_ykVXm`Wg!`({vlI(uFTAh!x4t&dBDe@{O?_IXe!kN>*EqEAkMM8A5|6z}eg$1)_ zCeGXObc>-#-|G{}DOECg3m5!2|12$uH{OGrIQsauM zVqM8g%1q^Z;}3n^J;5j85p&Fb&xdJi&ZR$A*7&30IyI?vFPoP4-R~V;$9g)I1-xdZ z82e5S&f)hx5?kYOUF2=p!VL>Lwix)Qyxw>|xG- zT_gBbm?33era%@SO z;meNm;tka8<+--KhNv_^{{e#<~R~L`ZSNin8p7YQ4wZ6Q(OpgDm^1koEKQ1~uoM^np{PWJN z?aLTgKmEV@q-~bgx)?dz4w+?%um1(?_+X;^xqh9@1YO>L9bY^jG#XA@=H&JA@wQeW z1KXVqf;-o~Xq55VcP8>H+p%T-$3N^#-l&=_d@uSd6DRxG8MDfS&dNqC%ihgAPi+Ee9|I( zW7qZ24f{pI&6198D_ZhF;g*z(J=5O58C<&$-&wnI=LC+m=gzE|{pMEphTB<7A7`s= zxLnfKJ@$Brf6*?Qfg-s+2OtID@C%g(OJ|} z^!UC7I3I-2A%7?wfy=W@xNyk~qQj z>3HQOPxXcQ_xByUv+2~-{c)L(V=ErAu8CiudEez(|EXY)#mibAbvmy8#v^5N!k{5F zDvIaI&CThv_p{5_2$jkgtZ<1&R;*F-0W3x=>~THJR0yWW24Vxu>O3pTO(|MU@K{<(B|oYAel zmsV}_b@jd-{*`x8+sSovcMG`YrWjjaooaY5;?q?v%EVQX*oBY`4=>tx!;f(tnt<}_?n8?r@^8d&%r2 zmo<0oc;0A#u(#z>;PtrUdm^%*i8}Nq{BLCDO$@4Tl>Y7GqQ~0paoEyv@ex;Jgnf@!=XP^ACe10+$LMk(z1{l$wElh*`Qv@E+;{b(wr~V5 z^T~{t{(3RWRWs9DCQbV9)?*vyPHNzLT5)b!r;lO7+dpf5h|Sx$zeU|7i;cD7@_eac zPVR!E+x~`HoHSJTJ$U@b@w6AYXK%H8hVSi@Qz;Ywk4r;i zebWWSQ$KxMS%3a``1_}UtGjRQzoN6Xt%a4}U+%}I&$A0&p6v8cFbscqVaD-B)mzyc zAFQp{s{Vb>ref7o`H1 zR`$mmXQw5dni2lce&#HfEvJ;#xC4Ebxc++dcKPa$_^N-xUdic(u4wN)0v zl5?e2a9K3n^P084@yvzV^GH%bAnQl~%mxdQ)?xro)UNRMfEJ> z#qwNO#GFH(mWZlIK4|)VPy0x3cwmBM#EuMiftdOm4_>%tD?K_V?SEkXdWDG*6`9*b z1J_4y_9*uGe08$V$M6^bf4{T8aMi0zdu!n?zdI9`|JlAh@I#Z@m;D;YjP?5t=u>$sALGQcerNT)TYl`ttEs&+jJEQh|FJKn z;ldfs@B5aqU7Qxur96XutF!m?8f){Xczj1G~VYT_)%_p|XPL z+iVf;@=0zBTAck#(SLt58nwOyyo3+`Xwi1`|3cgQKrFxw*2qi3<| z^9c6Y|I)5I7YF$~t0o+l_d+CWT~uSsk$X3GYM;Jf{PdCk zG+AA#6tS&!+6GBa3{+H9C+(By`m!Zt$-DLL@qtZyLsQpeFEtG0y)Q6X z$LbKXT=b^^hs3uNnIB!465l?@R@FxP$VHKAS*;FzF|qB6Ehf)@#4Y@hQK|U-LdL9w z{9|pt)h8MJ%%5}RXIc5rvY9Bxx7jf7PR5zPId*QnQh6`7{A2vLr6t1Eb%x@a?dGxk zQzUn-48HnSZN}|8uyo>4>l ze6yNO4^6#vs}gEHmHgPvTHY^X@k-={aEqet@kJHK?Q%4uJ7bR~^DyuD-NLeW=1Z3| z5zo)EuI|j4tntF0K{IjMc?U&jF{{-p{v7AMT`6?){+rc~6%q2kf1a?qp5@UmAn&t; zt+X)GP%KFJ$CE!=My;7_w^r)S{k(O*==7@(_nM}*r5V^-a(vwDEE^c9%syw$>cy0oUO6+)boN*iLwNtB?7t7Klj-F%mpcSCWu-%~o~qnQu1_HOv0r{_(*5 zBfOU;cf^Zsbt#ssXPCEGO>w=#>?7A4SiZ@3sMi0NKIi4zUY)UJ;*UW28+Vfr`<{t2 zluW%A@pY0)u^cgd|R&Sbf)-wC^#%2L^!QW*=&R4V?2MpuCF(B;WI4x|8;%6 zq;LGpqQ0dII_|Pnuj{M3>j?c?_MqC8Fhi@waf{OiH9?7ZXC5F1&W;>BfP zzqg(H@0QywQgYfM7g>9!GT(kfUzoRD{2syYcQ%RCW(w`tG56={8DiN-G#cNmIR2ny z=B~|rhjjieaI~Cl7od0RwhU)h#=Pv)-(qSuB{0|hf8>@BEZWrmQz11-A+~$Vgcll2 zp3g71>1vth+`rtkTCdZY?QE}Bhs3fnHuhf+&CTaH=9-oN`F77$qQpt!oXu%29d~&i)Bkd_?TcICPo1wHyXURmFV|rIw^pUD`mfLuKfZ;WMu&PnTs56pu;<;U z)Dsd@ngS1}aNTNDp77|)cX6?V+k2c;`WM?f8A-GjzSwi`&Y7uqyL%R{_FwL4`19x_ zPS3Y$?b5fTi+6DLRoQHHi_ZJKqeQCsu4tP1#Vd9l&t)f=7SLM(qQzw~@@U9O^Zx=SRzdiHD_^9gPb)F%|<>an3ZQ%I+>NNA~ zgzH}p#F)m5uGwcFGLwDT+kY=Jo?foyWdHj}LO{stbN9mNg}dJ$y>~Hr!vEK^AMUI( zjX7~x?o3P$EIH2mA;Nc#_E!Fwzbi{!?_80JITOngHY+_>b>YUTQfWG}xyH*B-rSl! z!Jt&jDL80%1oK*}lCRO;_VZ7uFK&C+rt;=W=!M&C*X9b#YKK2pFkC49^YW#Cwg%h& z?2Rq>#=#YIB|-l0-l~oh=M|jhvwAIO*>m;ARMoa`mE{R#_a6)YKDkn>?Ln^B>lgbg zjLi4>{z&mY%f7SE9SX>W3fv(XUnaFuiR%fef{{<>QY<%zAvilejlCQA^S4*%kfh$?q8YP62I1% zD{5AWxYxs`prTWs&89tCdVTrhrs8(1Z_kzQdi!iU{^Q2ZROcTh{~c7U^Qfnm)Z*=rIk>Dj*93M`HJ&swcNx1stt zQ!}@CnfR}k{LGaL7v$T%-?~n_?^{N8?(;2Aclo;UpPnoh*gbQ-Px`4s^PW3AIV4Ki9{^;lv26@{)L}i~@RinM7Kz<@;wqe8DZMX0Lo4vki&4Pf?>kX#A zUre6dQ$CaX>w;+vG< zY2pi?zACLw{@-Tju5-VB!EbS7qvVbPnWe`fn&zE4X6KwSr~90c?3?yI*Mg2rDI?ZjpI{14OP0Ov^9BxPJcbj zz0vXEhevg}IyNg^`m!TuNy|$%TBnOE8{Oblp8WLHi74weGYfKd1tp(e_H`v&)Z0Ba zy4~DtPB|MIbsxt2FLb>fb>2ZsZ%)~*%(k#w9?J?;b$rfuiM50$K3xR<9O z-sJ8rS(*GH_WX3`Du-)U`XRfPeBgO zFOA`Tno5UPJaCTkVaxn~miLMDk?PMe&po%x`ih*`a4sdSZu6B#Nm1=f)V4@mpSp$b z=lSPx4psL}LQ>uuecrNU#~d#GxF2(-aV+<>Z=5E*e5R@Q=bc?WnHML!icbyd2@~er z?d^W&G>`hF*4L{xuGZi$6cOO~#J|WXPEzT_;*ZNcE3=P8He9T9eBJb7fqPk=$%5Z? zbryA|miDu)<-_9(_1%2!F3za^SI1@jYiE{C=6_j(MfU6V{> zd@=n_ZQnJ|1;5|h*IJ%aOz@5JEA{Iujr_vwr70foC8T!w-0xR&#EwinVXl!VaLDF* z!s)bMUzf0WWqm1G6YI_^QIY&)!M!hMZ;S6rMFp z?itU5Uj)=fyvfizpmeQF{>r?jSG6~ScQ#LqnjmA+;Ni8#GvWDKR=@9;f>vj(aEbIa z{JUimr|SZa!fz$t-8$km{_NH1br1GG_TGwP(l2X+8)v%~L@v0v@?b?$D5uxw9Ubph z8>TJDb$N9lzdosI_GjfJ2W?~;YqS@srlkgU&C@6 zi4#4u_|AM)bbL{LO7fVvR?+5-Z{@GBNz7OSiG#)*Yk-Ac9hW)AZS%3WvlJ|x)ta?o3zgub$Um)Z2zhR(F9d$;p>&&_nh#HZ`a z1Wg~OwEaA1{oW*MitxopzhK#z0c>9a`t_@m3>UVP2y6Q z{@Ga8gHE@OR;{<{U|h2&$8CLaUDx_v-^?5r$EeM}E^nUk@zm>8tJfLzyjihgMH$Nl zOL^3Ltik@l&}&^GIe#^TI1Mn@~Q33?jtK5}DfWY)~>+dhZdJXhGU+V=7B ze)G4rk9*B~%!=}rCSH%LUTes!+nddrUVmuPhERcnfwdVqGm6&s{@<_o!rr8}uF>Lo zm%TId$76y%^3uX>myaDuKKjab$B#piAC@gil&fXb`%$E)WDuUfdU7 z?7l4FHs7zDpNGXcY;BpC*@b47Dkjg~*QvAFR^`)GlYrp9qd^|WyJrQkE`9pJ`hU8I zkH4$zae$nHaXgj3uB+fz?HZMXCmC(sjc-`6aV{wkRV@x+cjbT{Kq@a;+M-e7fj55G`B34zcw^_ z>*aEmxBp*NRR7;lxS~%Y_P*vm>Dx)mjd^qWU&T26KFyr>rYz>;=anUQ4`k?UjGhcKhEaxqDTQxV|VjIwqd{r1R(Lx>ApsZ+sU`_?BRFK61K&et3$W z#*x?W=k?XC5t<$L(#4Y%bF9^pIp{o8KkJ+~qylzuFHxF9gIH*~ekwqsG7Ws*;v zdsmQ^cx=;Z5BW`>m1IJm%KOPq`F-&5&EzP<-P~odC$$nqdX3pHcmCe=ckS*iGJpTL zFf9t&7Bo8~d~$Ec(Ywp7_UN-8`my1XM8S##_LzOus(h<&IJ<6=C~Ps1+_=%$->IO= zKE?iH`ISFU1Ap)=-KKY5K~Kahq;zS>`KznkY{|2%iA+GGL0AAhUAdCfW=*K*uQc#uYe=>74AInKNWs@8|2g*@SaG7T>qqrO#{yw}^|j&hoZo`Cq-$ zo|T6euh_k2jo{L{eCDT`6MY_v)E|Db@zb^SuU0&8o)vB(dElyR=&|+syXW>K{9}#s zVvC*n(0ic*zmd+`xjjrj_iTQted=?)V#McppIfTG=y?_V{c3-8PESksdJ*r6e?oO< zf4Z~ti)>gBu+d$vt~OEQ&x#Wpw;$nsomrTE@>)@r|8M148@BoExcyoy@id>2yH4C$ z`?$3mAO5(yYk~PLt9M^rvzd3#-nYVg<;mzq!;QKUGhANFT{H>zQEa*X>~dFpob+0+ zsN|5zv9<5q>>8%KE6kg_SH5=LJ6CUKxf=al&$b_6?7zeyaM!QiY_8wy84_FEUeEf@ zHEUIlNvXgqiR*`E|6aCq!K|iZo1&h(RUEbyjK0 zx_8D=M;4WOT~xNU?R~AgR=J?@>w{Yn?#uo@a*e;#^2H|S-Yn1FdsdfXYz3|wGfh_S zIq11LZPGQVrxC`X>Tmz9<0$!h=s?GhvRkWGow?Y+FfTOLCPi{1@5zhPN<%ss&zzYs z!Oh}+m+E`pe=ZEGcAVS4c>}}F=Dq2aX7&f4e-;;B-5UPj z>-BpsEH9@AiAC+L5V>prdlvnzR@Bpw4Bc{Y|Kc2GF70p1T06}5TPdFMv&`6- znX&HpuRl|-Fs*Z3B7at-ZCTO7cMh}Oa0Z8k`>cKBlQK2u@VTz9Uj##(ifv1$Bz$x4 zD9=}6S+20tU22l@rHAh?ZvB}ddiPlG#NrEC-pjw;=!g$`&(PDgx~J{mXCHmS97US(hXD73Z0jHG=1V}v#Ad*UtP+vM01(8zpqP9 zKlA4;x1(IuK0doE8nJybOSVSij>&b5k)l5WZ(AE)5q3^uo;XpgjnUKbOTI>@{?ugM zd!{M^=c0p~p3d%`C?ni(`MBF+f0cPXlPM6M|>jJ z)6A`B{gU(fc%P`8jdY7&I`ioiKb}KVHz(B_ux*fR&S{ruzvLpi*=WM8ZE-Om zvL(KmY~B59;_r!HnYP~46nPnT;IU!ms(D|QI?oK)F|p$9$&ZhPMA~>?mnYvjEYjj!6;+Q!RbQr1N|E{lEg`p3d{IiqL0ucpmxoVGK4=I3`ZOL%oA-#FaPpMUOvEz@Lzn^+pUt-85ru)3po^f}|qnYiS zx7$S@-Wk(y_V%Wk+Rw}KEZ^1sC>2`i@n`iqla9H!E;=l6G-TSI?^5b#ShH@I$nt;h z_>3}hjsG~+YAWt4WPTPfduQ*1yrnBLv{x@Z%$)0X*Ws@&={kr`ABWL5KpsegYUnZ@bv-#Mc zkCC^TvzHp0RennOoL+y?=E|(KUt?bPo6P#U=KI1U?&p*iMvFPc+_AdGdiJ7_k=<*H z{6m^N56_x$0*dK1Pd_`e zY<11P>}MpRSDj-Sw7f#OI8^gleT`sJ^;d(}6K3q^`W98Tp=$59bJI`Ej`lgWV1MGF zI^%WRocnXCTlBZRIbr^L%C`mQc>IIKUZ=KO$q8((JQ3p?zi7VRy|(cEi#q;jWoa$1 zQYzFDmkrxEiRE;Z+$~h5I})z3%`wY968J)Ss``#kTF2&CNL`ut@za(WkIc@zwJNRO z`s%IbGTz$@!cNz({rL3wKHCt1Ijp}gJaDk7`7L?E;$h^D*3O6&!J-sBi>W{EUi$y! z;me8hAHIv9+r9U;X+rNpkd)_^({*6^J<3ZB*&ZIJK{;)$2e!bz& z&fM_3ue2a!@$D^lLk@bK_!F|OSf=+YbDTx}mAz@4*=N5+`{cNpCBIzIX_bEIWn`sH z(6yiq0<&DEJ?hf}I8MeQwuJMtRjQ3Oh1*d3(B@Z^{4bs7-cT{OZ-`&d(D% z?GjkF>c4oseXh^7K+E4T3(US6q!1=A0z0iw486S^LZd%^7sp(bfweokl?Wg~Q?vfL9JmK;6 z_^vlnEk85fd0aRz^yc-7wWZLSW zBi=JF@Y+8yr{481P6#YE%z3`NN=qiI=k{hNhs_Vugz8qyYqLLHX`Su_);>$LC z6Y{;w7izzDY1D4%Os21$;$n}VtqxOc{nzh(GGg+#Iju);PgSjZm{D$gJ-YtUaigo7 z(^FOLq6>_c`O76K&9d9FDofqQ>^fgS&E`LO`!ef0mbmu)o_~JH0nwQ=lmARSpFHb9 z!og@xR(3;+I~OK1t(xh5y5N;-1~YIsYHdW7Y{M-S{lK-*oBA?R%TQ z7Wg>V%KDm2a&t1DEK_yM*s5XW?-wf)E`OW!NsTL~I5yDQ;=S(c;+DnVYWEeJ&f5Fy zNP2Vdi@gQh`z}YRu6TXWt8dFbThl9N<@^7raa>!(edWSY&qPPonUY73)Mjh`@p)S} z@3~a$mS-B;&s@uP%S8bS)~=uwiP<%s=@o2R+uV zeJnM>m%Fq1<>Ba%4lTKQ;}t6e@@DU{=b7Qs%C^v6_wtG9J3dTqb_{%4rQz?+8dD+m z{d>rLjj74`7ClC~HVve6Wb>hmJ=XdfRNv@p9YF4~= z>ds`jU`+w~)FJuy4B zH~Om&rAPL@@P8Ye`Te%-bsx86j;Z{1`aBM=(wFY|c*w&z?&|(_!zVM&U*wmXeeQLi zgVwAR*{N-7irbmv(`BVA+VUSo#yZYgtH1Y4zD~p+RaTijz5DN5%?i_7^zEI4R*=o7 z6Ne+Vm+8v=zAb!XgX!s6(m5H4sk)1t{}$f6x%`3n^w_Qzi75M}pH3V5+c#Igt6@?; z_QjbYv+EyYkWA*$dv|JgJX~f!(d>tu+|Sp}C95ZxpZT zjEB#Z+LOPQEn9M-q*QCIlS%T`@Y98-eZyyp)}>!F(|XZ!c!#07!q$AFX}a-^iHF-b zO?)&Pd9@k?D-1Wen=pA?-r5{C%jlAtEBl(W+Di`IFL;x;vdz7g^>~^5mZCML7w*n; zyKHtTyt%pQV)vO6?)!@JZCfI4Kb=4KIe+cdimNdbq-QUmSJ@bK`l`o^hv~1>7WT+r zc3N7gzV@@>%Z(MkJDpFZX2hqJh9*ohfdUQIkDWoJQEiu=^R@X z`RNSb&3jhOQiY$`s#ukkvt+hSS>qD+H0w#&TSJ}%<3fI)OY^qPQq#Nkbo~M`7sg+$ z=N*Fj_dT0!#$R1{YW`1$SO z5q_MebmjYlf9SLAp%3pAmT361ZP?0GdUrz2ti+!= z(W$_LISRj#v+yBWaz{^-w&f-3(xwu)_O`kqrt-+bA3Mc|v7 z*~cSZi_E20)=CJ!N?>@Ma6PbG+HytuJo&X62Tot9(3>ohHJiO{S-+xoFXp{^)wFG+)=O1Iv0ELo?uy$QA3QkR#&3Tt z%cy?xvR+fQhN##Yo}k#h<+3l6rwDxJa+K|~2wh#KG||K1SkKBe`V+T*jZc2AyubB& z1Luv6shr3DKdqeA#O+qFUxa7(|G+iXFTPLt;eYtha=GJ@^;Ht<6sP>##P}*>M1`-;Q|?o`t$%5X=;3h3ea)g@{2snuzrRhwEvfF5`^HZ}5u4L`Eql5?D!FAp zUr^SuQmev!!jIJU;`6rR+wT;0e`L*>uDO3-(yCi7EW2xy-gP|8+3sC=;`w@s1D6=Y zdPJ7^=46}B7VndPy7*J+*3TvX)>ThkouA~^?P!*EM&fXQcyjDhugy_BS(#GypH3*Z zZOom$W!vYV^()lcroHt%Tg0{e$@{Y|41$;D&!3;c!hh;}-ZD=E{yCOPvz&AuRy@Bd z-Z|rEQjwE@&F}M@I5gLIN4uH)<+`>g<+|Dz&WC$;DV_bHq;=wEpV_ZFOtn+EUIu>f z^EuX_K7XOwM*CGW)#|PY7}Yy>&M@0__s*f!s{{6y*_NHFYhE0?LWWsT`BdA597}(( zD{>}M2TWuyJ2fp;ujSiabS5M(#{W7)$~BH)(Zm_-Z9fu~C)%ZQ)tuOo_w3Kq%FS*{ zkE|->&L5OhE|a}_{oMOE)zvjO!maC`ua=E}KlgFj_j{ImWsmQ(dj4?E^kS*!)z))& zX8C+xELrY1an9#Jo4+sT+HO~w@$g|njn+&PK8b@*9?ZF>>0Nv~ZrePQ_cBjke@uA! zibk%|J6u+d}3Yw;b~q}qQYWbofE9)b1zG47EZZUdf-dOme&QJ zB6jI?pX*yS;pTnT>-R743m?1D6PPV;8zE<=6SnqtYxMir#wDElzSycHIXvHTEn}4$ z<0Ai6=5n>A+-iM)xHd2AHxRmXF4aSL>5?sNYTLXvWc}r<*{Ue5fBy8s&U7PBp}U#) zt}!=GX6muOoF(LWrl9cL1L^OtRHc?ay7gpjX?D1%-ZRBp)3Y~y-j|@hdFFw=i<}DI zf4y9AO>?v7+Rq2A=j$Baa^NMp^yAssFRvO}LmuF7lhC zo1V(-Rn3bLsQZ5-t4H!0fA+QaPCpOTsQB|Z?mT>C+nJf$Cvdpl*V*y+)@9w3Rn-gR zw|tR*^myXI!*L()@Erc+arxHUiI)Cf=T}`n#`HGd{>;@?mcOs9V~<~9cF1)%|J^O& znY(^osg3(4?%sIoIDgbO+5MkGS&bL&;8gp&eVxbip8dZ!f7AHa+3?)6#^hhm=D^F_ z?Th69D6jhemCL4`U$M%WNx8H0?$xOGXU)5#o3=&$y3EtnaC=6^l=y09De*JTPu{ZznQgqziGAF>#`jO?v@mzU^|SHHwN4CN8axY% zr?&c9PFJh=pnLs|f__$6(B;)nUbE@MR2ixDN+apT&LUv|-NVwNwiUN2_0!CzVP z$(yMUJA<{%FPnGyR$j$ zut)bq?rmuCPoU0avu2-HJ9`;NA zf4;F~O6wc>viY<6tA3U8K3MR5k=oKGR>k7qz4E_jpLxsHRp>tBbVu*EqJQtrGF&*B z1@2`(oXp;Rx76&|r{-hgpD(zIrO#ni+wGM)MfS_Vbrs)n6@d<yB^+8Ou+5u%>%<39=C~V6zVRE*J$2&9%jvh8wbeA6 z=hWPq&$P0`*v5{d`B9TWaf)i(oajz}vq0~OnTPhi7LdH)W;Izm^S;UY_wK(;EE_k) zIn^mJgd^25ae8Sw$s-8V|Vc(gB|r+GdrYq#H=nk_P`?V zafHvS$F9%pu8VHoyV*@jK`r3%)W^1lIuiP8Zgd+qYa32mwy7k}GR(1rvwH95*9y1h zi}bx&@GEoPiS$)lYD8V`uU@_K@UOEoJ^cL)(oJVZ^YL>l9yVsk-}_fj?&s}bkB;7B z8xC$+bo|ek^Bn!fvUOkWY_T_AYpvCcWiu_$ri2y5nBMod%M?@6 zSP~w6w({z6wak=HTo@7Tq}{lM>&EfJ(zm(4CtSZ5Yq9jbhp@S-?b^BL(%*l5CH*$J>HkLVEY81$ z`Vk$+9^14$mAElIZo|v>)F*~m|Xa}wm<1fN8+8w$(Cj& z@7^|ksGaiXtj*S0e?;oe2yA%9rrI49aM)L+A$o`PcebB8AC#v}j=tw}vM;Ac&X`3! z8#kP0 zU%5B4-EN8awRdr?g)fZ_bxMsS56E9$_g8|aOKN56`qPX$H$`S9`Ek8&Pgrjta`nyO zcbjxy$h)RLJC<_Dym9@m_c|w+aAp{lc1C~a^mK2j-*Pg3qp9bqS6v@GpVb@WpRYEF zbrQbVDEZ=cvWZfyaOa%eftR+6SzgJCi{HXydWEC5{B|%KbdNnp{o8Osxzx&nu zY{`W0Cj|6){8SE}-Q1F^as1mIuO&y>i-X_Q%n6d!+z0TFF?3G-`}nVC z!n7q5zuw)_YX8pZ*@@3zzh8Owa0RonU#2k3nc}#A zP2#6!P1LThMGqwd|B?9Y8axraOJn`GaQL|%83VxPbAFQUuM~r zaW40FG5?|7TYG*tGZ}u|$^YQF|1&M$lr4okS1;$ql+?&<hG*YNX>)}0XM!C9!8uiaybLJRvHlN#jB4^FDvOA2dSA*@! zN*P3$!_LGTN{7bRX5Zg=bJ>p{6({bmmzY-n`}X~UZ#UDWpKX-bbZO4i`q<3BnjTT! zJdvLK+V{`R?mQ*DIr#o`oyeq18vH+1>z>ao_lf(oS@H9wRqX<%nUB0~M?~#7wYxZA z9@nyadsfA4_01Lf9457`EI{VB|NA#4yTa|Nu7!Fmn!A3T*`bVI0m7?;1tuw}?Kl%< zy*={#s(zn<(_gkU#V+#+I{p1Uulb#Z5_NsYz|1f3jUVcj9P07N%SJzbz zG5E6V6ih5%7#7WKd1~#yc^PUOUF|xvqW%>8e*51gxOU~m^Sp~!KJRpqIJ+YwUjD?N zrSo^(;(a~A`CvnAeVvT%m*Pi~%DzR1_BW-@E7YoG`hMwvgK#aw?uy?N7%p}+JZZe~ z|NZlc)wlCkzRzRLRsL1nyNGkfi4vFiN>R2yf0VlPgFnT#w0vtlIq`wTt`+`sf5(Pi z-cjflWnI7hxa0HhWt*+`hu8d-<>6D~Gv2^|Z|>)Sdtwtilb3WC=G1RLUC{UWY~cDE z*DAtntk*r8*K~2y^XlI>&t0y0^US?;^W&MHtge0xFnFzYTe&KCyK`sB`m#R{`RfhR zK5Q-1jo)`?M(+N%+iu^w{U+u>o!p{$-JEATmWh}?zuHwL&N6+=qepR8J&{L*wfDJM zuU)c6|5*4;Q;$V4VZvM6yfWE7>^;i5W2HE&naqZgbN@5$&yLzK_tVcE1xLkZ{ZjSX zw@)VB-gr(0<6kSwub$yKfyjuS4@P?j$Y8#99TR%_ZKWKP3XrhU-kZ)*dMW&zPyL~%Z zIzQUZU0k=kdh5ZAOA{@MuYG;bWX)sRn*WwH{HAr(3p0A^7s` z@AT^bWt0CM{}8oS{r$x1-KKU{*CTs$%)f`dS-(u-=NnCn*Iyo%Xs7;6+fsPwTqfVQ zJGNW+r@gvSE4xhwn)Cv$;iKlVd|}K3lfkYw4S}7WZS`t+BI@u(eJqxg)FdumA7tz2{fSE=t-t zaq@icw;#;KO&3j<{_b#2_U(=!#f@cUufv%{>gGi6eG%sI!L0s|;FVh*yT3g-A~i*% z<99N1!K+^~o7Ge<=tc;vHL40Oboi1at9$!**UOTwq;1EtT$!&=;4-rQ{#M`JIhUI) zc!utoj1`ylq)ok4S3EwowN3cW6G1r_Zl8r`GZu(4|Ku!tXS-Q%tJy?8(Jt}lQx?U` z$FuyN{4(bn?{2m=2MjsNUM{Nk`Vsbb;exLxTcsym^Sfvwx`q9uZ=Ax~8o4a~>epX!8TUz`sn)C5je}6a6K+Sb~K7~KY-*Hj)u0>Xo*AKT18)81L zWZ!!I`b13`$M^&C_4~x+>%VBO+x5$+=G)EZ6;CeOC;sl6>*3{N;PjIJ-^)Oo?|*{d zgm=$ZXcTDGx@6PZ{p<4HOK!W^_xzi6TR?htm!-V^p<}+g4U;MsUDP{wYo6!nu7y`_ z^`=xh-pSv~t9xy3)S+M8if2vxf8{K!o7Z7Djlc4mO04sj9R5pUSKFm#HuWZ~ESt6W zmQ8_8vEYZqxo+-97ppGfKjkT1{`s?`&t`Qc=H?T|C!E(GFc1k3SLoPsaBT>eSC9XK zh8p&Imn{)%dlxO|G`r6xF5t5-cf)T(`~3{{m2Wb?$eT4To4?=l_P=dE%l(#{b@^X7 zW0{fQvy!VirmXLG?7XSVKb^lD)({?FFT8)}*YG9bav%FX#jZ-Y^zR76zjF#Uc19~y zloxJm-RELs5vlt3c)YHN5#z=Jch#z6Pm;eJuz2!z_0dINuU?s_ad=0M#Fd~!&pQ2! z3!OLfxAoZZADkMWRQv9C!FL`d<0fvMnFoHK+8(gWf+w?cWyR;u(K($|Fg&DN1z{X0CV?%r&h>y^n7=U2|S^gQIt%ZW~H%l0pJz7-G{ z-gnS-@rS}^t4mC`%XXL5ckE~oN%^Yjd(4jle{b&^Ka z0?pL7$ysHlzO1@8W8BW#h0mGt#`p4>Y0uK0H?{a|d-=gZ_|CR(%R3kIw*Gu`Bf5FI znAoCTpMR6v*dHGfPP%ArH$^(}c+*9PMY(QOqVs+g@K4LrJ-T~!#yiEE{KD;DOj`1v zic3A|-8d!S_T2N%ddH7&x|Vu$ZJg0pX20^D?^)d|-}KxSw=NE8Vn3_2?$-T|xxY_% zJkoo<@N&}f0AHsMVMe>JPrv%;&J>4c2H8H5%H=uxE-#)@Yb2Z{ao~=@T^Z@c68T(8 zHQNi5eWh($Zn;Nq%=#!^^5i1_Zu2!qmYCZ+-kQM~cI4dtDSY?L>+QPYe>2zxpZMTC zxA9_nyaJ#7w*CLCuHF4@u*ZE_u(t7psJXrzvy6D+@BX(w!hg;o!OK4H%oP||E%s#Vq11r6b~O3(5vOtbU%{Y-m&{&OR{+yUA0JBbprj85mwuAZ8< zMq>B2|H+1~Z#PX@|L&{biD?qEH>aOB>j|5xIAd1`Pm}*!9^dx4yzctXxSnS}-^}OM-?QPf`ez-s z_n;GL-px(?bS2nd^71XC-+O9*mo?XDUh*}+o3f>OX{*k$9ogwG&3%R11ZKJCMf_wf zyH~|LEBVsJ_YbRg##JSrZk-;Sr7F~Go0(R7%H+-OT2gJ_n-?;s*SIV8^YtolpJpQo%SjV$H z|4P;uu4-FYyx<{>_Rj%cp-F%IE>C~U) zoF+HYu7;`~4ZQtzU2I0<*MOU=RzGV`Sh%3d>%rm38Hd;HJ~i!tTUpt*kG6Wnzq01H zsE3rND|VeTFrHb@Z@;Sf*|tCPv;SVI+EHg~di|!{?e@K|^0#>%TC^wd@y%WrIl0?6 zB^&4Xu+}W!8@jLFs;R2WuGve)#5qwutE13znc05zQ>$k8%#<^1nECa))wkRm@3l1! zdv}*9-@46eo6f3axpMo;`wtJ^+#)w$KdwJq?!42llwaSK1vl+Z$d;En)7|9v@vrU2 z^X3_XO4XBtg$^wj|9kX%(Q-Ad=R%D)9cEnLv?As!M1tNT7Ne>C$pZa5>p?yRWqwars^*gj0WyJGDjPNqM#A8x-+e`G)3CjDB{ z;rz6Thn_Djy3{?3h0FBF(Uz{4njO^_xA{)}arLfq;isOD&wls+J3ecX{i`&YyJ{9s zm-&@f*{DodqxiU^?7(5g$^TX;74T)sbxJ%t`Z@EA>h#0&dv4!p|KHITe!uDX3!W{U z*Oz^r;>;MZBt(xhL&{LhDm2;aac)nYi%XL*9n;;?U zu4wpZPH~t>^10Q;g|Ad!e?0Iu_@e$^;1>NO-Pta;har8Q>Exb=0zKclj;~r@91s+f9JA=;)&AMmuTNFJ(^Mdpce9Vanjdqvc zdFcE8O1Uiy7YZr{gauzPn$Oe3l9gS~v{v?O_5N88GkGt5%RRGG@7(wM)v0w$SZ}0r zHwH%32|s_n>TK?ez1yUeo%U)dXlrnBU$7BdeU>Xq_>gAK%FW$kJmNo}rpdgvSz@Wj z$jG%Th%xQd2fMzIbK=u7e)%nOZ);6Y@o06fxUgmO8SD06)rxkT4xj3nd0eN}ZPD5u zlS*GXo6Vm>chq{wp6?%evrSd~zbU!x zc=E$TOD*2-DK;#=#`EUpWM3;6dEw{c)BiG^>@2i+z2>q(^0AU+M?>psel|Xt7T?+C zfeTfdrb)0pUNZUIa?|zN1+UkdPu6p-KXZOx!y4Jy9;XYI>fgT_v0rbpNw1dCw%A_z zN7LhL`A(kn{N&QI_2$OS_iGP*y~7RvTtY1Nnbc)RT%UA`?aP8z za^C!|wD_Z2fVJ!)S$1^}QJ#_7~1KwRUgJcxTfy*Jff@pP1Y4*zRj55MD;WZQT3u#~rCPagOzKc^?~CK22+>{^nx*_vJRzYX-5#wI?seYj!pq zw7Xcc=bz~v>Ae#rEE&4D@9+IHE5_+Ul!sOGrF#iZHHR+PnTAF^50>#n#Vdr z&8jzb{*irBbA&ZujI;uJ1VO5T?CXhv~mwmGF|#7O)LG;H;!fg zD_rcSnC(n@syA!>(v?2X6Y^L2n#6zkx{d4CP6g(cOJRvuxIQf^`7rHH)srXJXQ(vg zS3fxX?M~L46WMMPX3LxQI%}k+DQdAF$@VWO$$wMz`hb>O#|#N6^yKAAmj`aCP(7uUJ)!Qcu8je&L$<47)M>7ZQE^AKw_13g?sz+WQPtg|HNP(J z{a{_FWORMak&fAU?g zjTgTswyYCqU3X9O{JHnm_VTM@o|k=je_#HWv|&<8ecHGqk492!gbHr+L|55{N1xlWU`txJwBg2eq&>i?A0HKFHE||zw>=f zgOk_aO4X&G=g4;)3b#Kn&(3qjduyJXUy_3yg6-!`tPR+iqFEI7-YGh!OHxV2`9!L| zV1$r_MO$lM;PRg2j#(E>{>SXkV%=u{C0*y&&7C*C9ZCM+a3=M%2gB@jS&L`dIcTl0jNF|f`ASUJ?e3(b8nJsgQd8DUJs;oERmmOr@28W= zyR%EfjIN9F-B_VHc|zrJ<`b$-uZ{(`@(CVKzOW&u6pK(m3smL8;yUKc5SaNv06Emkd!k8LBwxU*Z@)SF9K+qOv)%~k)#55#@^#`C zi`sMYZX15**C$%meg5HOWW6WAvsM415$LweS+({2D^~^8z$06y{^t7V<#|lrGoW%`%C`4Qq$mB(f9HSlo66)r0R~~x zwlA7B)w+IMt}C13ZQPYP>Gcb?bN1W3e`NV?W-l}=pCZ6N>34VY->GIVt^ev6&a2Vg zb+h?RbeLbe{nqk;{S|*+pEus{x;v^xDD9Rwi@oRZ%@U6u-4b8(z*DclbuRa!mx~_% zI-NGLqJBZZ{q1W``Je2wWZ7a7QQWgzWM%c11CP=kX5Z!XDOtB^Z=ck$R!IYyHFNB* zY2C2=R)2o8Nr7qqmKW_jGCfPw=Q&&a-Dj#F@B3Qg&fz_OWm#@FZ;vcKx5oeM6~5es zX`EXdU)%rVFUn}s|GstlMVIfoZ9h*J`Bbu>f45=(t?D;RHfBcbdX)2J(XJaG&5!iw+G(L4hiWmKy`fu8XAa}8*e(R5S)Xp_?tYUt5>uv*MZPdmO_r*Sk zTO2jyzRUc>I@Hsrz|R zKV7R`ozW|Psw>uxQA;2^PwFU-!r|`%$Qx!$&y0rhImpd#4;?1); zk9*Jl7cuSVg3!LC1Fy~~M(w>8bzCyEaK^f;OBC;&uZ}dD!m7R5L9*qDUQc-1Q^nOR zC707b75z%NTa>$4C`e|l@V?D!X1x=*A@_*)K6~(MY1i^9#R!iL_jYn7F_g2I#eGPN zc4f{Mx_n45<*ZMWRat^h?)xxnj@Ng0f4k^(!)(o;EbXl9tj=kr7s^`vC8HRxKe)Dy z?T!AKr&e?Oy!EXlZ8Ma1Z&+}H(Rp>h${XeDF0ZerNks(}6ii6`*Oj;6pTF0O=6bvD zO7rUL%p`YA{lPxf=HCAg&g(9&_OQQmWYg^*`)2Swdimq8ZFzxyhtlV5T>opHiC$`a z5oD|@%YVuBDcrure1_0#rin}-VU)kSPyEED;}+~!}U?6$y6 zZ{_1lmmci7d9^zF!xwee2#?bOuelr5?ez~f^;TyxUb%Ebw88Gjm*P2PN4G}!99(2? z^GB)d{d$GPGt|B67VlFyzh-U8&zHXOr~dYwHs5EI+@&GZtdMgsCjGK<;H$t_?}bdl zuH?769<6xy)O_V%>r)ZC{_0iU%2d6rsJ1&(dG-r8?-i;ccUCBMK5Y8E{*Y<^y~g16 zcI-Egin`4>pdoEA?~>+O#?N=ped$;q6qKNPBKl_q-`b81d+k*|hhN>gp+kAy4}Z=+ zbB-TBFVyYrD4nynFs)?PP3<|8&sdv3nRYc%bK)=0#ghwt*W6jjdAeR{ktKV!((Xm!0W!XPU!3b)^|no4<18h4;^4i+x0xn4 zqdWGbP0e|Da0^r8S``mARq12vK5cN0OVuk2S+~5ch@s8J-|_tgmd~C+;isJIxvH)$ zn<;Z`{#Wm#yB5_v2~Ax*fu-TagnMtF&N|WlBd~8(lfG*CBu|~M{JE~qzP8uit#Zw( zF&3=LJJ4q%vVGRKU;A#vcpZw-{^hn?(e&JWyNa!z#UCvMY{a&lv9@Mkt#fp>LSa>8 zn&h`jC9juyK9q2ne3|Q%yYw8-WAeJs9tD2y=XZ(fk>3{+-=>pfa@B-guFv{AEr`1!xJ>o$uS@eqRo#70_H{kI-1E6_Z|RNm8;h;BRthWCZrr$mOS|aR zhUT>O!qq=#Tivkt`fd96-#Ycf)dd~g$G$BuGdez}Y~s1xt(R-$!+QlYdpsA1s>!%~ zxs;}MspBHkv+{DU{o=auZD0BS$tqq}Te!0;Xxo%KQ9pj)7xY}jv%v81f*(`5uX~+8 zx-;*)*$+4Or2K1YU(|wiYR_m~W^BxCE^thnX1M=~o3XZy-~!A20>yRJ?0+6t1;2i< z{)U(E!M}cXlXYz5_Ejn*ANtlB*YiLs>z(=bYlV{)6a5+wn6#8$-l*lKyWjz%yr*PvAS^w-Rj_K>doc5md21d?}oIW zn_F9_`m_Ef6ZYKsdy*KsH|n`<{$zQJMd<3`%DUNHC0`G3+Rc^Ky!NL~{IR*sukKlL z=zS{JdG`Kx{{FMgKldKHvbBbBwO!IGO^@Ip9!J)x>+&|5)q9;4l;nMPo1b&airasW zCW+K;Wy@VYxATUvzvH#l`UxLyT>K#GARKpjdBRKU{KfyzpL4$R;NXe%>m57S%d_#y zb{*mj4)Bpz``gBUT|=}g>sik!!H*MPG=@Id_xD8A%hH^Gm*rPD#&FyBIo`K0Vq0;M zn@jG^V*UrajMEc8$iF*0p)>e_Ys=QD99yn+T-#7kVgJ{BmhPvNyE9kL7RWm^r^BpY zMnz&%YK(N0dBNKMUxX`KSU+x1S|pQtb#t-6WJ8~=MsLma`wz<>^maT`H`Ay7$HVrG z6(5sctJWtcCH0tXh|7>W;r=zb-!{#s;r8#=x$Vam)oNU{nXvN1^Lf?hICwPn&X^>$ z=t7k8LXKYh%=`8~9yF)%X!bSDIGeOXOiXN&!=ZDG;wvZa64uDuqvKWcmK zUzw}tyP{ZKSw*MX9`gwGOuT?pp+da?r{quRN`b{Q;@^NeR zpUOMfSDUHJJteO^IZo=}x7|A*_P<*9Qz!VnQTIE}dAZBJo8K=H{`c>U@sIQM|B_9b zLd$NK&HHF~es5cnwZ%*C>iDShM*nq|?T~oQ^z`k_{ilRI9aqdhV*XH;%Uo1&x`p-< z(ctP zZSmg6HwCe@2rczr8m4?`}fMf-euqNe=FXsd;jj0oAAu3GY&{~q)n@ylgH$d zz{4rv+?dVl@1r8UA=kxc*-9Nf!LKQkc5RsOZqthoeQP+q7JoP)_^kEvbKf+nPw~s0 z``wS1bUd`VVV4&m87Vhm#zRfVd%jc7fAR8O+){n$#qn^LP}AoA8F%I0E)>gRfBQ7X z`)2qXQ=zz%8sUtfpKb?0>3WqPLhZp{5=+5MsROTGhlhUSEO&GLVP_kVcrKVg!UwN3}v0#m;u)-P>hd!=8 zvpa#R*9-%WKVAEH`}_HQH<(^U@4S6`#^t7?H+dz5WRGm_J7;;>@{`U*ly2Xb*|F1pNt-rU&H+q}Wq;-E~mMy(}Zc(GS$g~IR ztn-h}nVcq^&gD>eQBkYLrX^MW!rqXWDF@fOP7Smy7fxTdq99|%CV|8c+T#C;@7+vK z{I=$%hqwQd`Um%eW~!aIP`2*h&9ggxy;|Mj|K*tc{|b5U=dGcu%^#dvy>991vn5<# z=O?aOq8J#kLB9U~Z{rT--goDx_8#tDXC$tF`uQ#A%|{qZ z`j1ycmAkCJv1{|Rcg#r>gXi>G{Wr+DeZ6JlU(ff8m!AGr^~->xMiY>oS z@ce1|T34>idhgeE$<~c*S+iLR`d6lYUVkgJzu?n^phtf)dQt10 zGf|mbRvfF#r%#@_QBvJkzJbsq%`T5H|EW5O5ZDb^j8uOch7+XF9K5-^p}1Kw&M$%D#2E; zJ@xIB@bdml&cq!%>Ur)(hPTzPw{2Kya$dmirIuLJ!N|ye>leu{3J(`aEcTUNxBS?L z7mR%={rhCOPyBzsYVXx62R<(fjm&&(bt!0W=dv6w=1VN^yw&n^!Yn5?smUzaKZ9eI z)8$9HCl-i(lKk@bw}AQHa`VuKEgQeqJfE>Iu=?bY&qYccl~X!o{F*NJZ2XvVhyB6H zr>zmrFBi*JYZ)f{*qoie#dz~-kAi!1f*aqe$oR-ewMU2Q?Qbv78SI{XQnp;F@`r`X zr8{kWS!^E@6GOrb8(zPdyk=^xwx)gKKI?L`%;kTsP0!2A(|hv&)4l5VN7rt@=T)ru z*Z2OZGi%RSoz__^5oo46yUTUQksl((5erO?9uYcn{J3=6OrJG=GYlBD!`GSkgwDKF z`|V~rZ}MrQ2HzIBx*WSCt0^1FPS&yq|7|M#)qSGK#mo7ZX8t}L0(%x9T;;SW`Rte&XEDD1`i!Qg(! zf){0lzM_Vuhb86J1~yWDbttB&<&qVFc&N{*Kk6My6Ow=b8Y%h&AX3HEt^ zZgK3&ul@Wo`~SvTJ;%=U6H7$?{JOs1jK_Iq{Is?mf0|F<*?zBIMLBNSKGXQLGcyv8 zt?E$U)>rl>@79*ipgHNKE9P%`x>PiK>$$HVuZG8)K6dAc=M3}^a1J+2Ha)-O=IU~z zc%5e@_xIJl?0@DpdEK?xr|NGLxG(M7`)pQr&$G3B?q1Ht#m~>py|E#Y+4ty6hUW)V zjAl*Ue{9XQ#_aW>@rR$(pSS%!<6}18&NmsJMyqUX9C>05>)H8aGG<)pxBImsG46C! z!?T7n8K+}*ZCN&T-?Oe67k;fP`##5e-pjgazx#skD4saE@(bjN53%&&%yj(RKUwS-d{N zXpvVk^{*YADXy>_~;^Yqo(2Uv^dy58q-5n6ugmb2orQ&ztO7U|1PYZiSg z@ZJQo2XCrt)V-M$>txhp4j<9DRXm}0 zo9}Az>wI<28rN;S_?w$@CFFYS1nX8PCEk1_Z~Ju3pA@6|i*>t zviGkGzrQohn~^;#=wP4O5|y1FR`wmVJ1+cOVJ6e1MJI0`vJL!d=F|D^_C8x>S&vZb zZJcMjReKg@v!5^BX8R!Uer8PeKDNtiuIpYucXYG#zrLtnTPGdo=VZ_D$w(DvbkE&Y zTFhHl_q0b~3ef@I8)$(|jUcSc_ zij18*HdZhG{msPryz0}M0AAL+Z(ZZ=eAZFvncwh1eV*gJ7WIJo&ubUN%T=@%$xqII zu$ZA)@j`Bp@$(h`r+mz)oG2yQZ`ZscJkCk!qe1>7$*Ae9cc(tp*ks_CBjx4Ua{NeK z;Ep$kA}#(t*?6NWnQ_y$cL$eCe@hO|6E=IRx^1W9>#1Vwn;kxQ9XzmapGo$uwt{tn zn0>z~j4dEs#X-Pu(?-qgJ{ zxOc<;N?p;Vu%Fh=$4akn%>8`gq;1FLx?fh?)@r!^4^&J^2&!M5T~NO0QkgH;*Ta2V zO)dU~)Y}yQXZ7%XmwGOlPw|%Qm(BNO)czk<%{pG_pJ?a3$w^*nMfUUNPdCt#bl_S?ZomN^r zKK=JkWL{3Eo%fyO&d;Gwi*-_eZ8}u6|Dlae`gfgp@5Z`^Tyr+WhBK(w@4YVZ$jozf zf(V=U^icQf^HdiK$gbO$v_fb3?8RMfEdd3gVLTCs_*4TrRo?hdl`#6@^zq*+Egxw~ z?}KsT&hNGLHZ66%?bOBiCgMv`RP1M8g+1-s`ny`3*= zzAq0k`dIgCbG($)9OWwqw@&;U}wyl$1-cZ3RXwU)4Dl@ZWX+|82^~kZ*ivzkgTz9ImkN zpLG5X;coH0ZP9hb!t4INH0=@Y^SyE`cHf`in9q}UOJwn%t~Xx0MRkV7Eq$k%N9QOe zeo>s`fBAr?NJ5WW^iQ=PCTxKs)~ydyzP4IuoR08LT`n?3y>6)*Sl+jMg_2VKZNA;L4uire(xNfX`Jo-KAMzb47aYBY*3+x*-?`QPSk zLW%cyEs|3dPVsMjuyyB|Bk=w3=O?n@$;(r1h>y8 zc#rH>-IKniU*A6 zl5F(`^?Y--9_c>EWcSCLZrAmt|Nq3Yiu+W?G3zUH&MrN@v@Xjy)3}y5D)+z}{>_Op zt~VtvEP3es_V2GhMLK^!C?969TeTuSU_sfd8{$(Qd_P&URX1Tdln)eOltjS9eWThBrPu98~!2L^>z7vIUufIlwSZGd zQli&!qwVIg{^E8zfhx17+-o?fq=hy5wcsj%E zajcP-*;`Eq9@Do`CuP1U9z3S4IMG$!?~6x=@a?YIPOJGR3K{MHlcDxzg812%Pa8@P zt*`5zv1H#I?@6yjg(KdWX1ZH)?^HZlB*!0b_eC$8#hd)NBJQpE>a}lX);+JfS&@{)FK>6p;Pac^=fVwdS1Y|+ z!Mo(=Z#Lf@bBa!Bx*1#O>z|+7ve{^-{Mlu>$2$4yWwL$uY}w@B#9b8N>^9%tw93@J zG{E2hi-nGWuIHgOTTk5EDlhr@`K%rHbf$|>6t=suV4e2;i62+-?kYN*mZSXHJnfpv zCDDvqZ5`ehXI)(}(@bjS{|c$(&NFSxmlS^5wm>so+cc_U>!m3<&KVX>!ILjkZIDQP zZB`I-`8?; z|J0gg)n|Q9y3y@e`RC(tX{GM;ou+;!+nxkRfB16QUpj5MN!{5WMPFyiW>5R6FMMu# zT$QGp@2nQP+Fue*{j#eseVDp3nJ|&~3%REREH3m@_X$)id=ba|^w)c)R8Do#OlZ zu7`dMshb*}nDQvHed_jmRi|f6{LZ6&`O>z#pbG?RemrbXTNhJu(N#_M_P2S3cCY_V zi(PtS*KVG}FIU$&?3V~GyRHAq{I>q7;3iG+_?nH@+MH`oyxGliug226HdU-U-gL8; zCqr#gy>{5eJ9g=eOXC`|A4MA|Sxv~iBx5JJU+l{t*J~%2-M)ME;JF+5of|EtzmtxO z5AOJTdUfWsO#&x5ZNALhR3g6l@7+V@*ArgX^CceWNthCJ`Fy13t^K#HPyaC0UDU!G zuzAAmI0Z=-BTId!kMCqt+C&8BON%rVFIP*tv|HR4zZ{kpIpS<_eg2=O=89)i zzefCdSSO^+9N-;u*f@Un^jI^dN{ds=9d4bdRJ8cs6S>X9JtzHPP?Y=kC(|Fi+}@$@ z)|zmALzY*#`mW1Al=4E#?Ei@b?fCdE`k0dK)C&IV!52%;D7;b>-jsD#JpU1Q>y}AH z&p*EwIBN8IZSF(4MRMP^zRG!4=4KT4?`h7Q;#2z#64F@s0#`*ZDC1r5wSCSiwJ*}| z`s3pYH$C1y@%MfX+54P7YycVfAv67PT+32W@9%&yHpH&3Y@- zmM1)&Uz<}kB+%l>8TF;5Yg}KMJzf7(_4&+O2ZIY%FI^?%yQL-YyzQ2M37oS!^*e6~ zyLihsmQ+4+SBf?``-XSlOR+ceEjWMIe=Xi}QD=+3ul4qz2^&JE)$EvL`G41X`OJWr z?KdRPtls+HV_POS-<(ptRqOss2Ce_6>9ixBOGRbXCRyznR)zn#zi1av7E9{f?K^wT ze#aeMrR$eB6qrf|Or82wLvN+S$Ht&X{GujVAx&@Y1nJy=*=xJH(rohA{tWviU$~## zoSEJs_bWbqfwRd^c{3FT|Gm4|xzDY7xJy3i*5P#-QJ;5c-BzlMaW%NA`QpXGeR0Zj z(lzI8&bWR+cH`cPb36s6?Z0;`z9^K-IdSUvkJa~_f)&5B%sQaIu1F&BUBleG9i@sB z-*uMNgmkioyFNU)``oex)msiqR$0lHcpa)N5&kvzQz>8asq>q6FRp#^CHc9*-1$p+ zizY}dess5d{;JouukYTo^IE$6f*;?dS0|&RyHCqWyKyHxv?%^3^kt?*o0S>cMb_~9 zK|4;guVy(O61te5bx)>gdXUDm^OfA^_s8_Jru#oLNjhIFxarJ>b5H-5*;(tZteR6{7j4Vd8YEGr>#5sSzkv@*y1L~8ySsNDvOhp{(U*Hzwp&c_2fSmQRllk9u;o5 z_d~Db+~25IQzjPKoS6~O`ma0D$BpY;ztY@^%L%`s~+h$vNxYUre93*tjxv#SgES z85_OZLPeThKe8$Lewv|3^={m`cTBa{?`59beD2PvGO_Is7UzCpmtOSQ_j=W;zdc7y zHop^|zaaI%+S{KEN~h=?D_o;-K=7Eu^$`2_(y3a#*Syx~tv}qUndtWV@=e(}^FsJ` z1$#U+6I|%{LuI{)>QPY+PvPYLYs?XK{&SoQ_xT9ibpO1ff zHLulRUuJA;;Er>-Yrf{i2THnKYMsBJu_ScoKW|UJBP#?CZ+vn0dq$J}yr#{!UUQ6gQ_ilNc;&~I)C+5b*Y+Eg*d$vTx+W^H&NNZizvR0t z@kdACm1n&sQF~75Td7Hj#}`@2{rMc5^6sL(_4V1CK5502n$|L1R(;%lI^IF(bk(Cd zmjzFhKK*80mpo;4lqJXSC5#!Tv=(tx_c`^gv8%A2N)gY{=_d}zQ{oMc*m_+p9I4vy1qVd|E4y|_TMf` zdAu|I-ti+ZOXfdMw;EGxf~HzaQS4-#q|ZV*Eg|U z-FI3xwQ)cHx3f8nKNr84E78&zqZ8$Eq*%;w>ea{<7PY-!d<_12yw%E7Yc4lV^F4dS za=HJJuKvv*Kh3K7wPx*6j#=&=zTQXr&)IiM$H|txy>WzBja_%&(J!nwyIMK|CCsbz zR?YsjG3~Vb6{~4ixD2DzXDgfezq0SGt4jXbGct6Kd_S6D(d85}%wat<8 zKiyV7SGlJ6e{xv8Nqco1G|4PnIw7r%#J^9Xp3YW{_>lVywIqbiE>f)X=S59&^ zN_d==yDhKv=wid%KU+miv(*$61^5fsuh%(vZI4#iML7oB*Q?4eY2_ZZGn&`DW7C#T z4$pHIn+3P3GuzvV7+-FhI5)h#boXk57N6T3M!BUNx1wW?+Y9lWXgKe~?JRTFVS;Pt z%jUx$U#wE9*|UBc&wIAI;9%>Xqq-)`H&5+J`C*>?rlBA&!NzvhoHI|ge+zyNk1DWg z*eQA7O3n2fQ!-=k`s{teb!N|-=Q=jgtG9~j_D;F?mD^eRw9cXq@#Ep%!M%zTepVJ1 zi-fK5OW)0Q;mhhL7x$cuC~%wmSv!a$JAaGmSq=`)<9p)ow+Po&*&gqb_f5TKWG#53 zR?{#+U4d=|>CJu3A;(<520c zDcN)VC&@Sk<89LvwRJr*4{|NJyP|sLv}@(sjp}O;OB$!mFqmhbv?eN`BJ=U89;2f= zxluFMhuX64691I`dFw|VW#3!dy!;=o)l7eye|r6|n_F^Xs;^c{pWF9&&#l8{G&gM6u6t z8}EMkMPmN9Cf6U`Vfk5L&YkFZpR~18@?z>9pIvctqfBmfCr?}r@3~)>?0d3LEbx7Xb+GwiI{Yrnhft&!A* zX+KwgT(aqv|6{+$4tAwS8N@CJ`y9EQxBG0yrE>GOBMP-oCb}0KWEJ1hs+Pm6+N+h; z{l}v_Q+q<%z8QPAtp#n=G0(W5u>IM-LteWh(oV3>x_r%~`u!G@#fodbZ~L<=TuN&7 zye3hz+Sbc^Ha}Y+8kfDGMR|)_)w0K)Q>JBRHTw9RzOubpno{Clcj&uQ3j zv}5YFzkhyyzWX`)>5nxBvNqN`6nmTQc)iocIRDz7l)LKlgLPL|bUo|2ufOs*L)LDVvLv1QzEv{C z!W#NhO{cW)x4dlh@zP@Jm&X+a^!M%K5e9-9X#%^e{SDVuXRuyUYY+In zz53buTNopxustn|yrcn(!QM|KePeW8&nT zA+^}Jhk2QwT%Yv&I?nTZXSd(msM2*&W{dibnpW?Yg8JLv3pwA_RWtHWHB8gHReIgn z?|Jpw$R^kKc`RJ7Hm(-h@wMxp&tXaNv|0uU_Cc)9TFDxBt(nLAKbWwG7jw+p_1wQ#RK=0|@wp=^3k+(qISxN_{cg{5>6C%4n(o9da z+8LK0hg?rof8sQ`Td2OrJwRhhwY&Dm0PP)*dg7NRM4gSTG~HS7Ynxh>$HQ4%Sq#*DHB)5vj_=p6n}1l}`b&teXEszAB_`js`op5bGl9Qt7)~aYzHJiAA9t))pyBn9alEVJzVkk-#Ew2?_t<{ z%;Q1V&kHhJOqLoib9vZQe9!&oz~biw%*wMOWb#vV39+j=j6nmwa+wO zHi7YvdDgV0muAgjDWCNs%WL_mwI|NqbX|BgQN@aV^ZHX~BQl;=2C|!FGR$U7Q0q#Y zys~lA2L^Tje)0dJ+qcCpc4{uX*|KlO-)muKmb!G^1SwlUpyn7q(582(XbW}>JPUl5gFOvE&A!1fp z+1a^$p`p=Pe!qh}m+{S1tTrrsq@d1myh(aj*~Z_O#p@rZm`&=kvX{Em!24TDK+vHv zO>Fb(2KnPU;s){a3b~~JZd6?_^D>3OTC-s853b)aCbrIp3${)@w}bKD+e3HP9en-9 z`ADKp2V+jn#!s!W*`;6A`&8ZrG=5P0d%1>lfl|Xh>FmCmupW4ef{^d-p)5WZT4A7zw<@UznrXMv`k$wjc$e8gV~b?J&2RlD z7lNW)>rCbL{rB^+e<+fYF0N#2%eHR|+pm|$BSXG*FTWb}XqQg^56Qqa&ZU)#kD7Og z1$qCt-@WaTN#w65^OWvf;!=q|Dl_%tX%=g_?RmEk=Il7W@}ud7%F=IJ-W6Z3Qr8LE z;{9-P>6`xS`cmE`;i`*^B86Ao_@?^Jym3)(7JEMhXkFfV&=6~A`)yLE*|-{^Mi!Ei|aQfqY}BTR_BdRxTuORnp88BAM0S&x{lPV}jCq+Ox=U)kc{h1)U%2NbgXGzl5_4>tSjyauPAtpW zqQ0{6rSqai|0*Z%%szN#`#I^EVYT}{KV%H!cIMvts^?{x^h=5LWbnQ#CA#?czWg3jSahJ-ICIknDnNf@nzpmKk4n+)3huFy;u!mkExz3U41ls z!KM0;fcEX%CI+mwisowle6z*S-YKZU;mS|tSwe1sDj8dvGZp2gIUBaxb=sd>d$`DG z)$`tdL!Jj|dM?>Tr#8ArsXmN5v1Hn2bN*$FHX-RtS}tr!W8gad(mSW#xbJbN{e<>A zT)$Lr94(rCz|ia{!?cqjr!zt(R}>p(eByKnbJPr5 z7kzT`2Jtk1*@GYFxA2FFCOq!b`Sm;7g=glJV!v5T_IYo-r>81wmvc8UITfDjoSZ4w z=2J1tL;ucnZvAW3JieVgCwvZi>+kIq%X?*)^IdAzSKIP`o+8sY4n^nJx40R7Snea) zDI(N-ieEJN)EaR?A+NWW^>c-fZ#*R<=C;gIP=Nc}g3S50>zy)=9J%Be_|Lss@Sp(4 z%1hSHJeO47vxp_$@^R}tu&wvqQI5&^iH)gyUd8>4c)9)S>+90bCe=*3wME3uC)#j+ z>xMhU=WTE7t=|4q@7WfIuOag}j!0aV_};Vr`!7AWZ9b2=4hBShI<2h|$dmi`qAHO^`D^YQZ{QIhQ_lA!jmm3tl%QVqFZ&b9WVzOiK##HN9*Yg(r zd>*pwagX9p%S*2wpEL=Xx$ooxvnw?dmMnVr_TJ*^#$R7wtzK`I*85fGZ1~Ke_nawu zQP290ifql)SmVRZSyWVXCe+?&vCf7wX}t{AY+vvFx^Zpq8O`%^t;4s!E0pw(-(LOg zovD+=Eb&wR$>Et5&vKP^)_pnKmwnz~*Y}$I+Xr2eWu{&wQ=9>&(NqSDQ47 zy3P7@dYZ0rajnVUh})lbb`_rye|y^Lm3QW`Rh!OnH$SS~xOxNQ(kWTncoJr>ID2{> z^DA+~m#JCN;cI^Q=AKK{ZC0K4_sJO~w?v+w zXU1a~9IkL}wOqf=9^TLC`3FuO?|-|kw)H)ym|m3YY9>*RIf8z<2J3vP-g-_jSU5+< zWz(daD+Fd~O*`TKE>13|SbBniwuJruDh0K^QwMHLWbU!_sb3o?x1enM0&83KWA2aG zukcj8t1o(J-)z^olW&%5*ZsG0%QlFtI{s}>)t@KVP4=3WuJLrU`{L8JZewm-*{_Q~ zu2kIFv6Nx|kHb+sODoT>S(<85`cB1o-Tn-j!&BOyPV%g8{IorJfAB>sn^n3Y=hQqk zR&(AsCUtqfxP^+ZHG5&hxj9oh+uz@8IPgUw`IEQZf>W7dR=rXS53_wYjFk0_w9lW} zXSXl7zL)vy7UQUXk?6vl-8ZX$*DTp_|H^wU`|q4lPYPbCy?OW|%K2gL+qr+|`&;eb zGK=-}$_*2m4yzrvaA`RE=c}4=WT9xBZ1I@|7CkwOQPWIWwt<*^<~#y#JzygMsV6~tm!`_zc* z%>^HY>x(yB5ctPfxbdNcjREWCW&H~xf3{Y<(663oW;0>dym?y_F6kK@l9F22F4g(j z`pEf&T|NoSn;ym7zOv@ebB$QSX1EQmQ6%p4=c;TKsP3x>-uwq>6v|>1^e1-EMcQ@A3IKmj5nMPr5!V zeag-C*f7>=PtXRv1v*dFEBzC>-&G~Z#>%TpC{U{bG-FA$Mu%?C*S>>Kd&yfj6TV7rEdNE zUAqpJs71GiZ{7bdXY0{FR|OrIc9-RBc+KN@<5+kV)AL99K9gSc8b6y;Vb){LUY)Hy zQ$}Xm#*Ldch@JT2o3S+ER!s4RCcVazBjRTdWC$6b594*77Tu*F#ojh^?a$-&=VTt0 zbK7YDyWaGSBk|dXx*x`CcinX=Pv7kH=Y^QtYcJ_vffths9eMw4Q$L<@WYynWHy-}A ze0KbjOF8rN0L#|&L$$84slSUDOg8?V8y9ve_BqSd&=?-eujb71swF-vWxI_QPZkrt zv*3(1o7v;5Q|6Wyt&>Z>CA;yj+v$?#OzCNX{4(vaLb?3^=I*#WC*=RdhulSYdwL&lzW~ZEalgwQ}8V zuIK)3>u0PltN8uNM{A*Zv}xvO_g>?W&NUN)w(ORaNn1 zqPkC|-H!yxQ+%O`4)arZWK3q5T+C_-N-mX`Y%@JmePct4N!azIx69=dA8LCW7Q5No z?0DjNW`^nM6%|K%x{RH&|A|QT&Ar9H(9tCIO#QOVh_i`*l_KlqT_!nrunW#G-63vt za(l+pO6ObWmT5{v{GRicKlq0JL-*QMHLqU1dTCv0EA;!j+25sWRF+&5UJ=uCvi?gmg(+EzQJ3WHLX*Et$5>U?WOe-{kb#+gS)@%`}pHy>*WdCYxT?CEUCY- z#!6&+RWj37*Wk=g7E|hsTJD5hdGF?U_I1jH)WF~7J!v!8lU(jga&Rj(Hzo)se!lS1 zUD&$elD1?Z^Na1_|6cJ0Nn1+)UBv#;K&)jh`}U;xP`*R8Nro0_B1?m0j;&1Jb?Mnu zHPzIInHOgAWUPP3|I#cwTF$p(Yr}f;iD`L!^VviCEoR-9yr#}`^7YI4p96%qy;_&TconDSI_g8$?t z23~)Qif_kt$*h{;qx!fi#eUY-GDY*w!i5nAT5SEgx=T0zD4J8CAoMrGPiuCN+wAW_ zuP5_d{;8aFr}S-zR&ICo7z_iqD0Vnb^FRBnGWa704bCJs*zhaL&dS8R{n)Xut&iC~PC+pAY_g^8qzw)#4j+fWs zAHA&CIo@)Hfk(nZV*34GHgfx)$1J(%^C`Q#Txq)jx4p$*iz@<_KVC2X-@U}q^Tq60 z9i8cSn!eB9&)EFC=ktz1ShGgWWK$%_1WZG$AA5wy6rW?tO--y=1Xiy`gLmm zhvV|~IWruSR&*?^{{42lblQ5?D{t-yeRh31!87Z1e1wnL)Ic9)!y9?~ex@nuH3z)E zBoL;UQ!~}qW7^ldtMV@ug#Gt)4!TwMsanU^EmMtKv0 z*qH@ilsIQPxpAKI zxAl4|zvY5{3d7PH(|l*=-s6-F(%W{tR=sbTr;w7oN`^;Pzx@$|W{Ybb4>q2k{jyri z#7c~PUX@JuyFJr?T77Ko(dsoYx;48}Vwz{L;_}=t;Yw{m+$$Zo?X5hle_y9ydhgLq zk2e={in8>rVzT3l_QMxnI}pVA9^O z@b}v2?XwEk7cR5^DK+gu^Mi-&@@8oZMDHEDT5bJ5*YeA|h=c2_k^PeC!IjFj8}q^?{iLP4{!NJ}T~NE{<_05A z+nM|N?SDQIF3(G!Q^>}dZnLG}?3RZmGlUX%#A|SxewiET?B*l=JlQqac3E*YkNKVZ z-|C9gzlq+9czNr}6Nx`>+axW%Z)ue<(`G8J|7x{u|CAO+Nt4IxtTO*>jM?^o+f$JT z)A`pq&0neb1e6Q7fR@Y`q?+NFv#WyZ;UAh+@b@j}zM`sULzF_?G<@ogC`IjB% z$KP7H!fO-vihWYwkJ@~Rt3I#o(VOjdtxfHh$t)MOuMWcZ*5t<~)ol}hyY$-J*DHhf z_RrbWn;rgG`MAX`flY4~72TY|>$kYJyI$zd@3iJyN2mSqP%Yj1cVbiR>V3sx66+QQ zZ(p3t8SMJ#=USoq9>L|w|{c~*ENM(-$?4YZC0DV$<~Er zElu7Xq%f;v@Zmj3CMkyop!!hwp9Gg<70LHkK-m-Sn>(B zEmU5#z{-!sKh9Ln=Fy62mn`mX*&}p*?;fVzWk$4?CkUyl^t$w z%LDvwJ-Z`#%_V7B^Y$Yy-48X6EeVt3R49olUcx9Nb))N#%&ZIlFI(^U?3NYr{gsBu zxuo5S*}v;z{@*Uw?7f~+wKDSSs}Sv{DRG}`GiDUGU6cFqY?96y`;WdydOsRJ6FQyg zcFW-R-Ie8g1Ml@lsVo1j=;Jt;ou3-GdD64uR+)mlTg7?TXPlG%>Rs#1>o;SXz?3BrhcdMNY^7hqPpZDRksC}pLZoM4u0*`gatD@dj{QO$_<7w{f z31*5%ID*TkFMB8)zGcDr9|nh?l(%2J^{C0uvZUhmf(25#SE^>3^X2b(+a2r|)wSj0 zoA6n3c?#;Mk7pJL`>*usUfChFqIp@{qi3(LE$mSf$^ZFN#-*h&uj1X~b#wNWiibCw zo-{Z69Z|f6`NPG17p2~?T-QImd)D2Vn`@4jMm#>#UlA4_pe0w_#(37=Rly>=*<^R6 zT8hE(N&c;?ZTuvb|982}VV1V!X;+tfdb4__y}-Vd0#7#cL*j4bgXP2JmYvZlsntEI zQgSR?-fS7qe_s16&#j%eUTwO$IAd#?Y~H=7zL#4L2)i(9{yh55^|VE&&HUBzu4%zC zKl|@^H|};>x4HPmySJAgN&Py%MAc$j^^}*)x2s;IFW>*g?X{OpX2qo?m#=U=t13QI zp?!McR_7c0V{UhBTCiH$Chx8FRPB~C^BDelK2-H+K4r_7v*O!oyQ3R(HZ?6SoOhzJ zbcyLk+i%<7`z1Trs%p!zd%n1_Z@c8hln=#GCERn~w!Mq-bX*_#SIV&Ri@`oY;eW5^ zx=00|-4bQ7X}kTo`65l?cDW8pnU@#+ui)d}e9fRhn)R15Q}c#8{_Vum9(2{ms2G>1o!Ss#7*R zZ{~ZR)?TB0ohv`??<{W%vlU;xwKX$4?N+Q=>&PNG)5|5hQBZ5s*GFGZvuWPn^Z#O$ z%2Bt8|5kiUk>oQEh`nDT`1VSBT8`TUP3@=qzslG3$ZB6xSm`g7ba}F%zuT@UNlc5J zFPtg0pD*^o?#2e@#Xruj;eEsXvz>2Y(EYB`Y=ehKUUn?h{CH*G-iNN+wb{$w9J+UR zci^sc`&fI?#A`Q~EAIWT;IpXhoAdfLOD@P{{_TsLvp8FAoBh>>iLT;J)8gt&1nuKj zyq7#MfBoNmf*aq?=~$FMTlo0*L+#e9HBTPkZCKqQwpZ@}N7C%Jir{O_##tY$vhF;a zrrhjvKvVg$!Ng~&X1S-`-)+m0S)+0A*<3q|1I}K(;flYG>$~6o;pM{0=h9PemFBzjg-k(~XWUFLN)??QMa zVq8}Kbl`@Uz-PbNot%e%J-UB-(}UYloyN~E{E5zHxR$SZcqw<<;w`&Gz0Fb{ zub+PI=!3e<9}kx9)|eycX+L@4if4?w8iSmToRxI7<(2FMxBS#sInk7U`(*rzEg45| zO!G`N+|Ih|)Sb0wHgO%9GuJeG+Rp8XM_P2B98*i1aw)tfbNjO8%V+;c%JH3Vch{i) zsKqxH!{8$!qQwy(k7@)(UHZ0_M>F&O%LQ7`rXKQ`9FaPGWwc?vsNb3RpAu91lVodL zZfxgRAmPOnz0V@czN>LDZ@`(%p9*51zsqHbY4bLojqWj9s=U_z==P|3qr|r|^Lz_} z<)Z7hZq1F}+IvgI-v0hyzqiU~otA!lGTHyprqgSh)r6Z2=qFUs^uvjo{@}E*WJG@DI#0%*3RVDiI;!r zgg@P%bJOVXjjJ)6vm4TP-hH`hj?8hR?KzG-2?rnEI^OoSrc^ckgRolmvXG1o@_N?A z3VhQ-mCdZq*xo-=u3r5#?UqmW`Qr1o=@L(~{#%;ttUReYeMU~s&#TX_$-h$Y+7>5# zyJP9nnEJ|ZvrjtT=oGnO#4bH~Rp+m*|IerfzG~lpqpSYU`#hD@Uk@)u&pT@W?l^(Kk9gV3e)0Veg*!iQgvi+E z^8EVhX*lV+**w|qtmM-Po9SRA> z65M`xY3`$q_ph|GpUx_{EgyIElP~)Nf8W(-HrD;P*t*&G=Dv=P`KNDP-n!S!w)Mr2 zeYShvg-q5L@OkvsQX};&x8RzRzl#pcosu`B?Dq_dBEGl9yNd6Az4P<##LK_cS_^b9 zr`?m~eHimO_>8K$-1B8E3QM*g-g|4y#@!411H1zl%v|`aMp5^(PGtq7(aC_UCEIqI z2==p_if7rRwX1B$DOScx4PZav!P)giee+ zv@NLktI4%JJJ)SsPStA{YU9l4^>_T~zs~WkyS(DhY0-kN50@QGxg#ds4g7$_`|IV9xO%{fWEaUG# z-ktx}F)NATmByUcXI#HlUat#(If=df;VN(QB-!(d%jc?m{<}rT#jUNSF*{>p#@}a3 zcYgWsEplfM{ITnG-9n?nbVaw5A1^*>|MxdaL%@?a(20w+Wr9>k)z$N-?+fr)Z!zvx z(U#WyTl?{d@z09<$ESaMJ=$!bv01!xF5{i{)UX|_OH+9xw%W;Wx7{+Ar8%w7Re#rH zCFf@bbN1ZRNYC&1v0tr`!1VCfifr0+fAf6E8np%N{c6#3YMz z{YKg%;AEqJF1o2}5} zwGZW=Z!eJVHO!N=de<0x+@(5aYJc`b&zq5xuWbA5FVlMc{_(3{nK&YZn{V{Yo>&dg_X(ruM0P1q!5YKs0%>7P8kcJY>@40%iV zpT%UU1lk0uurJr?x#DFdW*{|_`4`vIM?1GnOOMF$^LeU zrJgx+^PB{YW&h9L`qj5(TAp&%9ueD=LdlyRHcz}?`z-tXyDMt}<739Epzv3;{0tkC6=A4r5cMa^j~}RYE{&;!?mBRIkM!f*+TX%+N8Ei zZjHN>1IO*Y>W1Sr0kgT*Pmq}=&-&t%=Xyt#H}w&C{p&`9GTX zqki?vee2d%|JwFS%P}@yEAj0Lj%5Y8szQtVrrE8%F<*X;>G{QtGnc$5XtYr`3pmj9 zC(`^!pn$WNLYv|-1Eb41u}V9cH~y;=aR{^Eo+Wl`nrr^V`cPZz+H-YJWY(z4MwCdi zUpail;DitF(nBG>xuUVJGuD?oG>L0XcUZdakx|ZS zc)xSmwIbg2nN!$S*=O$DQV?;_wmo@OXYm%RZA_Pc9hF=>@7%iun}pSqB)Pvmf2^dn z^^N|W_g@TO&Mo89p8w#1z?!)2^M1Nb?2}EN(eBI^w6m{d%90ifvF0w#ty3%JGW|Zg zrQ)VrfaUaQ|`aJWAo<5gm%x%D=eP8YCfFyvTKE9WN=jD#L4bLXZziC zUwY>Md(Hb~-KjM7pOU)&vh$f%_+D4p+3h;*`um+vk$%F?NG3_>h%g)`PX=Y zfl4D+ponn6TjO@!&99S>u#gnT^>|Gw5t zoA*`AhmbGbGJR8z<|mXtt(tO0RB6FE{@+@kUOaxLkmM{pQSS2mb|=}^T}~6~4Ho_R zU68nL*_2a?c@>xZUQ2~>FZi@3d)3nUyP1r<{$w^a+P!6p<(LtBbw+ER=)Emdj{jb_ zbG!b#zb9Q}uUgBT&tH4gYL3U4%uY}o$1__nIL+4q)yqzr5W|;Cr|8(YoPj6F_{8WWpR&J2JlGdkMTzKk% zg;CS3&w;PijY1t&H9Vgo+?L73Ce`U&{d(|gP&g}l9=VjOWQ2cqH!~BKJ55;BL)aU&Z zvEKB$@OE>4(naIvi>}Ug5mLH!>(^`PtcS~;t&f+dRH&@m`#Y7#%YR`R!*Sc0Monpb z8^va=3HTw9HT&-0+1v*Ir@0GW6zh`r^*r$P`dr^6SKh4_vjaSnrV0rBZ7mS)@9#Cv zeBthVUcqyZ@T26jr@MY?oj85kwAkYe@66e;dnz_2CUps}s;JWce3U6uf@{f4ZGpuu zJ#v2|Cq$+g)@^yIF;C)bl7;7CzX?;PrZzviTYmp&;c?mYTcP^f1EM??c)bi`MdLr; zezrRQQ)kuH&~VAKQJI{ttK;J4+3mbMEo}Xai=S+BY6V~KR=F?t=kt8tWS?j8EUV@x zJU=)0*(&*|v43?xm?Y-LRs1nAuJ8U)Y4kQHMzJT!!uxfEUHo*t*sK{oW}Rneo6r1I z{8Odl#SzO>HBX!MTG)&BztB(#D7NTte|>F1h*FH&0_jV(u8C*cZ!Pclfp+!cn;sN9Kfc6%}cl&%WC{G@9;&PSz5`+vUZl$N$k@X3brwy{g!<{$iJyY2k(qOHy+YEx6Ddh@(HQqgX? zK7F%N(T<&mXD)pHK=9?umplId``!DMQTxjxqYlHrzh1AG-ux+R_07%cvkyOD@zUhw z&o^s7#F6C#fz2w!8~dIr7KT~Z_Ei6?DBB1`aEm@fXwyH>Dr1e>cfO!oYfB3*XO~Z`Q4^I(6jS#Z^&jwUbmMFD!Ur;q-QT{_&}=Cvl5! zdluCnl4n?dv?OYOrTolZ6WNn{!)mV{GoD$q@uU60KQfw{-x{yk|C_L4!aTA5Eh0*s z$2q=ku@QDk3|i$Vb#UY2v%e)a|Gd;JJ%87c{$Fvwl3jY`nrqANHM#xz_;op3f%aOf z0^@+>jj5*hb}^b-?yufxyXS^j+~nhn3V-h3Sbd|rqv~Dc7rWOoOXk+fHMRFT+-v^6 z`02*w53KWcWW1m9=lPNsMdw1|H?6;Fzs$bXedF9pu@78ajt9=H)Y$viPvn#S*UA19 z%rb?VHwviLm_H5H`lF}zaOrd2!`=Pw+*0C=R#eOj`L$NXX*XNH=P}RICnM`>tNnQn zJobNo=<)Y-;~ImjyJk$Ev3IIgJh#$|$FWSTm!53ZebVFfJW|Tw-X%J-}}f@9}QENUyg3zZvg6dzM9p zPT1Js+_l&~U&VicD#x~9(c@blF8s81U#G#U_gTT2JKwHavU;wt^8^((lZR)^&5Dx) z|6e-WpE&JSnfZMF-;0B;O;)&6EyQYAI_Ck)*GZXWM(57VTU1xLz00@j{f%(Po(+YW zI}{yWd*A12FIZ>7`y$|hPuA~aF;nB`d)ig}>6}~fr+@d4zA499js=Asy`#VN!ZH@6 zS}zVS=@T`HlDl{e+b%^(xisy#m3HU_kC^9k=WUkK=QE8}D=Y#$=gM8bu(|q$rg~q( zY@zG+g@!@LS`}u@VRQ9Fn9v}K}Wj7?I-_I^yzUlH=`L!7ZbsNvE+A3&uA;O^EFM8$6E6>>MABMhN_^o8!vuj7fEoMr- zl{0CVov<@~rc79!n&v%EW}lvpNzPv*woN%y>#=-;UiG}jpy1|8vs%{uJ3fAwu*|YJ zbvpIont5l0qrN58bB5Uc&Ft}5u;}m28Z-N}c%^gSFSeIdPo8VLMhZuHgm3J56Dn29eQa4$-hYq7XGHDR7H8?09+%yqcssfO zy>NT$=NH}~b6omPvt@lrS$1UhgLw;MIcrwypOZ-xwfL|#M_fK@VN%yL@{<{Zrk?Ym~JT|Hm=Tm?PIAT0Kk9GdFE*?p>zi zv60*_-yRK>xY+;uM))3v44p19rDro8w#-Q2O73XWU_Nr|ZA-hyM8}?3Z|{k08?L$k zUb7?0(R6#3^iq%g;w+a>8B2C znb~9V;rYT)JP=D+6PJM&71-~v{jSys8QQx(|be`Mx7rxD} zd6#-^Sn94udHDMu|M`6W(X0wZ z&mHzNC-~m^eOk-Q^YG%Ov&FccOca|j$HRX6lGLL?m7aEeOJ#zBeIJU5Em*WlDtcSq z@?{00=P#V}`xy~d|IJzQ<-usPJh!SWu1#i_pC$$@@YL2i^GUCz)*|~vxYCCOZRye? zqGE>k_rBSzxJS;`<3+vw+70tc&K9%;YO0ri<(t*4=eFPQujRUorwb?My1aexqeZ1+ z^82Zq)0k`j@VVSqY%Xx}>RG|S;K1PN;uvzW_xhvx{QpGf@A+tVZud*CGw}u60xxKt zy4Sl&DymY}l4ar*xxNQ`JpJCf)_*us@OW90`c&1^T6~Inri{$Td5&DWIy)nC;x!9i zX1~RcJ}fYll@x0#7t>9Z53M`TU{_OI`+sXO_YFlc(P!=4X(~zDzMsv4v!@g{a;rJt zW>^=!w)55>ma|h*CY5BWoL4gyHQDOk+4+}!)`l{7%d>75@AI;MYPk1O;zqW{+RjT$ z7?&R1RP=h|&%Jv+__B|lvD{SsUc%+WiDRC7PU{<|C0&`XBOW8>Ce1fODa~)pXRTp zBKmddjlgZwe1z;(Se7ZOT{&7%+;!+^@NH{V&6^s&DkfP*QTGq$r7ZNetx!;IG`7_h zaeldZ!<-X8)T6z7J3E>-h57V-J6tgbGEy znfovCP2G9lE6Z?N*i@wnX#t>J>@t};-`$g#BiUrw z-2CC*eQ|>`8GF7u@-;c%sMo1c*lIZ2)8JDm^L5k5>EeC|*Uj0>;s5%y?_}vs4Qj>A zHBB@7mmGNLqGjcOHPryl1REp#)UcQr%g zvYS*_m;PF(r>kvJ!lKUTIhK`ebNuz|+gt8T)41xlTib3fHuAXTSsJ;cU?Jyf`OJ({ zDJ3?aLn5CxTj=VZ&5%6pv+mi7Q%irmeECxC54ZlFgi}jC%uASm^iJ5!Q2nWqxmrtt z&*(SaTN}6c){pxWI5U2#OzRK3>iRWorpW%ak!PNzwXn4>{_@y=W7|U|f!?{N!xIlI z;ruY$K=`b7aYUZ(9+s^Oi=Y1y;xs+4Boq{E-uPJcdEf1TFBjFOOq<~2o?8^pmAK`C z%iIInTg?~M6 zM1DT+T6isMmioeF8z#z?Zxy{fX@8;qHRCPiLd(usa%TQ*3rgC+u=8f6#Egdq^WWGM zYkhkAcWbhfX~6wgJD2aOYDX#wS*S3SdU#(vM zXy5O5uP0m)_P1gD>uK@u`~LrXXBxL_m$#p|Yg2K}J9+=|U)63~+s*a{@0QiR@oC+& zxSuDVarK<%InW}=nWlH^kMB;4?Qb_9dwTq}_Xfq~LdSXe5573qx0G@Av|DHIou0nq zn#R(kTvf5Eivl{3WSKlgWZOR;Ny;s5eQUhfEhUWJ_edR@2V1n%#B z;var&KK^je<>ePnxfzJ<-7k0}lzINWFTQ8@o@{CpW^LFhUa43eX=s#o{PD)t^uWi{ zFKw8TB&yMK%ll{TH0HUFR^R2D7WVjQ`8H-{jlI4v#co<=2p;lOb7c@bHA_tBZ?);g z`;T6#n6MR{4V(Ap9ivwJrOVk%SK38=dZ>10=R?sSmuERj_~wdz4%q#1zWtJwuYAhw zt5rVE-5Yv4;=>Np^aUnqt1(2rXF&uVt}d_IRgJ=ak9*3|ad(V`3+QMnZd z9;I5ktYgxwczNr8L{O&Y&rA7n%ip~>+?jujy)WbPhdK?-wZ^%MN$X>ccjXJE+jxIY zKgk~bVRwCwN}(c$sftWxAoGpcObt&(c1d|m-o_YH+|TjEChORY$jjGU4)rw)d#wIk zP_fVV`poC|Qf^#~p7~7K&_A+P$nfQDj=nZ&?{jsXa)v^V{DAbN1C zv;9*Sy^1=x*MaAT!@B>yDIBMltUR|ps=xE$qMjYgy6$ge@yiipNy_ZnxTNd%u5#6L z*4a&w>$jd~XaD(-J)QT6w*NcFnD-2C7AGuBW|~}RId87ngpM`SFHY)wGEc_r=KS|3 zb<_mcY@PZ{+SsEY#WLmH&Ph)%*h>a%QE*GsKKs!#IPj(Ghd0rCcJVxqH*0&&;Qm3q z=}=Ek+Be3JS~5y&d>@_&zZz26{r(lh^UbgQvRA&0{(Xooad(?=`?4=A@8^6pDP#Fv zWKdYLZR4v8S;rVo-%E8|c0cai-zkg-+jidaP-FTpyrTDJ_`4NMfu~KhUak1M=fZxW-YymIKgx*x%cqDt+XwJE=zLUWhxGq#jeEOFa#q&C~<-_9OJ-naGpRM68 z_$m5)Qrd&|J#(0^uwA}5>3PH~X48Mosz+YG3ZJ|`E6Mt1W#YWr9q-@Vh-|8nl!dxI>sc{YU^{s(vM5ob<$b>Uv@z1!kuv9`B=FRXoX zd0X~eld#a~@1-*OZf8xEQTlrQO!8UJt0DHQb`~#J-}!BI-kKvbzF28B?wIjc?a1}N z&UbFo<1>~_xhSeLYL-$IcetdJR$zl=8W=r&mAtx zJ&{^5MNhLfGj_?;TwUFmxstD6OL?Rhd|S(4)XDr)UA*I*)$=v^btzn@x6XNKc)4_0 z*ptwTV2frCVNvNL>q6)M3VN}77MF$5LLGxcReOF-nkMVEolPS}Qo=1LbJwxUtWnG} zPpn;gWPYaM)!W}(;m_G66fZr zoBDi@JU`qNeWD;ur_VmDTU>w5E$2jDubDgx{;FWP@AD01x+h7Wx_uCkJICI(*g6505X^T)^jx)wo^3?G00Gej zY2K@u4p!O5``_N3n|`N;S9VV4(f50NUr+zLGrfcD&8nGu3+47tiJz;?`ja(@Vfn_l zw?B$~UbtL7T+-Bzsftxe%kpAR=ii-`D;6uwI9GJ(iT<5hhT?U$(t=B#PkS!3ggaOCNEo-(toBNbwIqSS@i&Gf3=U+CpD0sk-dFk(2iT5j4 z#b2p*Z+X$}_4aqkzH4F^m{zpD*`c^G!eAp?|K9!mby_d@Pfq6+W?z(D_a(xO*U5A0 z#89`R+uWv1xx7a~J-MTvx2R0!kdfDf*{VG=p4-hj)w`(WY^nX*{))F|Ey_#Zr<@5m zv)n&Mjm@RsJ?`n|8!=mE&A;{H_cH;f+L!;$`<`v?IKol+mhY#>61KwmD;}QEJ9}u> zqVI+#jXbNLXzJ{aZJ2u~W8vDoH3xPr@{f%3nsniR{``)E9emxTipTsq|J0r+c(~o{ z+UlOv4Wcjg^3~bAPg`Z^%1jh&J(v{oH;pLf}(HES7pyU*BG^1@S&iF&T3`mhjKQ5 zk6pb}qsb!>knVF^PUB8a*Efp zfZfcQU!%^(oqzA;&J#DYTrBvNfN9pzH?bQM8q*EF@AXl6z24ZPc$;yDpz^c#ZM@Pv z#-UGb{{47t&2D`D+L_INR}^{fF2B6Y_t>A3|Ns8>Zu>MdeO_jB$qp~&Umgl+75-m^ zinnjra3Le~^qj3%S>DY_Q(@)0w7mb&rvA+aFAo`CcrSnc;f3Aa8(zINpJ+IF+05r> z96p{}`eJ$K;eCqV5=|PMJ3dGXGzG_X=bqo+wAcH-;w16LUxI6Ht3FS7)2Y6&@z(SD zUB8)azS#2>+r9nq@`Y`&&~z5gn-*tMGM7jM$mIz%DW{xNT(>n~(#7dwGA(^xpU&zl zN-Y+fbIj=MC@?kg?}O**WWy+UtV^9qO_sF*}BUc zUHev*b*Ud)?~ok3Z=LFw1wWVkb$iL|-M?=4JFCUM`zt@E z?fG^qJ7QbTOviJo2NVvr*8h1dpJw-EihKFbs(qW!#7qqqW7*Ot!#QO=Yh;*(Siv_o z{Wr_XF4S^=SDw-GbZKPhj_D_PUOt~;5f=GHeZ$+0s>^x!_XIh}`^H6VTrBWCR<7ZS zifqBHgKbmeOTHdHF;ThKlyU3&TY=f#zg)AsW^kN3nEYkC`WMstnKCPSYJ(PkxD>B< zgtvTugSgzuV=IIg6&&Tickt5c^5iEQLjJsr&lWT{Y&n!WYbD={HG+<>6?SWT+`Sjj z`1`*V@ALVV+$T+%RW>|6vblHejQMZNkIu@e`4VKuc815fa;{Hv5KHUpu3M&4ey4w{ zc8&OQkAK2N^{Y>E`O8lECOf)FT)lqv?u~t$CC=~p!T9gP?@|eyd*adIR}(+Yaj^OJ zTYJJy{kyhucF~#pPet54|5JY#OZ>4PUmqpzpI6}(6K}s~Pm1`oH8qnSPwcrZm);W` z{?_o-<s#Ai$*h}{^s7+#P{DI! z>4N8*XZy~rIFgiIFsGa8%m16Z`3`8U-uyS^y)9>Ci>TX;Y7V7S0)cm;@8r%cE%}%G zHXyrwZP?mvp{uustzBEau(YX*scBQXLJPyqYW4r0=e(cy>hKIKi_xAuf9DLg!B(=PdM4nH09I z$vDqup{)t~Z?|Z^<+>G@8E=@q3xDJ#)14_KBHQd}ey4}|v0Bpo{(bGwzS}k3-_lvq z=#s|$`|U%+BN8HQlfSjfZ|!(JuSVo%zJ2Sb-E!`)RxVe5e5gCnFw3Oq{U6p-^Q*-E zEjH@4_b4q}xbdXG>Wbrkr}A^Q*wszUxUpS$Yc#f_c_@2HVd8(leqhxXP{-+h^1;?@nE@Mf6I~T9p#1s;aOR zk0Q2w-v9a7&((EL&hKLXVWv2PsZrWq@!qRbAOE#?8yXz`XuICF?@;IFw&a&zZ-2O6 zU2ITPrm>@E^30R9Dy>pI{n_D}TERW(r+j7@E=vE~W28KDu5LlZgCD*J1s-Nza?|$E zS=%eSKwFmQ+d;|Yz9#p1_nDq7;Q6ufU0q7WN>LY+uP06&d4Eg(>4FC{+wW+;7v9~hRevOiIbh_3<_w(EGXWes{@pd!w^n~(z zGi|5H%?W?@=!?iU#@narjNV7Mr?1sW{l9RkN!=IKwWp?D5%?#aRXf2qJW7B655>G4 zAK5#4I?|=XmDA^&GpL;zi<1i(`55|)4uIrs-;hse(ibv@#h40?)ksl&wa|!-zRlLIBj;k|G~`9 z*3;IDnICFfq2Ri7PJf2n_LEIKf5S>Ug~9F z$@{>(Z?^5%4mUdf4d1sS)3RUB)n(!&g{jM)_x);{yzcowsafr6(u{{zOYDeR%+<~1 z$<6z)tj8x}-tDK8bX9K#S_Qsr{1PkU^EQO_Vcc(_*ya-zQ#%v3F6CTziiMTsa=Y%| zJ->{2C3kdbFJ)i5v-jAdF5d-(x^H9N-R7UNU>;NSrCDE}M^@ebcGY4-epBcD6F;{t znZs0fL~P@UPbFGPveRzLmXY1! zd8*_qZRI=B+^;_VJR+^f`W|hLrd;_3yxHu zsAaijL3ns@|DV6?Ck|iwp%y#k=k*QsOH+9kOj>AfHu2%xvt>VXj;f1uk`6Y5@+=5mDh{+lh03z@KwG1{lA~T z(=&$SCX=(zy|qZ*u0JWGldJ3KgBLnATg+S7_r{!^HHBy0!5JrJdhon^FSh$@7_;vO zSGHpbPWxX*%>K@I$}-Sq??XkA(5Jz|6-Ix5pE}dIdE)vNx`&TjzJIWHPI%>wRR^Bj z5H{4RjLB|W)9qAKAtbxWUAXUVM16tircde$e%m4<<02UTYGg8gR9Z~0Y!|GVF7i0%+wLyu*~^Wt*{=5T)X4XFu(JN-i2$4Lm8}2%IWm@s znPnX%$Yl3YV)@}!R+`qPr0c8Lo*@Lo8*e&>vRYxWc#tvoE~#}?_;qc8XGFw?K} z6U`C_oY`A0====1yf|sm-VawMhd2)ts+CZ_n6aOg>Uk}VyTJ)2UfL%OrmcKc zm-oyTDX&+rHmN_l=ghftd7bH>FPD2C*;x5v)qFGl zuUGg4g}r+MXD*l;A7j{Zq@#fUl)HVVjn>+xlg+c$f3GR`QfHg)<9zzcr(l2ER#tAY zfJ5s~?M@mgLJ(k9`1i=pf1?-R=X67t6{y_>u{5bQu+RIim)V>yzqlZnyhC#bL-+HZh5qX!VhXO!lyJM; zn7rCcP(rwO$iOKOCXPg zwUpuC%MXQxTHn;B{x}-jFEC5gBK2hMm+KR|=iJ@NkrID#kEU@oo7k}jJCEe>@J?*B z^$%yYHn?ppQV<3Y;TS69{kf!g9*p6{M=LwQoG?_-DB zP$!OGo(V}WFD zg8zoayq%i!c>kU_5cWc6U+?Rft0z|oy4)`>HCZh${VvHAe0__Jo)+s?E>-

    &8Oy9dz*JqXcKU!^C|Mb-s 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%0D-+`Q6U9XLj$c?3`7lq%?1jzIe)0@o5RaR_@)A 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 qxy8T}KT7{6#u5x%K$snXviqONYAxZ)S> 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 MI+Om);u6^xN4>ZYrupQo3-v#- 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�F3?YPH%{mT7Csou-)6uyt>yt>OP@%CPAN!ACI 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 z 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 literal 0 HcmV?d00001 diff --git a/images/package_managers/bazel.svg b/images/package_managers/bazel.svg new file mode 100644 index 000000000..ed5910e13 --- /dev/null +++ b/images/package_managers/bazel.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/images/package_managers/conan.svg b/images/package_managers/conan.svg new file mode 100644 index 000000000..15bcbdc92 --- /dev/null +++ b/images/package_managers/conan.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/package_managers/conda.svg b/images/package_managers/conda.svg new file mode 100644 index 000000000..3ad2de74d --- /dev/null +++ b/images/package_managers/conda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/package_managers/homebrew.svg b/images/package_managers/homebrew.svg new file mode 100644 index 000000000..9d206f7c4 --- /dev/null +++ b/images/package_managers/homebrew.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/package_managers/macports.svg b/images/package_managers/macports.svg new file mode 100644 index 000000000..b09bff255 --- /dev/null +++ b/images/package_managers/macports.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/images/package_managers/meson.svg b/images/package_managers/meson.svg new file mode 100644 index 000000000..a4136a1cf --- /dev/null +++ b/images/package_managers/meson.svg @@ -0,0 +1,2 @@ + +file_type_meson \ No newline at end of file diff --git a/images/package_managers/nuget.svg b/images/package_managers/nuget.svg new file mode 100644 index 000000000..1765dcc92 --- /dev/null +++ b/images/package_managers/nuget.svg @@ -0,0 +1,21 @@ + + + + nuget + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/images/package_managers/spack.svg b/images/package_managers/spack.svg new file mode 100644 index 000000000..a56eed57a --- /dev/null +++ b/images/package_managers/spack.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/package_managers/swift.svg b/images/package_managers/swift.svg new file mode 100644 index 000000000..5fe20abea --- /dev/null +++ b/images/package_managers/swift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/package_managers/vcpkg.png b/images/package_managers/vcpkg.png new file mode 100644 index 0000000000000000000000000000000000000000..76d43a83da3088863fd97d9e225b067800f36563 GIT binary patch literal 11393 zcmeAS@N?(olHy`uVBq!ia0y~yU`PRB4mJh`hJr^^Ll_tsSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7+O*zJkxxA z8MGJ}7&sVM8HE^_85kHC85kKD7^N6MrZF-wFnBRa!`VTM8c;P%3=Hj=3@l*v3=B~W z5Rd@nLulp&j8N5#3=9jH;Hpy=FeBI?jmCH4TNxM_I14-?iy0XBj({-ZRBb+K1_s8+ z%#etZ2wxwo2(s|s5sunMcZVk?la zzLEl1NlCV?QiN}Sf^&XRs)CuGfu4bq9hZWFf=y9MnpKdC8&rEyN}8=wMoCG5mA-y? zdAVM>v0i>ry1t>MrKP@sk-m|UZc$2_ZgFK^Nn(X=Ua>O75STeGsl~}fnFS@8`FRQ; za}$&DOG|8(lt30KzyQRZC7EdmoAQdG-b&8T)d$Jw8|oS8!_5X64-&QVFUm~KD@g>I zZ)a!&R*518wZ}#uWI2*!AU*|)2D!M|aoOmD!vqvQc3hHi57`+Qw3s|y978G?uhw$T znCrST?dtwHm+wX@s<3pjc<=}a>}2tYVCrl+%9?sWL5btU;RVy5|FXFA{NCzwXG{&w zEeMyDFI^WGP{^{!sPlxHK;8wDXfclo4Gj&9EKDr|C$62g{2%mrUwr7_zw`adFE8{r zUpVRW^>3k9!|#WGz4|S5YuN6YhTS0x{N{+S@D=X0tM&|YJHKY;*6>M3E;kui9Fh3S zIQJR*ER7rD2Gy&t_?R5)F}u}r>xE19)>zkrZc}Gp-x64Vb>c7XOEy#44hDzb{X54l zEBDc7v$Vhkw{A0=uD5lzdVKgkZ}fiY)^B>kEliFFS}NaKa!mSNvH90w;VFFm=ZtO5 zufLLTkzKTPp3IgOuT}?J_P0U5Pa7>R`Z003lbjaM7A_@=Km9YA%-){Lc3kjp(UeLJ zjzjmgL-+gF|9CjP%V_%f?khGXYe-nC!%MgC4nEXWdI zna@z$&;K|fKa`c(p&-3nyQYJQ=%^ZDJO8=r-HCjbR@? zdpr$acswUX^T=KE1f$nBw!!#n`>ruzl}=x&FQ|&&U3rFFLo6veZG_Hg0Mlx zfoXCNDivcJc@}=$_SN(|cVNe+Pa0PW4WxQ*PTafHd9TKw4_)$`6uwQ{RFRwa&}@5R zDo4uRub#TCei- z9FUm%f?;ytCZ_)1%-8MM3TX!!tDqLHgAhAH}Pf3QieiqlS=F>;k)gRhn zdgR9Rxia#5U(GAp%Rc?&fdJ<;k4Tr9OWWT}PQ6+Ba79LAhq~$`&1qt1`(MjkI`X?v ze6P!c#ytXejk49#dJLRBbUJP>3F3UDV=jGoMV*A2PJRO$V?gF9rb~YM>}gT^HyX{2 zWlGtgKjn_)-zhd{<+!7pSWiwfIcUZfesbfRR1s%+8S9;r4-Vh7ueuYo;lSzR%Us`f z7rfu5c=%uHNrjr2_0LOvu75wb>D2a|h1~6THrRf8Z=u|r%U^5u?5)Agx0m&g@4NV2 z4V+TGY~dogqR-49}mR?FObAjWU(c5Bk@ww@#5#qEsGQtn&3wD50yk`aE% z`#giO#yX#x19NwU&Sy%yvhi4-tKLL|I2+E32i3MMjV-c%lw|B#_&;pY_or?%T&ADi z@<92sDdRPjHTO+S_q}GA@^j6slN(b`PUw;^;h$*Od`4mBqQCDi<^Gydk{##ny{^Gv zgUrVczPtB+Z_8tK)Z%{D9lAkV?3BN81in$#P( zBzD<;I;Z>3t=w5Zv4+`4@WH349`j#*xV?loTt2GYGtnYbCTn5-X#ttFr@oj)8$Fe8 z4y(=FWqP~Y}RelGC5-xv%bmQGdg&r#MSLe@W zkXu$@e4w5GN!in%JSv7n>S!ef$=-D$~FMl`r z`OB|moF^um`s7+pp0w!W$IV&-ciD{B8Sde^{9u{Nk^0jNyJl)$zMNH3Jbm8HZ+!P9 z=Q*@Y?pa%1vCl2Epk;FE_gBvIS4eL*$Z1P*`EQ%D@b2uBkA9tR7TX&hb(~9P_uL@! zm77;v=q{YHcI&ryaSv?`IzAX&5`K{$mCpY_&t-ah;mH`br8P6>G6*jE=_bIaYw-4H z-=XzO8@8VR>VG=+z=HE~N$bK4r6MNXwfO1n=>6ehiTk;=#eVsTY#Aq6Hr!<~YrJ_& zHc{nH>&A~>7N3*maZE3DzxnpkTamb?g_~pg^lv{t_~W6$jjwCBvpAM$ZA-~zRKKY{j^-MysZ)2ADuH;alGEg z!^taXew@*B_e0W>_t<;bOFlfxy{Epihwtzf>*@to)lYRb_6DS9xe4;}9ApYGfs3i4whg0J*S<1 z9{KX(oIiIJ?oO7pJaFp2am3;h*<|+fCVO)9o|razh~5u;xGmX*Z&uK1gPtVORazlc zPRENqZs;`bS{^3rafA0&`Qf&6iX{sT;vM-GYm3SzKNE6Lzy8f*$;pXo&1qbZe%iZO zPExGyJhN{mXW_$$$9J2=4|NFhNfBrCR37q zW60|T7dGhiFWT?o`0G*h!ymrYPb?D6BSR;g$W9Cw3pu1C7rruW@&Y$2*5mu-5A1rb zpy5&@u+;ZBr^>l-hFIt6tDW~`o|P|IrRY`Z_P+D3d7W53zjEulTkW0)FE6>&HTlq$ zHT>4A-4klJF(>+3YkrY9slzRqUCP?o)l~ddR7O8?`bVzp4Cy5u5iD-Mw+PwuI-fal zE2rD6vr_T>nRjm4dv$xF-(8BR|#G7h`--2#Lw(k%`Z$haDI4|`PHvg>D#@V?}O ztCkafE`NQeM#DioJ-o=-#G+65sGq1}#%ed_fbI#4U;g%E3!3c$Fr$V z6bs-sNG#Pk*7GiBv*E!*73Z2yFHM)ZI&a4k-|b5-T@tF>Sl@l|wtPF+?JrZ@H%djd zHtoOCxMO)BHwVuHo#6ex&VRp7+Z(s)RR{6-1R>d8Cz zhK~yqqeEI-*smR66=v2bn0!1%=oyoXM^8kKu^hWYyQq(rNl2~5>_aY3t{E6lf0-Pf zCvk3G;>CwyCq!rPGQJJTo!x$T+RM!C0vEo?bnC5Rde_7IXiv0lGSla&FE+2gdz9zW z{Ws-~37<|IcFFKDE-TVey399k_2RaWxot7-zRrr5pa(}LA4lTEmp7c7RV`k)m^r)pmec`$@E>84xX;N0RbUduk zwwb>$Ed2EL74LE?C0gwJ((Ehv9obIv9L(nQ72$m*edr-e<>DB9s%fxc=<^EZ_coU!CN_%lCc$N<7%Va`mtL5UCYgglpSk6qrS- zI9|WJC}?h17uD6Zc>Rf`5+-a;f=SbPwb&+YyWPp*{Vc*HZTB*-pwfT0?3JDW)t&6I z4nI3@QP$1I8M5ac5@k-`>(ARMZjj5m=)}n@4M){H+P|*2zRMt-f3v&6TJ;TfStlEk zx)%AYdwBBf>VN%(CnLV@-YV&`?ZG*tQ^)*D>sPE2n89tawuLd;g-w0N#Uqu=$`+iD zk(m4Ymv6MV|IOkO)nDOfR-RLoyv%n*C{-}u%C@7dOUOSJZppJwnw*Fu8wyL`*YX)gpTD!&MWF^iR{yDix`-M`O;rj z{S%7*w~6`q$}L91)BBgTPfduKS9s@aoa2+ry7INZUOrNDu>bD6CPQlL^NEe;mKQ&4 zdzG<+!2YQ}O{&lDK{L<|*A2KuC|3_?p(P<%ma0i1Kt5ToNPe)Eg{hf~_ z1AI7YW_;l=Iw$wSr{v$kpiF^+)Mpx7!)9?$%Dfug^T1B|P@@D-^(%9Qv_FDx_EdI6 zvpC)@HVk=CRh!ZzoB2)NYDeI7f!O(w(NLX3h91RCD703yBiUX;;n^)gF8{`Nq7!pk<{K5hx#=I8z|6#RjcbNF(^{33^DAb~Zss3zoXxr~ATttA69BHD246dj=h@O;{JF@XIma)yj<*AIormX?|2G>;7QEt>D6sU(9dD8mDZZ zaYjIp^T2_ay~izqI zbF2q#iv>aqP8uIQZdu`@Ryu8k4bPcwmT==G{+*xqe)@REW7@env!C94WpL&9_4{70 zH^n{MC;xum2{mcyijT^y3V}W?X_Bg(l9SUSBI4)$%R6Qo^gW-$Bz)^lo-XQ+4NUU{Ub~mL`umqTXb1Xn#k%P@ zR4v~8P)yIXg)=~Tj_-8W8-Go|{+ak-^ZJBb1%>7~5utx~O;#+*QIR^cXj9c5y`C#q zmfUs-oM3%*$@z5&&l`5yw$5w*C^^Z-e$}VWuh|=wr`GG-Puupgef!)aI^S2Yoi2&C zkQL8;b))@I1!M3Rrd_S9*VLk4=5rJq2t9jz5!N89Fd;E@nUA;anRl>9DLOhnVUD>s~jMt~|rNYU{Z_oJEuc`aI zB{Hz&Yp(pMBH!pPb97(6{*Pu~%He9;**t>nfO*aHICn z8!>O*yDR;shhfY=<03_+4A(bPmZ2#q8{H)Z~sKT)ClhR#|`6H zPh5E&nDNH)gpFTAdHv>ZQaNddQmo^4aqxZ%=vdX#v^|hz;x1-`X5Q`J{U7A+kl9)& zeC5gUn}?bnxWDKMEs>4WJ+P>sb;5^p%jUO;=D#-(f1V(D`isn3Rry4YvdE3!SM9ng zRr{>%>?VOpdo`He?>iQjoO{T<=)#ZvXI$lfTSU!s-L*h?Z&0!Hz5CaN*f&m5}@Lkzo)z82VUWb2uQ)ypl^QZ2eSn-x0$pZ3|t zAXD=1C%I`BWuNXC?j-9&R!-4P%^E?dul9%V<{`FOqcG%}XH4C{<9(gsj^UiHwFQqe1yRy3GC)WP4k)6S>q8#4O zUi6;T@+;mEGixE4G3$^9O353{hsXbu&mPP%(@HtDTbTAUbv7hxl4Lh=jR5CS!?|KxuU=B5YcCC2(x|E zb>vIS*1HG84z+vQB>ws__2EU6z<^~@p4MN5IVOKN+p#NH>6@y6r1k70U-R<04@$my zyyxxVIk^u%SzHRdmK%4xb7@BDVD)yBn7x8AOGn-e}+@Lt9G8@zJeF^v9# z9enc|KQG?+@y^7*PHEwPWlsHgQ!XxDqV#L#&b;@57g8;+om;m;IN(sg9lZq{`ZB5q z?B>YzH1nD&Ui99;`!6+4Iz@4H<#|R63j+fOsl7Ea_Fjp+g{l(YI9|G5b4!a8o^4->*+E*@YuX4F1b~5DL4+Z|eCKO-8*(j;pB_E_jcsYH8|bhc8|d$v4DTRh~CUb4!=j$i+-ytRS06g_%&n7 zx(B{9*bler{|o+p{^@#%-6{i=V#dS|;>G)lXSa#(VJqkD74O=WS%^FW&Wh%mhT?#8F&|LP*_#F!l6#%>n;b0Xk$g2zbjH7>e=W` znAY65nf=-%_CQXNiwkWgl_xosPWpGJJAdi*cZI9x3HZ3Kx^4J2R>Vbp%}&$RGvmY5 zLsmE+og3%*R;+9qBkMughkNIj9bCa6%zR>B;f^+mSNdUg|K4QP7f#u+SG`Bt{!IS& zxecq{9(OhF*%G#JUB%CX=OeEzyZ^VQ<@@0>+r@IOYHe-)UAf;_f1TNHH#OG$q4G7Po#L%FJYy@qx3=eci|5zh3l^FQ-g>99CzXTKC#l-0`cQZ7VyPw@8z#k1 zuauVcygc;hCrjk@{@uyi>tm;H~KK6Xv#;);4K`}JbvSIs6uX)d;7wXid_@w>GdUXCk zkG|98&C;*7GhFn4`T1T=WLdTAx!c)$uV~mPRz7&~K77@~@PdbG$8K-E@KjVaTg3Sn zbG+CIx8_psrCfjQR|q_ny~%Cy^;b~Er}@*AW+hKP!=JEUo!8I%e!FOs>WYjBUskbs zUPzE)J`s9B(KVaz@kWa`uZ>pUd*k6Zv*M%l?aQy#@5+Q+m8=kKK2^HsLgVScG}g_N z9q01h+xV{30)6%eGZh@&aGU3OL71~&JCEt3ySi(H;W7G61 zyZ5L5TTh$T{_IL2u5NM~TK~mL%ECy4m$wJoYDlQ*oSS+WM?@pQXRm zaYP%YFS)(or0|1KRlQ@1?LHZ|CJNqm=-=p**ed?Wq5h=TkvW-ib4+z#pYvxCa(7tf z*LZgMo9zzGPa<<3tmhH>++g?BP|NzUn3&7_j89*m+`O&Iv$*NY0jmuMHh)*Tq_wFq z#)$oqpM}YT!uA$pt4WJ0k7XZXNi*W?pUixlC&FpI>P?61UJ4I<*d84{I75L!Iqpz= z*$xZ4?^jcwU7!41vB)rP;p~oL^*@%pJKr5#yHvsd?CSt?#l6y!hZv$AzlaHhC#J6L zkKQeJ@Xyz5i^-3|zB-(7xXZMvSj=j}k7$L=I7_bBFB}|4UTRe4J8an?kn^adnQ!*S zqu+$&M1E?UgwE?-^ux0BORavi+qXGpQp`5DC$8W;!_3qE_hl}HXvp1!fzbh6^*mufO<6jJ${Df`a(?0YVwzV>J zb$)-zy)A#)BX?*1#H9Q;JDS*xF8@aex_%a^8`5cdvg* zkFP#>XUBV)o)_VdFU~tWd2NxY>x{I|B|kUxHSTk*neosvYsZPi4SSZ&k2I~$5o@tO zpisK-h2Y~F#(M4+(MPJu3v2tYIQr|SKnN!)3sw47)ohk)q{L6Yj^+MeIW-(oU4Q_3Re1)!H=Ytk)^JeZb=$xHm zdL_Xy<^2CE&-Z`a5@}PJwC?fyq*b3Q!*t#r>NVN(k$=z4=>alzd-k+gp9+Y+FH&~g z`0LX3A9mh+nA(xPxG4f zPQBl|6S+%8o&Nv&E97_8@MAkS3G*L$GSpqhJa6qg3bA$ok_==%C$e# zvmCuAd*!U|uSe!@rtXX8n=w26W~#y;Ndf=R!}ewqHimbUbe@Ty*iL&cW&D~ox^Iq zdjc%Ogch+V861~&yf;1F``G-iLrE-VRyRSUQ+$*;vD41+|trpkX z`BUV{u6s*vZjOwr-}5Qr_~l>jtF}oP@BM$}*KvOK%rY@9duHxEnJ!04lFm-!Qr=*E zBGdMx(495BDo6Y8CU@-S_+BX2bFTVt#iN6(HeBCi=WA-0oHlEnU0P@aZ~FBzm9yz= z+#jauYH20Ln4h?<`M^Kmi%d}t`?XBBwa527^Zc?_J>X}0LG9b8yFAUpHdUPN6JQsV z{hH&WdMnmKlao&{D>&ss2*fY7J?TST>za9v62XqA z#Macf2Y;Wo`{5+{s=2j+O2?BOW-R!;tMu?g(bo}&JZC)kBQ(|f{Q+fUC*I3pi;o#kJyYCa(8BJ@m*zO*VxhbDw+B1*S(#HU{~b0+_^YaN%GJB> zhsPF|1FcDgX)SNorEHP6ez7c5%lU~bTMAdq`UA#y0&At?d?t1(c1!s+pW1Zvch~g0 z94Q+FqT?zzD7D^YE zc+|zm^(LG4D!xmdvu0n`HyN9QUos7vXB5gA?l~qT)>3eE zg44aT3eUHf>brBuBqttWDwKHNWV1DOM(N8_EcaK&EP358DYkIVtc4d2JmfWsJeb_x z*fc@9r}d%L0?T7}XS%%K5fiE!?e{R|?X2Jkt-t8>zfHSCnpng+f35A@ zu!=>kfw!*Z0Dt53hucJ!2Zg^XHv8wvR#b0vbN7u&|79&x-yAU6zU|SBW<@#q=9*`v zZ9&D=?l<}DCg#uF^0a-4(6txsPu_Lv@8*t}?)N9v{PNVls^*8PKdA;J&rw-Y<|*B` z_4SY9_498U+-?lu+r=`;%kJz;#h8SH2_-QS56?eLEIX8UWA$8*O6BjGUhU0!f8MM* z`jd6?yd6xj?9mEd^*gncR@LNKu8%9Qy{FSv&=zOD^~e)(qX@Q7b~6s{P&8)g^_;gk zA?-kQqXw&os!B?V-Cv=V<_B5a+b=tKOndD0uC3@)<;ACoTo&oNaXL&f9G;WoNwCxm5H+#=_jYWZK`WMJoSEe0*|gk%$y&w3TyB2 z6j*kKcHQ=T_oJsUNurl~W%7r+FW&H8KV2uJ<0!&PO8nf zf{4KI)%T9_E|+(m)}f**8X>}`zJ>F3p{5MSi{ob>w5?$CUtc7czBoI9?VmzwUGa_& zs@AKeTCV-SAi3#67|*W>x-TRQmw)Cx@w6vgaaUHW&+xY(SoEBySJ z>2%@VM9$R5**8wEedKqh%b?m*!{kQvap&}o+3%7LUTiJYdbsb$xnlMtyQXKk9nUhg zB}6xzQw$U2n6PQKrq{oqevyr=_HU|8)Yd%edD5Sl{#`R?gL6Y4s0#IXDfJv zc|xda6`*EV~x)B8FO-f~Xs5NVlyJLCG~AJ;F`+&L5-oM9?t7U43Bo83#) zCd#_8uKB*3A<9kt#&&M)W3Cc^qvM9om5V+yt+%JX`%|kol`G=8z-kVcGFJ=t zlT|ia9UIHdBi zNKd~?iP-iB0bJejFD}$-|9LTgzgtpeYhSs~j-W%&z6zvhohp@h@HJ3d{SBU49k4@wVine(~!DNgqF+Nz}YNJ@&?>Ul*A( z_RNmkbyHWRC*^(NZwsZ2YL;_n3j6KldaXCjy~(HH{-^)JljZxE>yjU|b!0XD((1}G z@O`Ujm%dHHNYyIqsO*JTc4Fc0%tMa3hn7^m{HAKSXmP={ z|JccL8@5|15ig!?eG~QP?97=DHU0l~r?V|(yzBbSw@5_8RC9k@PL02zcHd3m^Y(Gg z?Lp^*?gl76mG9aZ{lDn%LdC$%HcqR8Uh7ve9ggtupW~sr+N$NWZyVR;3Nu+Q)rz;` z`5WqY7rlBMvb=fPx?rt%lP!(2E5D|LO#^Bb~}^?YE3S? zwPkbdwBQ+=R%jV6XqSAkIY8&&GIxRS1@k#dl=VGf&Dv2po%!;*c=nY)cgAgaCpldw;O*xP>u!7%-L6}4 zegD~&KNL=}dTxno-p+lOv9~hi-4UCU`x=_M>nP zv;NZ9$JQG%TbSJ~@)AQHc=0{bcp$HO_UM-0--))T%e<;=eA3NSO`S9UQCl%3g~lTr`u8eX8(fUZ7LJ zqT`o6R#ZPcCc5?XPK(Lwn03pKy3cZTopSqsim0+-;{oCO`3>&%$KwA~ay-BFz1?)P z*ZKM#6|Z8XI7}aY{B=IzyiVKXp!ZVFHA_?WJh=bwKq*6ctnVU;xai_PjDhpynL;l( ze~A0T-tgw%jJ9{Vmuie&*z)nLe&E1Uu2sT*FQk%L=LUz{o+fdjYt8YmljquV#@_uZ w;QDR7;SQ&Xw!5B8-n6L56ST6{)78&qol`;+02h4zrT_o{ literal 0 HcmV?d00001 diff --git a/images/package_managers/xmake.svg b/images/package_managers/xmake.svg new file mode 100644 index 000000000..6bce7552c --- /dev/null +++ b/images/package_managers/xmake.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html index a84ea7cb6..e9a1626ca 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file + JSON for Modern C++ - JSON for Modern C++

    JSON for Modern C++

    \ No newline at end of file diff --git a/integration/cmake/index.html b/integration/cmake/index.html index 1020d31ef..33f38ae5c 100644 --- a/integration/cmake/index.html +++ b/integration/cmake/index.html @@ -1,4 +1,4 @@ - CMake - JSON for Modern C++

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)
    + CMake - JSON for Modern C++      

    CMake

    Integration

    You can use the nlohmann_json::nlohmann_json interface target in CMake. This target populates the appropriate usage requirements for INTERFACE_INCLUDE_DIRECTORIES to point to the appropriate include directories and INTERFACE_COMPILE_FEATURES for the necessary C++11 flags.

    External

    To use this library from a CMake project, you can locate it directly with find_package() and use the namespaced imported target from the generated package configuration:

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.1)
     project(ExampleProject LANGUAGES CXX)
     
     find_package(nlohmann_json 3.11.3 REQUIRED)
    @@ -16,7 +16,7 @@
     
     add_executable(example example.cpp)
     target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json)
    -

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    Supporting Both

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)
    +

    Note

    Do not use include(nlohmann_json/CMakeLists.txt), since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use include(...) for pulling in other CMake projects anyways.

    Supporting Both

    To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following.

    Example

    CMakeLists.txt
    project(ExampleProject LANGUAGES CXX)
     
     option(EXAMPLE_USE_EXTERNAL_JSON "Use an external JSON library" OFF)
     
    @@ -32,7 +32,7 @@
         set(JSON_BuildTests OFF CACHE INTERNAL "")
         add_subdirectory(nlohmann_json)
     endif()
    -

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    FetchContent

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)
    +

    thirdparty/nlohmann_json is then a complete copy of this source tree.

    FetchContent

    Since CMake v3.11, FetchContent can be used to automatically download a release as a dependency at configure type.

    Example

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.11)
     project(ExampleProject LANGUAGES CXX)
     
     include(FetchContent)
    @@ -46,4 +46,4 @@
         GIT_REPOSITORY https://github.com/nlohmann/json
         GIT_TAG v3.11.3
     )
    -

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is off by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_MultipleHeaders

    Use non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file +

    However, the repository https://github.com/nlohmann/json download size is quite large.

    CMake Options

    JSON_BuildTests

    Build the unit tests when BUILD_TESTING is enabled. This option is ON by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option.

    JSON_CI

    Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is OFF by default.

    JSON_Diagnostics

    Enable extended diagnostic messages by defining macro JSON_DIAGNOSTICS. This option is OFF by default.

    JSON_Diagnostic_Positions

    Enable position diagnostics by defining macro JSON_DIAGNOSTIC_POSITIONS. This option is OFF by default.

    JSON_DisableEnumSerialization

    Disable default enum serialization by defining the macro JSON_DISABLE_ENUM_SERIALIZATION. This option is OFF by default.

    JSON_FastTests

    Skip expensive/slow test suites. This option is OFF by default. Depends on JSON_BuildTests.

    JSON_GlobalUDLs

    Place user-defined string literals in the global namespace by defining the macro JSON_USE_GLOBAL_UDLS. This option is OFF by default.

    JSON_ImplicitConversions

    Enable implicit conversions by defining macro JSON_USE_IMPLICIT_CONVERSIONS. This option is ON by default.

    JSON_Install

    Install CMake targets during install step. This option is ON by default if the library's CMake project is the top project.

    JSON_LegacyDiscardedValueComparison

    Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON. This option is OFF by default.

    JSON_MultipleHeaders

    Use non-amalgamated version of the library. This option is OFF by default.

    JSON_SystemInclude

    Treat the library headers like system headers (i.e., adding SYSTEM to the target_include_directories call) to checks for this library by tools like Clang-Tidy. This option is OFF by default.

    JSON_Valgrind

    Execute test suite with Valgrind. This option is OFF by default. Depends on JSON_BuildTests.

    \ No newline at end of file diff --git a/integration/conda/example.cpp b/integration/conda/example.cpp new file mode 100644 index 000000000..1a7ac4de2 --- /dev/null +++ b/integration/conda/example.cpp @@ -0,0 +1,10 @@ +#include +#include +#include + +using json = nlohmann::json; + +int main() +{ + std::cout << std::setw(4) << json::meta() << std::endl; +} diff --git a/integration/index.html b/integration/index.html index 0a4891306..4e84263dd 100644 --- a/integration/index.html +++ b/integration/index.html @@ -1,5 +1,5 @@ - Header only - JSON for Modern C++

    Header only

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>
    + Header only - JSON for Modern C++      

    Header only

    json.hpp is the single required file in single_include/nlohmann or released here. You need to add

    #include <nlohmann/json.hpp>
     
     // for convenience
     using json = nlohmann::json;
    -

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file +

    to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., -std=c++11 for GCC and Clang).

    You can further use file single_include/nlohmann/json_fwd.hpp for forward declarations.

    \ No newline at end of file diff --git a/integration/migration_guide/index.html b/integration/migration_guide/index.html index d3c104d8d..16eb78bbb 100644 --- a/integration/migration_guide/index.html +++ b/integration/migration_guide/index.html @@ -1,4 +1,4 @@ - Migration Guide - JSON for Modern C++

    Migration Guide

    This page collects some guidelines on how to future-proof your code for future versions of this library.

    Replace deprecated functions

    The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with HEDLEY_DEPRECATED_FOR to report which function to use instead.

    Parsing

    \ No newline at end of file diff --git a/integration/package_managers/index.html b/integration/package_managers/index.html index 07eed33f4..a76c31114 100644 --- a/integration/package_managers/index.html +++ b/integration/package_managers/index.html @@ -1,4 +1,4 @@ - Package Managers - JSON for Modern C++

    Package Managers

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>
    + Package Managers - JSON for Modern C++      

    Package Managers

    Homebrew Homebrew nlohmann-jsonMeson Meson nlohmann_jsonBazel Bazel nlohmann_json
    Conan Conan nlohmann_jsonSpack Spack nlohmann-jsonHunter nlohmann_json
    vcpkg vcpkg nlohmann-jsoncget nlohmann/jsonSwift Package Manager Swift Package Manager nlohmann/json
    Nuget NuGet nlohmann.jsonConda Conda nlohmann_jsonMacPorts MacPorts nlohmann-json
    cpm.cmake CPM.cmake gh:nlohmann/json xmake xmake nlohmann_json

    Running example

    Throughout this page, we will describe how to compile the example file example.cpp below.

    #include <nlohmann/json.hpp>
     #include <iostream>
     #include <iomanip>
     
    @@ -25,7 +25,7 @@
             "string": "3.11.3"
         }
     }
    -

    Homebrew

    Summary

    formula: nlohmann-json

    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json
    +

    Homebrew

    Summary

    formula: nlohmann-json

    • Homebrew package
    • Availalbe versions: current version and development version (with --HEAD parameter)
    • The formula is updated with every release.
    • Maintainer: Niels Lohmann
    • File issues at the Homebrew issue tracker
    • Homebrew website

    If you are using Homebrew, you can install the library with

    brew install nlohmann-json
     

    The header can be used directly in your code or via CMake.

    Example: Raw compilation
    1. Create the following file:

      example.cpp
      #include <nlohmann/json.hpp>
       #include <iostream>
       #include <iomanip>
      @@ -58,8 +58,8 @@
       
    2. Install the package:

      brew install nlohmann-json
       
    3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via find_package:

      CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build
       cmake --build build
      -

    Meson

    Summary

    wrap: nlohmann_json

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or simply use

    meson wrap install nlohmann_json
    -

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, simply have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',
      +

    Meson

    Summary

    wrap: nlohmann_json

    If you are using the Meson Build System, add this source tree as a meson subproject. You may also use the include.zip published in this project's Releases to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from Meson WrapDB, or use

    meson wrap install nlohmann_json
    +

    Please see the Meson project for any issues regarding the packaging.

    The provided meson.build can also be used as an alternative to CMake for installing nlohmann_json system-wide in which case a pkg-config file is installed. To use it, have your build system require the nlohmann_json pkg-config dependency. In Meson, it is preferred to use the dependency() object with a subproject fallback, rather than using the subproject directly.

    Example: Wrap
    1. Create the following files:

      meson.build
      project('json_example', 'cpp',
         version: '1.0',
         default_options: ['cpp_std=c++11']
       )
      @@ -85,7 +85,7 @@ cmake --build build
       meson wrap install nlohmann_json
       
    2. Build:

      meson setup build
       meson compile -C build
      -

    Bazel

    Summary

    use bazel_dep, git_override, or local_path_override

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(
      +

    Bazel

    Summary

    use bazel_dep, git_override, or local_path_override

    This repository provides a Bazel MODULE.bazel and a corresponding BUILD.bazel file. Therefore, this repository can be referenced within a MODULE.bazel by rules such as archive_override, git_override, or local_path_override. To use the library you need to depend on the target @nlohmann_json//:json (i.e., via deps attribute).

    Example
    1. Create the following files:

      BUILD
      cc_binary(
           name = "main",
           srcs = ["example.cpp"],
           deps = ["@nlohmann_json//:json"],
      @@ -103,7 +103,7 @@ meson compile -C 
       }
       
    2. Build and run:

      bazel build //:main
       bazel run //:main
      -

    Conan

    Summary

    recipe: nlohmann_json

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]
      +

    Conan

    Summary

    recipe: nlohmann_json

    If you are using Conan to manage your dependencies, merely add nlohmann_json/x.y.z to your conanfile's requires, where x.y.z is the release version you want to use.

    Example
    1. Create the following files:

      Conanfile.txt
      [requires]
       nlohmann_json/3.11.3
       
       [generators]
      @@ -129,8 +129,8 @@ bazel run //:main
       
    2. Call Conan:

      conan install . --output-folder=build --build=missing
       
    3. Build:

      cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release
       cmake --build build
      -

    Spack

    Summary

    package: nlohmann-json

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json
    -

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)
      +

    Spack

    Summary

    package: nlohmann-json

    If you are using Spack to manage your dependencies, you can use the nlohmann-json package via

    spack install nlohmann-json
    +

    Please see the Spack project for any issues regarding the packaging.

    Example
    1. Create the following files:

      CMakeLists.txt
      cmake_minimum_required(VERSION 3.15)
       project(json_example)
       
       find_package(nlohmann_json REQUIRED)
      @@ -151,7 +151,7 @@ cmake --build build
       
    2. Load the environment for your Spack-installed packages:

      spack load nlohmann-json
       
    3. Build the project with CMake:

      cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json)
       cmake --build build
      -

    Hunter

    Summary

    package: nlohmann_json

    If you are using Hunter on your project for external dependencies, then you can use the nlohmann_json package via

    hunter_add_package(nlohmann_json)
    +
  • 9_^36kz@SV?!DptUH3 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 literal 0 HcmV?d00001 diff --git a/assets/external/fonts.googleapis.com/css.61a430c9.css b/assets/external/fonts.googleapis.com/css.61a430c9.css new file mode 100644 index 000000000..9a85686fc --- /dev/null +++ b/assets/external/fonts.googleapis.com/css.61a430c9.css @@ -0,0 +1,756 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszgMgo-8.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszQMgo-8.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PsxAMgo-8.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswwMgo-8.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszwMgo-8.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PszgMgo-8.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: italic; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: fallback; + src: url(../fonts.gstatic.com/s/jetbrainsmono/v20/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* math */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2'); + unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; +} +/* symbols */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2'); + unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + font-stretch: 100%; + font-display: fallback; + src: url(../fonts.gstatic.com/s/roboto/v47/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2 b/assets/external/fonts.gstatic.com/s/jetbrainsmono/v20/tDbp2o-flEEny0FZhsfKu5WU4xD-IQ-PuZJJXxfpAO-LfjGbsVNLG7DGdF6OZ1PswAMg.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..de0fcc2a8faba0bb6032eae39a6d9704ce97ec57 GIT binary patch literal 33096 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