From 87a3c242a33669dd83427e668e89d306ea087e0d Mon Sep 17 00:00:00 2001 From: blinker Date: Tue, 18 Aug 2026 19:27:23 +0000 Subject: [PATCH 1/4] [FEATURE] hw34-mavlink: copu drone_simulation folder to drone_simulation_mavlink, implemented udp_port class --- .githooks/pre-commit | 3 +- .gitignore | 6 +- .idea/modules.xml | 8 + .idea/rd_cpp_docker.iml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 68 + drone_simulation_mavlink/.gitignore | 45 + drone_simulation_mavlink/CMakeLists.txt | 40 + drone_simulation_mavlink/data/ammo.json | 32 + .../data/ballistic_table.txt | 3306 ++ drone_simulation_mavlink/data/config.json | 23 + .../data/simulation_example.json | 215 + drone_simulation_mavlink/data/targets.json | 1226 + .../include/config_loaders/factory.hpp | 16 + .../config_loaders/file_config_loader.hpp | 18 + .../include/drone_controller.hpp | 14 + .../include/drone_link.hpp | 168 + .../include/drone_physics.hpp | 33 + .../drone_states/state_accelerating.hpp | 10 + .../drone_states/state_decelerating.hpp | 10 + .../include/drone_states/state_moving.hpp | 10 + .../include/drone_states/state_stopped.hpp | 10 + .../include/drone_states/state_turning.hpp | 10 + .../include/interfaces/ballistic_solver.hpp | 13 + .../include/interfaces/config_loader.hpp | 10 + .../include/interfaces/drone_state.hpp | 16 + .../include/interfaces/target_provider.hpp | 9 + drone_simulation_mavlink/include/json.hpp | 25830 ++++++++++++++++ drone_simulation_mavlink/include/log.hpp | 17 + .../include/mission_processor.hpp | 35 + .../port_controllers/gpio_controller.hpp | 16 + .../include/port_controllers/uart_port.hpp | 15 + .../include/port_controllers/udp_port.hpp | 18 + .../providers/json_target_provider.hpp | 16 + .../providers/thread_safe_target_provider.hpp | 33 + .../include/simulation.hpp | 183 + .../include/solvers/analytical_solver.hpp | 12 + .../include/solvers/ballistic_table.hpp | 158 + .../include/solvers/table_solver.hpp | 14 + .../include/thread_safe_queue.hpp | 28 + .../src/config_loaders/factory.cpp | 43 + .../src/config_loaders/file_config_loader.cpp | 32 + .../src/drone_controller.cpp | 47 + .../src/drone_physics.cpp | 109 + .../src/drone_states/state_accelerating.cpp | 20 + .../src/drone_states/state_decelerating.cpp | 25 + .../src/drone_states/state_moving.cpp | 20 + .../src/drone_states/state_stopped.cpp | 21 + .../src/drone_states/state_turning.cpp | 20 + drone_simulation_mavlink/src/main.cpp | 149 + .../src/mission_processor.cpp | 163 + .../src/port_controllers/gpio_controller.cpp | 70 + .../src/port_controllers/uart_port.cpp | 70 + .../src/port_controllers/udp_port.cpp | 42 + .../src/providers/json_target_provider.cpp | 20 + .../providers/thread_safe_target_provider.cpp | 86 + drone_simulation_mavlink/src/simulation.cpp | 273 + .../src/solvers/analytical_solver.cpp | 14 + .../src/solvers/table_solver.cpp | 14 + 59 files changed, 32944 insertions(+), 2 deletions(-) create mode 100644 .idea/modules.xml create mode 100644 .idea/rd_cpp_docker.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 drone_simulation_mavlink/.gitignore create mode 100644 drone_simulation_mavlink/CMakeLists.txt create mode 100644 drone_simulation_mavlink/data/ammo.json create mode 100644 drone_simulation_mavlink/data/ballistic_table.txt create mode 100644 drone_simulation_mavlink/data/config.json create mode 100644 drone_simulation_mavlink/data/simulation_example.json create mode 100644 drone_simulation_mavlink/data/targets.json create mode 100644 drone_simulation_mavlink/include/config_loaders/factory.hpp create mode 100644 drone_simulation_mavlink/include/config_loaders/file_config_loader.hpp create mode 100644 drone_simulation_mavlink/include/drone_controller.hpp create mode 100644 drone_simulation_mavlink/include/drone_link.hpp create mode 100644 drone_simulation_mavlink/include/drone_physics.hpp create mode 100644 drone_simulation_mavlink/include/drone_states/state_accelerating.hpp create mode 100644 drone_simulation_mavlink/include/drone_states/state_decelerating.hpp create mode 100644 drone_simulation_mavlink/include/drone_states/state_moving.hpp create mode 100644 drone_simulation_mavlink/include/drone_states/state_stopped.hpp create mode 100644 drone_simulation_mavlink/include/drone_states/state_turning.hpp create mode 100644 drone_simulation_mavlink/include/interfaces/ballistic_solver.hpp create mode 100644 drone_simulation_mavlink/include/interfaces/config_loader.hpp create mode 100644 drone_simulation_mavlink/include/interfaces/drone_state.hpp create mode 100644 drone_simulation_mavlink/include/interfaces/target_provider.hpp create mode 100644 drone_simulation_mavlink/include/json.hpp create mode 100644 drone_simulation_mavlink/include/log.hpp create mode 100644 drone_simulation_mavlink/include/mission_processor.hpp create mode 100644 drone_simulation_mavlink/include/port_controllers/gpio_controller.hpp create mode 100644 drone_simulation_mavlink/include/port_controllers/uart_port.hpp create mode 100644 drone_simulation_mavlink/include/port_controllers/udp_port.hpp create mode 100644 drone_simulation_mavlink/include/providers/json_target_provider.hpp create mode 100644 drone_simulation_mavlink/include/providers/thread_safe_target_provider.hpp create mode 100644 drone_simulation_mavlink/include/simulation.hpp create mode 100644 drone_simulation_mavlink/include/solvers/analytical_solver.hpp create mode 100644 drone_simulation_mavlink/include/solvers/ballistic_table.hpp create mode 100644 drone_simulation_mavlink/include/solvers/table_solver.hpp create mode 100644 drone_simulation_mavlink/include/thread_safe_queue.hpp create mode 100644 drone_simulation_mavlink/src/config_loaders/factory.cpp create mode 100644 drone_simulation_mavlink/src/config_loaders/file_config_loader.cpp create mode 100644 drone_simulation_mavlink/src/drone_controller.cpp create mode 100644 drone_simulation_mavlink/src/drone_physics.cpp create mode 100644 drone_simulation_mavlink/src/drone_states/state_accelerating.cpp create mode 100644 drone_simulation_mavlink/src/drone_states/state_decelerating.cpp create mode 100644 drone_simulation_mavlink/src/drone_states/state_moving.cpp create mode 100644 drone_simulation_mavlink/src/drone_states/state_stopped.cpp create mode 100644 drone_simulation_mavlink/src/drone_states/state_turning.cpp create mode 100644 drone_simulation_mavlink/src/main.cpp create mode 100644 drone_simulation_mavlink/src/mission_processor.cpp create mode 100644 drone_simulation_mavlink/src/port_controllers/gpio_controller.cpp create mode 100644 drone_simulation_mavlink/src/port_controllers/uart_port.cpp create mode 100644 drone_simulation_mavlink/src/port_controllers/udp_port.cpp create mode 100644 drone_simulation_mavlink/src/providers/json_target_provider.cpp create mode 100644 drone_simulation_mavlink/src/providers/thread_safe_target_provider.cpp create mode 100644 drone_simulation_mavlink/src/simulation.cpp create mode 100644 drone_simulation_mavlink/src/solvers/analytical_solver.cpp create mode 100644 drone_simulation_mavlink/src/solvers/table_solver.cpp diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 2763cb0..7a91c92 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -9,7 +9,8 @@ if ! command -v clang-format >/dev/null 2>&1; then fi staged=$(git diff --cached --name-only --diff-filter=ACMR \ - | grep -E '\.(cpp|cc|cxx|hpp|hh|hxx|h)$' || true) + | grep -E '\.(cpp|cc|cxx|hpp|hh|hxx|h)$' \ + | grep -vE '(^|/)(json|httplib)\.h(pp)?$' || true) if [ -z "$staged" ]; then exit 0 diff --git a/.gitignore b/.gitignore index 9b27bf4..c6b0d5f 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,8 @@ Thumbs.db # Clangd index cache .cache/ -simulation.json \ No newline at end of file +simulation.json + +homework_13/robot_ws/install/ +homework_13/robot_ws/build/ +homework_13/robot_ws/log/ \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1c95629 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/rd_cpp_docker.iml b/.idea/rd_cpp_docker.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/rd_cpp_docker.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..4ec9559 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,68 @@ + + + + + + + + + + { + "customColor": "", + "associatedIndex": 5 +} + + + + { + "keyToString": { + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.git.unshallow": "true", + "RunOnceActivity.typescript.service.memoryLimit.init": "true", + "codeWithMe.voiceChat.enabledByDefault": "false", + "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true", + "git-widget-placeholder": "feature/hw34-mavlink", + "javascript.preferred.runtime.type.id": "node", + "junie.onboarding.icon.badge.shown": "true", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "to.speed.mode.migration.done": "true", + "vue.rearranger.settings.migration": "true" + } +} + + + + + + + + + + 1786786125798 + + + + + + \ No newline at end of file diff --git a/drone_simulation_mavlink/.gitignore b/drone_simulation_mavlink/.gitignore new file mode 100644 index 0000000..f4f2055 --- /dev/null +++ b/drone_simulation_mavlink/.gitignore @@ -0,0 +1,45 @@ +# Директорії збірки та локальний output мають відтворюватися з CMake. +build/ +build-*/ +out/ + +# CMake генерує ці файли при in-source або ручних локальних збірках. +CMakeCache.txt +CMakeFiles/ +CTestTestfile.cmake +cmake_install.cmake +compile_commands.json +install_manifest.txt +_deps/ + +Makefile +!/Makefile + +# Мінімальний набір compiled/debug артефактів для C++ прикладів. +*.d +*.o +*.obj +*.a +*.so +*.dylib +*.dll +*.exe +*.out +*.dSYM/ +*.pdb +core +core.* + +# Метадані операційної системи не є частиною навчального репозиторію. +.DS_Store +Thumbs.db + +#local history extension +.history/ + +.claude/ + +# Clangd index cache +.cache/ + +c_library_v2/ \ No newline at end of file diff --git a/drone_simulation_mavlink/CMakeLists.txt b/drone_simulation_mavlink/CMakeLists.txt new file mode 100644 index 0000000..16da66b --- /dev/null +++ b/drone_simulation_mavlink/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.20) +project(drone_simulation CXX) + +add_library(drone_simulation_lib + src/simulation.cpp + src/solvers/analytical_solver.cpp + src/solvers/table_solver.cpp + src/providers/json_target_provider.cpp + src/providers/thread_safe_target_provider.cpp + src/config_loaders/file_config_loader.cpp + src/config_loaders/factory.cpp + src/mission_processor.cpp + src/drone_states/state_stopped.cpp + src/drone_states/state_accelerating.cpp + src/drone_states/state_decelerating.cpp + src/drone_states/state_turning.cpp + src/drone_states/state_moving.cpp + src/drone_physics.cpp + src/port_controllers/uart_port.cpp + src/port_controllers/gpio_controller.cpp + src/drone_controller.cpp +) + +find_package(Threads REQUIRED) +target_link_libraries(drone_simulation_lib PUBLIC Threads::Threads ${GPIOD_LIBRARIES}) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(GPIOD REQUIRED libgpiod) + +target_include_directories(drone_simulation_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${GPIOD_INCLUDE_DIRS}) + +target_include_directories(drone_simulation_lib SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/c_library_v2) + +add_executable(drone_simulation_check src/main.cpp) +target_link_libraries(drone_simulation_check PRIVATE drone_simulation_lib ${GPIOD_LIBRARIES}) +target_include_directories(drone_simulation_check PRIVATE ${GPIOD_INCLUDE_DIRS}) +target_compile_options(drone_simulation_check PRIVATE -Wall -Wextra -pedantic) + +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/data/ + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) \ No newline at end of file diff --git a/drone_simulation_mavlink/data/ammo.json b/drone_simulation_mavlink/data/ammo.json new file mode 100644 index 0000000..a1c485b --- /dev/null +++ b/drone_simulation_mavlink/data/ammo.json @@ -0,0 +1,32 @@ +[ + { + "name": "VOG-17", + "mass": 0.35, + "drag": 0.004, + "lift": 0 + }, + { + "name": "M67", + "mass": 0.6, + "drag": 0.005, + "lift": 0 + }, + { + "name": "RKG-3", + "mass": 1.2, + "drag": 0.007, + "lift": 0 + }, + { + "name": "GLIDING-VOG", + "mass": 0.45, + "drag": 0.005, + "lift": 0.005 + }, + { + "name": "GLIDING-RKG", + "mass": 1.4, + "drag": 0.007, + "lift": 0.005 + } +] \ No newline at end of file diff --git a/drone_simulation_mavlink/data/ballistic_table.txt b/drone_simulation_mavlink/data/ballistic_table.txt new file mode 100644 index 0000000..57cd781 --- /dev/null +++ b/drone_simulation_mavlink/data/ballistic_table.txt @@ -0,0 +1,3306 @@ +11 10 5 3 2 +50. 60. 70. 80. 90. 100. 110. 120. 130. 140. 150. +1. 2. 3. 4. 5. 6. 7. 8. 9. 10. +0.35 0.45 0.6 1.2 1.4 +0.004 0.005 0.007 +0. 0.005 +3.5045080212366058 2.8938155146905893 +3.6201084533913095 14.596626942484109 +3.5838661492081623 2.8231231700671886 +3.699868100734687 14.211657158007464 +3.7431679856267204 2.6873984271417486 +3.8586643789492037 13.466257312622519 +3.434299419039064 2.958124778467509 +3.5057865423231194 12.054688393980792 +3.4957122792461197 2.901780310727317 +3.567722186976936 11.823864656286617 +3.6192238760294444 2.792294557180691 +3.691746897656515 11.369252603859444 +3.373217574322246 3.015461112081073 +3.4158069139739107 9.849975552679414 +3.418994857073471 2.9723683150270346 +3.461922419838276 9.715163696317177 +3.5111080873957388 2.887856088525701 +3.5545292376780524 9.447386390106308 +3.2823890485031724 3.103183050768454 +3.29621753747683 6.545379353297966 +3.30499485751573 3.081069618549535 +3.31889350510648 6.502233114091517 +3.350413352446452 3.0372049441187245 +3.3644377383844164 6.416124020523711 +3.2695046818165725 3.1158714772391387 +3.2805028894888673 6.07086025714968 +3.288840417769944 3.096852954496167 +3.299886876792528 6.036553354701744 +3.327671035659814 3.059075667594949 +3.338805489799236 5.96807204860553 +3.5067468293498383 5.765119833790019 +3.653123867982994 17.76421385861027 +3.586569569938885 5.61906406734092 +3.732742337036709 17.268540638041436 +3.746693699828885 5.339306831394281 +3.890940663856774 16.320514058289717 +3.4360937077508926 5.898199667368929 +3.5304393612441345 15.209419498191588 +3.4978971628219844 5.781590873807161 +3.5925651422181604 14.899721243720753 +3.6221220594329635 5.555444578941792 +3.7167670023557733 14.29564316715318 +3.374598078828289 6.017022994352121 +3.4336947181038253 13.000544633644015 +3.4206878814769124 5.927702459199835 +3.4800772460516227 12.810378478128392 +3.513387033888586 5.752797882590855 +3.5731149185388724 12.435418498191614 +3.283105188510465 6.199140404412416 +3.3047769621150334 9.705326236146131 +3.3058819798238988 6.153193962710674 +3.3276326232411995 9.636559059493788 +3.351632673545713 6.062128125438335 +3.373518130528189 9.499795858087904 +3.270121653562058 6.22551536609908 +3.2877982247306563 9.233920429146137 +3.289605745891789 6.185985393143057 +3.3073387590228083 9.17784006080078 +3.328725892580271 6.107520794217627 +3.346558071602352 9.06622021575093 +3.510215374434465 8.602953291674265 +3.690408196440236 20.989123238576802 +3.5907386689712655 8.374805884507674 +3.7698247503260056 20.363895988801147 +3.752081234680552 7.939293651994592 +3.9272871430727956 19.182761795843444 +3.438885002325029 8.81130807406083 +3.5582772525050306 18.411650560707738 +3.5012839003712237 8.628716144956165 +3.6206559178553186 18.010081236681586 +3.626582353375272 8.275596517151532 +3.7451199878875734 17.23398182252289 +3.376753364514925 8.997733267378202 +3.4538756402504416 16.188624500958046 +3.423324006429023 8.857561162642932 +3.500629639883226 15.934427379107984 +3.5169164064616396 8.583684709654335 +3.5942766635544654 15.436473237422963 +3.284229201897865 9.284190746255323 +3.3144080032046093 12.885548146724743 +3.307272536639881 9.211836383874243 +3.337527858403358 12.787584300450991 +3.3535388623825826 9.06859772635649 +3.3839153090577834 12.593285340195392 +3.271090747562447 9.325750609274928 +3.296002720264084 12.41456231822149 +3.2908065076399233 9.26346901180043 +3.3157754345344017 12.33373375217687 +3.330377174853081 9.13996868350277 +3.355440618926201 12.173214136414801 +3.5147251286397743 11.400914259625143 +3.7322073975497823 24.263710644091898 +3.596131535415094 11.08295500018713 +3.811216064816327 23.487156479350194 +3.758980468109193 10.478555366927889 +3.9675558734774237 22.03895382726952 +3.442530875536972 11.692114989184134 +3.589521098200983 21.65594557765714 +3.5056898083124834 11.436877921714666 +3.6521264274385623 21.147285317496895 +3.632338913860988 10.944981871227755 +3.7767700391095365 20.173408054678525 +3.379579895141287 11.953346126741296 +3.4765282702095446 19.41033754798965 +3.426770670035081 11.756867518821256 +3.5237058237476777 19.081851789969924 +3.52150328179288 11.374024161454425 +3.6180362984671737 18.442523252714498 +3.2857122240435808 12.356017937748097 +3.3252060229880938 16.08413781190225 +3.309104465733921 12.254163403156914 +3.3486570988416053 15.95269345631721 +3.356042502975262 12.052815972345435 +3.395671172429519 15.692671139931674 +3.272370472734567 12.414567506076052 +3.3051986583433357 15.611145115724675 +3.2923901082063045 12.326837420338821 +3.3252650905560643 15.501996840586935 +3.3325492979805196 12.153092156043025 +3.3654922945669443 15.285700076845876 +3.520110876563541 14.15506612986139 +3.778698182165511 27.583363725423176 +3.602537178285896 13.73915888734922 +3.8569473173437814 26.63115808652755 +3.7670895848548795 12.952390538378907 +4.011547048316258 24.879483369703127 +3.446906251564902 14.537218597785548 +3.6243381316403775 24.939507197240044 +3.510954734474191 14.202197496083798 +3.687054823867036 24.306573986836625 +3.639160297620886 13.559118298044751 +3.811635499634857 23.106674849454304 +3.3829865966661576 14.88107057394149 +3.501788823033367 22.663963993308453 +3.4309114261029583 14.622359510526586 +3.549390486933331 22.249561593371197 +3.526978640424285 14.119837806970278 +3.644378724011017 21.448425000355716 +3.2875113289101634 15.41303423141529 +3.337241951412992 19.30040194270388 +3.3113232250110465 15.278252387519347 +3.3610749456584323 19.130621189027732 +3.359064939071429 15.012259153786507 +3.408806873994907 18.795667010976715 +3.2739243978569994 15.490580405265744 +3.315446862854939 18.823084833167123 +3.2943103344163474 15.374404769127848 +3.335855499080458 18.68157031413461 +3.3351757854250255 15.14465656527266 +3.376734092809495 18.401754468924086 +3.5262290623025736 16.863029345628213 +3.8300156981287996 30.945280935412768 +3.6097734800378687 16.34097458900805 +3.9070068519614694 29.79076306668333 +3.776152600891512 15.358632851082998 +4.059036182770933 27.697493309725907 +3.451901847277813 17.344442174093786 +3.6628661285193154 28.26122476946717 +3.516939419066485 16.922312577925833 +3.7254885855586974 27.48498576983798 +3.6468475179153597 16.11558305615513 +3.849611095374843 26.028772263765195 +3.386893706576454 17.77904195706544 +3.5297705542316007 25.949221452633687 +3.43564442611278 17.451925728814526 +3.5777454196850815 25.435991419407312 +3.5331957047485356 16.818734566265448 +3.67326956913794 24.45084502372131 +3.289588748448124 18.454114159271715 +3.3505725793875154 22.53448116287608 +3.3138808516154015 18.282759160056422 +3.3748227132754796 22.321006871514196 +3.362537212802299 17.94521514056876 +3.4233323402751052 21.901049987870618 +3.2757204768034254 18.552799966986658 +3.3267955747199993 22.05052590461981 +3.296526531177881 18.404980687873135 +3.3475826558120008 21.87218869490093 +3.338198311721946 18.113123356043182 +3.3891770634133884 21.520389050712545 +3.5329556249676157 19.52347321510996 +3.8862662520406728 34.34771575310235 +3.6176845655775702 18.887231619763345 +3.961353023777712 32.96204431114094 +3.785954779654295 17.696757082965547 +4.109787510611806 30.487913219676322 +3.457422548825947 20.112440992440174 +3.705225841364755 31.621095169218002 +3.5235233998142363 19.595883509716966 +3.767456056970196 30.68069993432647 +3.655230970479857 18.61331674374025 +3.8905788627159343 28.936130728685363 +3.391231384109772 20.646025326073012 +3.5605742634314064 29.26683331864365 +3.440880893040886 20.244237365062475 +3.608819299798506 28.640598656395575 +3.5400277207417203 19.469391720234437 +3.7046641106403255 27.44763430110869 +3.2919112980135177 21.47845014312187 +3.3652462485731958 25.787130065530352 +3.316735249796701 21.266736908225766 +3.389933912156009 25.524137642873676 +3.3663988449095075 20.85052400739873 +3.4392513700393836 25.008331826818445 +3.277730474510072 21.600507693363284 +3.339285351362415 25.294150782006476 +3.2990029880792675 21.417715441943738 +3.3604755172025587 25.074158501014416 +3.3415656377060907 21.057427868063524 +3.4028267413797075 24.64126742291323 +3.5401838140516992 22.135796283961923 +3.9475326034491984 37.78944893432588 +3.626137655493897 21.377629622715578 +4.019920275468374 36.14175474360307 +3.7963172788490613 19.967317165996324 +4.163561095087207 33.2468629860779 +3.4633858049120705 22.840455884301548 +3.7515277022325475 35.01982670502658 +3.53060290922092 22.222282802014146 +3.812972460130008 33.892599403649776 +3.664166877873724 21.05218518944945 +3.93441385744752 31.8261171788374 +3.3959385867751823 23.481233378618228 +3.594294557395917 32.618241269618515 +3.446543660655215 22.99851759739426 +3.642653276273755 31.86353183844659 +3.5473657109141166 22.071228412470557 +3.7385120562034166 30.437424200866122 +3.294449692457209 24.485459985069692 +3.381306408438773 29.05957164983131 +3.3198493552687784 24.22952048546074 +3.406437596821611 28.740779005035712 +3.370596839371626 23.727419517989897 +3.4565645994349232 28.117544195753574 +3.2799295409675446 24.633180340262122 +3.352952134227205 28.555053709212434 +3.3017082206334667 24.41200086560262 +3.3745589018540696 28.288211517252822 +3.3452327650164313 23.976844190872683 +3.417685744958581 27.764519641186478 +3.547821974077613 24.699912963805367 +4.013874989245117 41.26939579383717 +3.635020016548729 23.812470613943702 +4.082621533387855 39.32696402075077 +3.8070920085148012 22.171576814957557 +4.220116661748274 35.97126815458086 +3.4697200706357934 25.528148354047335 +3.801875173921213 38.45854419245037 +3.5380887432869033 24.801387833075367 +3.8620427430908046 37.1199629517378 +3.673533828918087 23.432687948651694 +3.9809870914563383 34.696700066496064 +3.40096203998483 26.28420457406495 +3.6310237207851688 36.00539918098016 +3.4525656989879425 25.714387642262825 +3.6792842073992205 35.10539571640187 +3.5551161946497833 24.624187727489105 +3.7747601332841327 33.41935352892785 +3.2971781360213805 27.47472883893429 +3.398793997093393 32.35339705753316 +3.323190536045166 27.17065282500284 +3.4243605439567384 31.972057390052054 +3.375084836486246 26.575423075174726 +3.4752713250549263 31.229091122785825 +3.282295708457743 27.650436879576738 +3.36782930552637 31.83465437296379 +3.3046144616875304 27.387407586262924 +3.389855396364403 31.51540398500446 +3.349160239438487 26.87089478386639 +3.4337553935375524 30.890614752183936 +3.5557915213387767 27.216105674129118 +4.085329233789193 44.7862947059312 +3.6442362467494807 26.192475320298165 +4.149348917880401 42.51480951562357 +3.8181568868287337 24.311258444313953 +4.279216002578427 38.65861160778006 +3.476363393153908 28.17548668062333 +3.8563659663706424 41.93855988339305 +3.545904319173826 27.33343716452539 +3.914662698791794 40.36223873562271 +3.683229656246209 25.755759012026232 +4.030166882722197 37.54622212661048 +3.406255216916015 29.054718139694113 +3.67085407695035 39.43061789566807 +3.458888855471709 28.39175969625551 +3.718746351485621 38.36707776649961 +3.563199103450531 27.128585713875136 +3.8133533597449003 36.39287514676418 +3.3000738288235274 30.445966983778607 +3.417749112939028 35.67049441970666 +3.3267301031997714 30.08983274169358 +3.44372873137072 35.21937606703246 +3.379822229052759 29.394269563099797 +3.4953706394630073 34.34364328560998 +3.284809534847917 30.652004192485897 +3.383949135538648 35.1346360675346 +3.307697260350026 30.343640605794324 +3.406386656967392 34.757044194891485 +3.3533134032413416 29.739287111624655 +3.451036740078834 34.020269579070956 +3.908348809084388 3.108865081786397 +4.087623979074932 19.972715929308997 +4.0129286034579845 3.0183247434276317 +4.191712242055722 19.29682948275467 +4.22230185029211 2.846535341595973 +4.397566842350057 18.01680837327316 +3.815747100231518 3.1917679584031857 +3.9238400483475946 16.269483849649273 +3.8967504801924164 3.1191063945494863 +4.005430495904181 15.879478376105006 +4.059474550624719 2.979055722018851 +4.168220355215863 15.118964935907846 +3.735169984455348 3.2660574002055056 +3.797854827319173 13.07889362940012 +3.7955571691975973 3.2101919912641126 +3.858755785091927 12.859310538669927 +3.917051109008274 3.101207430440057 +3.980892240525699 12.424723704605197 +3.6154275290534974 3.380289101370381 +3.6346046510064807 8.321271943882834 +3.6452142504186793 3.3514352316479816 +3.6645091427636416 8.255709453478648 +3.705093466793151 3.29431254847308 +3.724594579013718 8.124853533297568 +3.598456616238231 3.396860831333663 +3.6135225261188593 7.639181514464687 +3.62392687171158 3.3720258798386626 +3.6390737965129434 7.587731329460091 +3.675105561113093 3.322774066843759 +3.6903976376306282 7.48501203988716 +3.9107598038365285 6.192814589984866 +4.128129546180026 23.45108217305045 +4.015819836809277 6.006759994845302 +4.231456521404573 22.619800196702336 +4.226021516510759 5.654545164658551 +4.435476739841719 21.066349392940413 +3.8176911501937862 6.363442041173031 +3.953777489316252 19.725786415648475 +3.8991052047110113 6.213878826248435 +4.035354409872738 19.227864493738835 +4.062564553211628 5.926156902114098 +4.197834918000654 18.267127399855625 +3.7366733899889004 6.516563828643661 +3.819392081093939 16.525165452385796 +3.7973938910736336 6.401396929481101 +3.8805162939031814 16.231391817280652 +3.9195039182367633 6.177066951262556 +4.002944176093328 15.654695403687526 +3.616213073292278 6.75243421151873 +3.6447994811828646 11.775222733824421 +3.646185653070788 6.692806596947189 +3.674899026426295 11.676101145189532 +3.70642381938181 6.574858231198056 +3.7353474960114266 11.4790821067385 +3.599134034880724 6.7866954077041415 +3.622200580890714 11.0969037191217 +3.62476595905099 6.735354553693086 +3.64792343630427 11.016998637214206 +3.6762585782693087 6.6336101363388895 +3.6995720965022874 10.858025205468778 +3.9145067919674905 9.239480105544644 +4.173410781869977 26.996030161773476 +4.02029105534928 8.950728824417583 +4.275773302629496 25.985163731150834 +4.231717876748634 8.405907718746347 +4.4776131512331 24.121840713743435 +3.8207257208686296 9.504890765229623 +3.987263354769999 23.238228954042857 +3.902766751303129 9.272214017787578 +4.068834269687722 22.615914972863205 +4.067332702647032 8.825842726182112 +4.230989232566196 21.427548295183186 +3.739029169089512 9.743573174328816 +3.8434661428263137 20.016216208703522 +3.800263672267992 9.564009266531997 +3.904903708960635 19.63745139515347 +3.9233143222912528 9.21501394819729 +4.027767981832495 18.89943752500969 +3.6174509964671384 10.11219181060971 +3.6561634873725355 15.253682229702402 +3.6477143352385113 10.018895575016629 +3.686548303490367 15.116704713458162 +3.708511415931483 9.834567751926159 +3.747529518229783 14.845318901012057 +3.6002024294176396 10.165832534976305 +3.63186834938662 14.575919271757984 +3.626087725120883 10.085460486446639 +3.657844413680754 14.4640055458721 +3.67807048212982 9.926347927044375 +3.7099732776310224 14.241939470037575 +3.9193917628456068 12.241527710250839 +4.223684002771788 30.59740426691235 +4.026088449103636 11.841835305076502 +4.32470653174159 29.379547326051362 +4.23902543268306 11.090799033404062 +4.523751433601403 27.1667158324246 +3.8247013579559246 12.609954447986356 +4.024514834650609 26.799738847175167 +3.9075432490380613 12.286912424383763 +4.105981555840409 26.033978007510953 +4.073500295579001 11.669326039113024 +4.267605289374589 24.587183443155624 +3.7421288729304005 12.942150411557773 +3.8702606315354413 23.54706513260259 +3.8040274895379826 12.692157413910927 +3.9320407189432682 23.070645488700166 +3.928279695270797 12.207615954078797 +4.055367586136677 22.149218930784897 +3.6190904188513553 13.456843635000357 +3.668797981464017 18.754215795340134 +3.649735548637444 13.32638460343704 +3.6995390201787717 18.574248847855937 +3.7112626974989187 13.069015996388602 +3.7611830204980974 18.2187694102002 +3.601618645894879 13.531910432473461 +3.642613522264506 18.074132394798077 +3.6278373752469553 13.41945102278048 +3.668909017481626 17.925951289075684 +3.680462295161089 13.197101203693641 +3.7216417273045965 17.63264894178473 +3.925239234077175 15.194391507611073 +4.2790892266406235 34.24818080311649 +4.032988233461706 14.675080728462124 +4.3782260983981285 32.79323439239293 +4.247626327372278 13.70392396816517 +4.573619764523993 30.189348335330596 +3.8294852131362167 15.674652950106992 +4.065692595364379 30.40601929072115 +3.9132645794698195 15.253470373201996 +4.14685103550682 29.475501786877945 +4.080822159995202 14.451481613427902 +4.307559032234808 27.73695698288964 +3.7458759284938994 16.10900565691275 +3.8999155161984955 27.115034747789316 +3.8085616638534923 15.782017621064895 +3.9620068223478135 26.52667561797914 +3.934220528528495 15.150262357964511 +4.08570868442893 25.397456123412393 +3.6210861139360877 16.78449786720532 +3.68277927234978 22.275708820127605 +3.6521917094441188 16.61298886872555 +3.713929237086624 22.046933800277067 +3.7145943565612227 16.275219944059273 +3.7763287523070024 21.596431593957625 +3.603344351120787 16.88327565464486 +3.654501807724441 21.59059978408365 +3.629966189151337 16.735318955102304 +3.6811685065810447 21.401323179581624 +3.683363711090234 16.44322147305203 +3.7345990478505935 21.027618286617873 +3.9318951667531374 18.09527907976583 +4.339715826297882 37.94316430488797 +4.040795496120281 17.447628690023276 +4.436254051901326 36.21872151137393 +4.257249041795247 16.24281909662586 +4.626926375460785 33.181274310661394 +3.8349599702334713 18.696407692892418 +4.110923933980328 34.05452804552028 +3.919781290177452 18.169112430051822 +4.19146312075943 32.93586369044839 +4.089085677024361 17.169509707059497 +4.350702462633306 30.870307362718812 +3.7501848433368945 19.241912091493752 +3.932546154740056 30.718978819850214 +3.8137568911596937 18.83108357791831 +3.994856608626713 30.002886269570773 +3.94097934747859 18.04014971017948 +4.118736261023241 28.639570076749433 +3.6233978573027863 20.093794602904712 +3.6981689599643763 25.817958710391466 +3.6550316249119583 19.87708885733769 +3.729763041046811 25.53395288940476 +3.7184325653741848 19.451128857593204 +3.792975403573859 24.97648004599785 +3.605345468921928 20.2187307992604 +3.667585829950713 25.125176816235548 +3.632430839622556 20.03162713636777 +3.6946617716810883 24.889481963315927 +3.686712367648728 19.662860329432352 +3.748856186391246 24.42534907393265 +3.939225303186537 20.942607688783383 +4.405613822565727 41.67818211454025 +4.049342134857602 20.1581003719255 +4.498677424293217 39.649874004480395 +4.2676645069374075 18.706871393315748 +4.683373483295972 36.13617269740024 +3.8410225902436816 21.673604597866742 +4.160314422799155 37.743849779545364 +3.926962983847434 21.032243389966514 +4.239815050771396 36.411671320270706 +4.098108314316902 19.82216712557904 +4.396874857203324 33.98234404324404 +3.754980015010811 22.339375225135623 +3.9682535316078287 34.35881492567049 +3.819517005163479 21.83775701585827 +4.030629359322677 33.497725143422976 +3.9484190086207227 20.87570607240398 +4.154383590241057 31.872317921648484 +3.6259899517759853 23.38374483002503 +3.715019665426319 29.381437742744737 +3.6582099117022664 23.117528394646246 +3.7470760715507523 29.03521459815085 +3.722711912462859 22.595334636073705 +3.811124785009546 28.35791015474931 +3.6075916598128264 23.53739447555538 +3.6819100728909184 28.67831277159513 +3.6351928861062093 23.307335779489016 +3.709420126350104 28.390422053834573 +3.6904529257666594 22.85472163062361 +3.76441794274195 27.825072222818914 +3.9471132392037966 23.735644929015645 +4.4767982226879495 45.44952826690014 +4.058484015028822 22.80612358359776 +4.565354960610788 43.081385013224384 +4.278681064316986 21.096693619213227 +4.742665132026967 39.04922794847668 +3.8475828578480384 24.60531626586318 +4.213953890916272 41.47326249774689 +3.9346964673026523 23.84209915781836 +4.291886739351129 39.90029800586018 +4.107734387673601 22.409276869154148 +4.4459089158337655 37.06931203547723 +3.760194773117916 25.400427713010988 +4.0071302770356825 38.03520848800799 +3.8257576541865235 24.80108786789467 +4.069354499343646 37.01038376603931 +3.9564207152441555 23.656224038256532 +4.192577171756838 35.093359372670875 +3.628830590221926 26.65362572329798 +3.7333786287095903 32.96713448700653 +3.661686229986943 26.333483926766057 +3.7658989144799104 32.55115747373037 +3.7273745610895834 25.706893631190294 +3.830774870170644 31.740303488748822 +3.610055983206388 26.838616135220928 +3.6975139940147774 32.2509138384679 +3.6382181101226982 26.561690398742382 +3.7254702611653436 31.90461156014455 +3.694536332982547 26.01790893577716 +3.7812856419288456 31.226545077646133 +3.9554583667004457 26.4742658286521 +4.553249584019849 49.25356102042953 +4.06809806839755 25.392028696086335 +4.636120637985482 46.50841800117637 +4.290139451363941 23.413709183921608 +4.804511679300002 41.91671176973302 +3.854562008951723 27.49111426315316 +4.271919078799495 45.24241219828861 +3.9428837752726325 26.59851068559316 +4.347643616498462 43.39955759081595 +4.117831768792764 24.931397870146764 +4.4976342283594395 40.12823579736331 +3.7657704395272957 28.424490398515005 +4.049264278575017 41.74934232566381 +3.8324050325350263 27.720598524700048 +4.111054708754402 40.540540394670984 +3.96488189546363 26.38161268298664 +4.233239507758765 38.300962561413066 +3.6318915010755894 29.9029146189136 +3.7532901286594202 36.57644351445416 +3.6654247421260955 29.52438054999584 +3.786259324227151 36.082620705052776 +3.7323694757641785 28.785205208773593 +3.8519216857244345 35.12366506556005 +3.6127143918163 30.12191513637958 +3.7144341243432506 35.84424751001923 +3.6414760611887926 29.794150335316054 +3.742836198607223 35.43288123483258 +3.698919196172059 29.151822429772988 +3.799458819207397 34.629910715120936 +3.964173910165963 29.158782310815166 +4.634912241956944 53.08640155923203 +4.078079672274095 27.916637896735867 +4.710785906849352 49.926373655896874 +4.301908009413771 25.6598672953671 +4.868632724008338 44.73570525331599 +3.8618913644070556 30.33093745996967 +4.334274216497257 49.0510601109722 +3.9514402891131195 29.30173820267394 +4.407037872022774 46.9074695129167 +4.128288782280359 27.389596613619133 +4.551879167278277 43.15667664232815 +3.7716553696256327 31.41127422814225 +4.094740749875088 45.502739736952094 +3.8393946328149213 30.59616071209191 +4.155747514128309 44.08817012791144 +3.973714176909244 29.05222348457007 +4.276290577049268 41.49379575186964 +3.6351474801160117 33.131240299790946 +3.774797184805354 40.21108504841036 +3.6693936783488605 32.68983201376275 +3.8081837359252235 39.630750021743644 +3.7376515961152053 31.82992630594246 +3.8745605030803456 38.508305733815526 +3.6155454238517963 33.38694157407758 +3.732705554083098 39.45987351278162 +3.644939693514959 33.004337533159266 +3.7615406302356313 38.97634310948755 +3.703563085965852 32.256085873455525 +3.818936305619468 38.03559613615616 +4.296625019079373 3.293271335258404 +4.5612575105855635 26.30768999722597 +4.42855651399023 3.182216821934386 +4.68990929341998 25.188990530282908 +4.6917802622904095 2.9741783358302945 +4.942627549732541 23.134561042909784 +4.179646490089138 3.395681002962341 +4.335731020465086 21.193727856587167 +4.281979956888662 3.305887028147534 +4.438335353982103 20.570791296192223 +4.487191232717542 3.134335876875431 +4.642079116798669 19.37339959083259 +4.077801573755593 3.487957411912323 +4.166237752607801 16.819016601529768 +4.1541299673135414 3.4185241198787164 +4.243237608760101 16.480030910255397 +4.307611802603276 3.28384516706776 +4.397337088132671 15.812846073344028 +3.9264954869184865 3.6306166287805826 +3.952207414313577 10.337519133403795 +3.9641193061800575 3.594505282722959 +3.990013700728414 10.242429516183005 +4.039785989204787 3.523164301453667 +4.065991439131656 10.05266041742153 +3.905066242342837 3.6513773324305787 +3.9250512426296207 9.410498795319468 +3.9372296199345453 3.6202701878508803 +3.9573406431692937 9.336747021211977 +4.001887364060823 3.5586839731410285 +4.022219793479401 9.189488346364381 +4.299180055690194 6.559520240248411 +4.609782254575881 30.077486746226203 +4.43159949492609 6.332225339586545 +4.736642892261911 28.748065083223125 +4.695644594492346 5.907356566833625 +4.985734162906847 26.341032875851223 +4.181719311164899 6.769442878918336 +4.371244138568331 24.931466268641948 +4.284477275568951 6.585363374436852 +4.473480267277712 24.16573839327129 +4.490433658379738 6.234335672772711 +4.676156260153624 22.710414458071707 +4.079412948296973 6.958865919086213 +4.191558704625648 20.53883839076312 +4.156090937238276 6.8163103812072 +4.268688892220993 20.103842825771167 +4.310209655903305 6.540213866679509 +4.422834250834291 19.25517455898017 +3.9273436443210983 7.252238862953807 +3.9640557386327093 14.060809446094892 +3.9651662834983488 7.177915964294165 +4.00206810656324 13.923399101422934 +4.041214583739266 7.031207509396402 +4.078419455808144 13.650453765342895 +3.9057983756770014 7.294986741352777 +3.9351230583392263 13.138027041566403 +3.9381351360130448 7.230939959368254 +3.967596350015263 13.028483561746569 +4.003127829844909 7.104231371671823 +4.032817330522436 12.810634731155238 +4.303160058685162 9.785129864310884 +4.663561763113921 33.921619680609446 +4.43631487868625 9.434098582472322 +4.7882389345271985 32.35154051028514 +4.7015712990579175 8.780023843880393 +5.0331315136221875 29.55037588172244 +4.184963191098231 10.110055990898282 +4.410662164179316 28.733422637244328 +4.2883696350426685 9.825092826822676 +4.5124587992570895 27.804554143057487 +4.495446488044076 9.283163026964132 +4.713923648874847 26.05909391054723 +4.081944952554306 10.403866670097585 +4.219655360996911 24.310487242631833 +4.1591628995868035 10.182696446480877 +4.296981786107067 23.766341167662866 +4.314254591876748 9.755282020740646 +4.451268589845716 22.713463577925616 +3.928684427547246 10.860095400271206 +3.977166280486536 17.812819381066333 +3.966818929493996 10.744376678628045 +4.015478860063378 17.62803422256553 +4.043462805164146 10.516231308022208 +4.09237883160462 17.2623449518536 +3.9069567364626043 10.926695578632398 +3.9462609631667265 16.89055180090038 +3.9395659809228416 10.826923926445605 +3.9790044006708594 16.741060475756836 +4.005082950467711 10.629744722992353 +4.044729966089375 16.444677953261948 +4.308359167602159 12.96193323759639 +4.722762258387981 37.82718196876783 +4.442439251377028 12.478567042838407 +4.844668976532122 35.98326299550995 +4.709183393605422 11.581513360199862 +5.084519784150298 32.74394274200884 +4.189222716668599 13.410608320584435 +4.4541903076461065 32.59082204143865 +4.293457535427924 13.017050363258042 +4.555353372702086 31.475597279668516 +4.501940793562052 12.271153128641673 +4.755257063864418 29.404420865819958 +4.08528496199541 13.817385160390144 +4.250712578165823 28.12788474000985 +4.1632012790888515 13.511082652449604 +4.328231177684741 27.45932019300212 +4.31953597090209 12.920778862875919 +4.482622568191037 26.176384053113114 +3.9304652374976032 14.451086259247003 +3.9916450530083654 21.590609023905532 +3.969010198094315 14.290112850342625 +4.030330898334061 21.35243365446402 +4.046433557958165 13.973224939243893 +4.107911183354786 20.882707000719847 +3.9084967587189126 14.543806846088152 +3.9585570144994673 20.665542064890833 +3.9414654816381334 14.404925427230907 +3.99164015237632 20.47113700368933 +4.007670834617597 14.130812903828792 +4.057998638327622 20.08679420442106 +4.314593289311213 16.08479865907844 +4.787465986317709 41.7844708431645 +4.449738445558055 15.460066057018551 +4.9058284539343475 39.631006707538816 +4.718150918141123 14.306038276746019 +5.139560392624135 35.90850467988292 +4.194358408782314 16.666588263149766 +4.501974165566619 36.497765470411906 +4.299562477274956 16.15616881545891 +4.602187290916054 35.17050592603495 +4.509660416184819 15.192624441166839 +4.799987867251818 32.73568262134517 +4.089331675366897 17.195664769050456 +4.284870414459436 31.98737291341701 +4.168076262955337 16.797126614294193 +4.362507379081623 31.17726951000329 +4.325865504639117 16.031526579584913 +4.516839858919601 29.63599342253976 +3.9326388713011657 18.023028182534322 +4.007572657336246 25.392649781415052 +3.9716798826241693 17.81249450724931 +4.046684651799673 25.094273285217596 +4.050039519296111 17.398772966547458 +4.125035844333549 24.50784381317646 +3.910378481007197 18.14440959093246 +3.9720809142520923 24.4617018907903 +3.943782760942437 17.962629741241745 +4.005557470777624 24.21675577093361 +4.010817866631688 17.604395343632152 +4.072644756059316 23.73385404426318 +4.321699598469063 19.150560751320775 +4.857695093974208 45.78562578187266 +4.458007140206941 18.375413635669645 +4.971562617170429 43.284986993282764 +4.728190657278289 16.950889529102664 +5.197902856582163 39.03439410813861 +4.200246074169866 19.875045593280998 +4.5541217472395115 40.450148872229896 +4.306526439443518 19.23929840243234 +4.652946405635797 38.88297177512342 +4.518381834098764 18.0444504040082 +4.84792495273516 36.04495343457679 +4.093994615263853 20.536137246103173 +4.322242688918609 35.88689592573789 +4.173672121133249 20.03795502085618 +4.399853989699975 34.91642220678195 +4.3330767736166 19.08435005085733 +4.553842675562211 33.08653491827151 +3.9351629809011572 21.574334560096187 +4.025014548994394 29.218392274029743 +3.9747739894760534 21.309637491441173 +4.064586026755489 28.852298372869424 +4.054202619181402 20.79050319574479 +4.143759423919959 28.135336096057976 +3.9125660741608184 21.727104587064968 +3.9868888958817577 28.278595523905857 +3.946472178536453 21.498361487455167 +4.020797389607336 27.976902606531315 +4.014458185475754 21.04834783202135 +4.088678501932496 27.38385474758361 +4.329535244712697 22.157408327086788 +4.933422152642755 49.82379897682418 +4.467067246280898 21.223047987618894 +5.04168007938442 46.93700490653154 +4.739062727332439 19.515382841231915 +5.259198795388077 42.11442973709318 +4.206775850808865 23.034115832672793 +4.610714301750667 44.44499604445461 +4.31421062830084 22.264611537231826 +4.707590076121611 42.608011804026255 +4.527912114446981 20.825228789349424 +4.898866198670978 39.326212283738975 +4.099193167997394 23.837061748985416 +4.362926884422728 39.82550132689772 +4.179886304053361 23.231717801394495 +4.44029728259132 38.6741838696082 +4.341023899996514 22.077452027125233 +4.593540837086557 36.52373496110398 +3.9379996819794485 25.103839329770985 +4.044026772252479 33.06801409125024 +3.9782442636156374 24.780182615429407 +4.084071943511152 32.62602759150899 +4.058853152509948 24.146770517112582 +4.16408103017694 31.763662153383848 +3.91502737896167 25.290850909814093 +4.003028688518715 32.11642945155017 +3.949492913450399 25.010895741919803 +4.037392922153376 31.751250861322422 +4.018532866176226 24.461151128736695 +4.106103388073143 31.0355920070504 +4.3379756718174205 25.10449016694941 +5.014574421940767 53.89260211386381 +4.476765341739159 24.00253454078868 +5.115960767150345 50.579908803984864 +4.7505658054290425 22.00018229644259 +5.323109897501271 45.143233784614196 +4.21385090755111 26.14271433719897 +4.671811614908573 48.479997040453185 +4.322493864906903 25.23121967869293 +4.766057041030193 46.34148728996411 +4.538085995994649 23.534746686196883 +4.952604993078196 42.57478016051697 +4.104855746011179 27.097298976797802 +4.407009871636436 43.80299976330104 +4.186628237413981 26.37730192129916 +4.483851509566779 42.448751129838925 +4.349579814887432 25.010010619380825 +4.635836854282417 39.944346171474635 +3.941114960929954 28.610681302073804 +4.064659573078912 36.942249885908225 +3.9820474914318176 28.223151564744022 +4.105173746818253 36.41555444634886 +4.063929037015564 27.46646018890997 +4.185995360180586 35.39194636975163 +3.917733624046415 28.834872219165515 +4.020542655345416 35.97590562392116 +3.9528083555173827 28.49933437580822 +4.0553720450507935 35.53998990269578 +4.022989296948752 27.841743433160314 +4.124918976920377 34.68844201752419 +4.346912691614069 27.991645849477145 +5.101035156353174 57.98572516983114 +4.486969896104842 26.714230173922473 +5.194161081301802 54.20725009880993 +4.762532197616514 24.40684701876963 +5.389312398800658 48.11677322918954 +4.221386221529217 29.20032821285695 +4.737454119353828 52.55316346762366 +4.331270741817563 28.13891166583226 +4.8282684813969325 50.079770902397954 +4.548762709735426 26.173616700147527 +5.008934140149667 45.78694401186605 +4.1109189228863565 30.31615654535758 +4.454571223219718 47.81971374996585 +4.193818209256498 29.4741364746727 +4.530521915317156 46.23883809144059 +4.358634268246252 27.881904517917704 +4.6806288973386545 43.3458362015043 +3.944478367104196 32.09423078196513 +4.086959834246699 40.84227173018523 +3.986145010778272 31.637853319908942 +4.127919448551489 40.22140740023779 +4.069375114290699 30.74885319462562 +4.20949463541207 39.019783580287566 +3.9206589389697264 32.358588638434746 +4.039469917112389 39.85811820246798 +3.956385686979039 31.963026410808308 +4.074759677981428 39.343704696199126 +4.027780609774816 31.189405327614836 +4.145122610398154 38.342209320491946 +4.356252575254212 30.819214872336946 +5.192643394105068 62.09667738489361 +4.497568732097182 29.35904869432017 +5.276017996669405 57.81306697981264 +4.7748230334671575 26.737518021418918 +5.457499838983739 51.03204528887613 +4.229307268200338 32.206868446478566 +4.80766309478213 56.662564351701874 +4.340449796027706 30.9879680938694 +4.894129680472645 53.819512387916156 +4.559822934380409 28.743023160206185 +5.067648180045466 48.95969828825686 +4.1173265330468665 33.49327877227826 +4.505684980656787 51.87628301455961 +4.201386170660928 32.52205436463562 +4.580306275275861 50.04347459044055 +4.36809185855169 30.693518190115327 +4.727812498396633 46.72616793971989 +3.9480625661428976 35.55403484589976 +4.110972790235917 44.76960147933402 +3.990502313387137 35.02381686650323 +4.15233525144288 44.0444468052939 +4.075142384423624 33.99353002072068 +4.234569832812026 42.64711131314697 +3.923780076301686 35.86157297697184 +4.05984786075657 43.76447840832543 +3.9601955626878804 35.40151070510793 +4.095579046221573 43.16328723332317 +4.03286502972696 34.503677854130736 +4.166710533066029 41.997015827369815 +4.673732119629226 3.4530151016608976 +5.049539232584255 33.63696183559573 +4.834885143362421 3.3210978099690216 +5.201039426506809 31.869249867019203 +5.155106239550652 3.077303013093649 +5.497447059913667 28.749536642281427 +4.530588937093372 3.5755926575018986 +4.747999032893874 26.849499741640017 +4.655822458688125 3.4680697766641715 +4.872375251253572 25.89649423630904 +4.90638033805947 3.2645823966737053 +5.118011320707646 24.099713332197293 +4.405850288382115 3.6866976221728076 +4.526521989505727 21.081670736849837 +4.499343219737954 3.6030428161809263 +4.620743925972105 20.579489948141887 +4.687165576693484 3.441775367434582 +4.8087762917353585 19.59878178109411 +4.22051994468607 3.859462957416747 +4.254081967152926 12.598895374101671 +4.266592127790016 3.815631800808383 +4.300419595203669 12.465866713351463 +4.3592789051292415 3.729231591712585 +4.393544872247024 12.200480476287487 +4.194285862114022 3.8846883755461246 +4.220129837539757 11.389440356778458 +4.233662952294935 3.8468985200334034 +4.259691654718055 11.287344915552703 +4.312852354248535 3.7722153500056255 +4.33919847784346 11.083501373077327 +4.676408386942586 6.8771510337908115 +5.1065846651255935 37.68109700751374 +4.838051135876946 6.607991808288936 +5.254731449457154 35.63587800013423 +5.159078187516001 6.111583110064739 +5.5451680777171415 32.079219143809716 +4.532773375456567 7.127625550816569 +4.789402597378159 30.85350486661281 +4.658440260221136 6.907894034327297 +4.912854089538677 29.716151003973813 +4.909744130963029 6.492801713029063 +5.156349172261012 27.59720805654695 +4.407557426327994 7.354978211100013 +4.555777070795552 25.05837964682093 +4.501412556818073 7.183767575468734 +4.649972240173506 24.43503528541024 +4.689885144836241 6.854202008666799 +4.837676742587276 23.22894509036776 +4.221425229584399 7.7091378525562115 +4.267605344555467 16.57223559253033 +4.26770762015223 7.619211927939285 +4.314155059260014 16.387293819697263 +4.3607953248323845 7.442098158722161 +4.40765170772895 16.02023596920383 +4.195068089272858 7.76091467989913 +4.231609029931678 15.36725226667 +4.234628969261465 7.683354884162702 +4.271364011713206 15.221378576154843 +4.31417156438044 7.530187066787409 +4.351221774344455 14.931420266058215 +4.680584554387812 10.2576811196785 +5.169313880984121 41.8052222196605 +4.842964480922546 9.84358425234943 +5.31348697104094 39.446842098734514 +5.165176256673213 9.0821875169875 +5.597168621220117 35.4080675654123 +4.536198789762039 10.643872535680485 +4.835059049299893 34.92908048872113 +4.6625276931014366 10.305037592669377 +4.957410486584925 33.58280005763233 +4.914951792845729 9.66664228567783 +5.198475319171212 31.10497016405907 +4.410245833231266 10.995140635213223 +4.5880438936040395 29.093702751696842 +4.504660920970115 10.730548821832834 +4.682243439437657 28.33348556992944 +4.694126935499567 10.222338446662862 +4.86965148768014 26.875696403972317 +4.222859927178192 11.543755349117676 +4.282480901058191 20.578471095289192 +4.269472727419045 11.404287260245988 +4.329339073350974 20.335763799646625 +4.363187213087692 11.129931821251905 +4.423383985546395 19.85605561785317 +4.196308876696229 11.62410955224816 +4.24422776138501 19.373743715230518 +4.236159229967505 11.5037561948792 +4.2842655710630355 19.179306065394048 +4.316255713686457 11.266329583027375 +4.36464185381003 18.794151590794222 +4.686048172301919 13.58569319349137 +5.237819636646127 45.99340115241294 +4.849353964256772 13.017844057126656 +5.377192921594614 43.2833131503818 +5.17301484524348 11.977753985485082 +5.653081002995299 38.71581331047192 +4.540704622250692 14.116733990599815 +4.885152779630951 39.06564920550227 +4.66787883489252 13.65073496815126 +5.00608969212658 37.482813492352776 +4.921706260440702 12.775683282508089 +5.244217781250487 34.60623746879117 +4.413799210909703 14.60101572826436 +4.623505051160422 33.18045427701426 +4.508938971875946 14.23611846184816 +4.717660695328199 32.265286068878744 +4.699673600393109 13.537165590450565 +4.9046587801205765 30.52621354784599 +4.224769935711618 15.359852080836294 +4.298818372556628 24.614175245359558 +4.271818386261256 15.166650495484022 +4.346058447108332 24.306767675395047 +4.366354363386839 14.787173923686337 +4.440781549984434 23.701516236912138 +4.197962427748194 15.4712558956445 +4.258081651190338 23.405965487750795 +4.238195415554204 15.304421776982787 +4.2984739381820765 23.157266662594978 +4.319020370804453 14.97573761852897 +4.379499241518605 22.666184210289753 +4.6926078868303875 16.855547131121103 +5.312103182982508 50.23298573651199 +4.856976951804374 16.124711479240005 +5.445661407084718 47.130706349239915 +5.182254959975293 14.792089555008205 +5.712509824886578 41.98804824524939 +4.546145669736183 17.541209895661122 +4.939805173453007 43.25558448167982 +4.674308094782732 16.939411180516004 +5.058876129091678 41.40601701366585 +4.929742576308229 15.8137625509991 +5.293363524975639 38.08887555547149 +4.418112119519092 18.16841003587037 +4.662297194349358 37.31396343012832 +4.514111554404675 17.69565525871503 +4.756281423737992 36.22370935050143 +4.706329469636074 16.792997058491352 +4.94261822969022 34.17128343243087 +4.227106314709713 19.154965213977786 +4.316701785474545 28.677412950228263 +4.274682080656199 18.90334250276618 +4.364375084813331 28.29746673497208 +4.370205958373554 18.410001596355702 +4.459861470709673 27.552249387798412 +4.199987353307907 19.30019494368338 +4.273243687538506 27.462276366906696 +4.240684752009647 19.08274239890773 +4.3140448760403185 27.15286762531637 +4.3223890113503325 18.65499891688232 +4.395814484093129 26.543812191959127 +4.7000934453070915 20.06374136377688 +5.392097159533051 54.51322502410207 +4.865619644442993 19.16070180576205 +5.518655878685656 50.977165977739226 +5.192604603859601 17.522282544446057 +5.775057893133097 45.214290040942856 +4.552391782708476 20.91400694030914 +4.999095492931612 47.493078920003015 +4.681650183272974 20.167577971960224 +5.11571449516163 45.34442101508327 +4.938828440527271 18.777470845390337 +5.345680167637851 41.543804818653534 +4.42308972454572 21.694433869874416 +4.704529058808039 41.491215026417905 +4.5200573570822975 21.105945388758947 +4.798134710036161 40.20386090641164 +4.713920580816752 19.9863234757471 +4.983427914007613 37.80405260454898 +4.229824841331023 22.927289145653678 +4.336199667559668 32.76728666792146 +4.278007337735609 22.612225010169553 +4.384335910427735 32.30615859727246 +4.374660167673016 21.995737999451208 +4.4806275523485155 31.40525330001218 +4.202346278385919 23.109331827978824 +4.289773089250127 31.54194932513142 +4.243579554548501 22.836812939045785 +4.331020935539747 31.164720955678913 +4.326292661590831 22.30168691300246 +4.413596437308512 30.424536974395334 +4.708354715891608 23.208258410767584 +5.477676375977656 58.824442628826276 +4.875095770571782 22.124093102520476 +5.5959058590203625 54.81270695260358 +5.203815778570509 20.167590895300435 +5.840339676519533 48.38685013059463 +4.559327158240996 24.233028603865453 +5.063070951891199 51.77344684539552 +4.6897591649545864 23.33319720758961 +5.176520691119292 49.29147288257197 +4.9487625730929565 21.66526886039081 +5.400927569348124 44.96408325205119 +4.428646972798589 25.177113336995323 +4.750290981202875 45.71032301364301 +4.52666824415266 24.464904229808603 +4.843230476531731 44.20208224414831 +4.722293675102667 23.11514464133431 +5.026973497535074 41.41929603992597 +4.232885687009276 26.67548554862983 +4.3573707706148666 36.88367083181346 +4.2817433548602795 26.291742688953278 +4.405978393935513 36.331965286571 +4.379643479146347 25.54251204122984 +4.5030755825460025 35.2584935519493 +4.205005431733529 26.897469917476627 +4.307720270206512 35.644941932693925 +4.246836888131049 26.56522869366105 +4.349436272832188 35.192173768067676 +4.330669220170007 25.914068543138026 +4.432846845841756 34.30672085924883 +4.717260214965987 26.2881398659431 +5.568663389379966 63.157517020111946 +4.885244305123327 25.01439695002987 +5.677116358690629 58.62868017923167 +5.215679901956297 22.72872284917528 +5.90798871063697 51.50010085028639 +4.566849205112066 27.497044165398695 +5.131751509930848 56.09264583240812 +4.698507051887562 26.435267634440947 +5.241187942492418 53.241568351151 +4.959372022416832 24.476913841373506 +5.4588645801345965 48.344317239130966 +4.434707931372787 28.615145728723594 +4.799660307385905 49.970168997971086 +4.5338482015064425 27.77126641516701 +4.891564668020985 48.2155524691351 +4.731314673718275 26.17853570547558 +5.073133467462567 45.01294086553337 +4.2362528729676185 30.398557811888697 +4.38026767853874 41.02703181675265 +4.285844347084193 29.940766631736388 +4.429333963019667 40.374622845799564 +4.385090037701072 29.04904520904644 +4.527196446821204 39.11063676846229 +4.207934412607682 30.663709213353673 +4.327129986198721 39.77174087005314 +4.250418006335939 30.26695117642434 +4.369319643580019 39.23512647886992 +4.335462902409953 29.490922160103302 +4.453563094652249 38.18935597108936 +4.726695304678029 29.30319379902419 +5.664831988234559 67.50355022938776 +4.895926769693169 27.831994836340616 +5.761974755984846 62.417436653703284 +5.228022958262762 25.20735196094682 +5.977661423746748 54.5499721593961 +4.574867427496815 30.705462094404048 +5.205131703832796 60.44692430137483 +4.707782079431145 29.473540335115043 +5.309590326039908 57.18971789233107 +4.970509024823244 27.213066288542105 +5.519253218633604 51.68026447519619 +4.4412049190709695 32.00773047042714 +4.852704393388253 54.27013377455462 +4.541512325474122 31.024373574579297 +4.943122213360518 52.24200297935672 +4.74086681248618 29.176348564451853 +5.121782287298018 48.581740738030206 +4.239893996141359 34.09577073743648 +4.404939239742134 45.19830010018509 +4.290269122273011 33.55849229163019 +4.454430248168218 44.43433217022588 +4.390941009365836 32.51450434801963 +4.552978096182867 42.96086391752958 +4.211105721784263 34.40737167842729 +4.348043470618732 43.92325194008115 +4.254287973731771 33.94122092313502 +4.3906963956539276 43.293904326848036 +4.340623726406517 33.031412231725234 +4.475739969413595 42.07190211487484 +4.736560340531015 32.25378555352571 +5.765910009367956 71.85367399836173 +4.907024801206264 30.577882914188503 +5.850156540732119 66.17211647108549 +5.2407006763920325 27.60578030515503 +6.049039154325536 57.53359735098646 +4.583302182635626 33.85816745936055 +5.283180832439727 64.83255890287252 +4.7174869407563325 32.44831515644625 +5.381585085175357 61.131318649324484 +4.9820481509742285 29.875015047983464 +5.581861184939495 54.968556284497176 +4.448077771227765 35.35444794049514 +4.909482100991036 58.6098888956438 +4.549585690152567 34.22402215065331 +4.997878572523095 56.27950762916024 +4.75084872556279 32.10899845881136 +5.172792327390342 52.12304628262677 +4.2437798064524905 37.76659029035518 +4.431432282208308 49.3987756669704 +4.29498070866978 37.144365155246966 +4.4812926060930245 48.51164815260367 +4.397143846941279 35.938396009696895 +4.580406809476543 46.80873390177448 +4.214494504044055 38.12795302032991 +4.3704999506702285 48.10071874569099 +4.258415375415756 37.58749450062663 +4.413589844139106 47.369162181210584 +4.346106910126444 36.53499894558234 +4.499370807200539 45.954167872788446 +5.042612481753301 3.5923887484119437 +5.55966209713504 41.98678809203002 +5.234624259239879 3.439529496231852 +5.7296436030247175 39.30092524941374 +5.614441339985734 3.161001354836032 +6.063445018273508 34.78421616768239 +4.871691120230137 3.7355767879381143 +5.165862159260733 33.259162082989036 +5.021243871616503 3.6099183330222666 +5.311960616833712 31.850525118999116 +5.319637425670498 3.374479799495841 +5.598974896447084 29.259368000614007 +4.7225605844442615 3.866185095474462 +4.882832830848435 25.878372184061078 +4.834347674769884 3.767777951866454 +4.995175007001321 25.158368777618932 +5.0586368488050715 3.5793121224068503 +5.218588852566084 23.766671144287958 +4.500903517105464 4.070531640762237 +4.543760267488788 15.108930743163958 +4.555998498718202 4.0185642280187395 +4.59922191819947 14.92813578178452 +4.666859354733204 3.9163654346547263 +4.710666168315661 14.56770826732679 +4.469538649630857 4.100472620261524 +4.5022692007952525 13.57927755603757 +4.516619086412296 4.055627230001664 +4.549607688308489 13.441846675043193 +4.6113279637816085 3.967166727086067 +4.644748853509312 13.167516594753156 +5.045391113008557 7.15425567494232 +5.625606133148065 46.286473772789236 +5.237890046020143 6.8431327837493034 +5.7900481137673605 43.24565523187864 +5.618492985261896 6.277323998105751 +6.1150889495789 38.20742435652209 +4.873972859495433 7.446112303758144 +5.213479663664344 37.51702836133804 +5.023963832922081 7.1899635778978865 +5.357837500478731 35.87504875380965 +5.323097814545246 6.710866803247254 +5.641297890626531 32.892005961689264 +4.7243532421175525 7.712697052009535 +4.9161862114435655 30.099034784651373 +4.836512041586625 7.5118047744840934 +5.028262383330979 29.228982983862704 +5.061458862756775 7.127622435137217 +5.25082468218436 27.563488632860214 +4.501861359460369 8.130530179667721 +4.558983194566306 19.316794973931437 +4.557176610598458 8.024183005830732 +4.614657018037813 19.073643977547178 +4.668454851581532 7.815217053500032 +4.726455612459774 18.591570997689775 +4.470367129328447 8.191829672565088 +4.515171502204685 17.79158345628619 +4.517640661094812 8.100023295097559 +4.562708959049257 17.601734029313924 +4.612718632706399 7.919061636868084 +4.65820123198007 17.224592027693852 +5.04973294268895 10.669885475941866 +5.697577438689202 50.66897713339635 +5.24296399821203 10.192695602956839 +5.855616108816578 47.23260345628276 +5.624717954290957 9.327376587002481 +6.170947241640462 41.62592195379034 +4.877556536284087 11.118473586346305 +5.265684063380468 41.85287260708051 +5.028216698104986 10.724718906524023 +5.407996648436072 39.94849649711203 +5.328460558274293 9.990133494883656 +5.687459611835674 36.53286762059353 +4.7271813634202715 11.529054945644626 +4.95278516806364 34.38478973034262 +4.839915183706477 11.219574723398326 +5.064580313333964 33.34617929876421 +5.065866372153742 10.628996156005364 +5.286245136211107 31.37697711496819 +4.503382509686748 12.174254474033969 +4.575646129947554 23.561686805223545 +4.559044546660886 12.009840050320681 +4.631629132760244 23.24948396201041 +4.670976145770175 11.687170151176495 +4.743957630725897 22.633326319716883 +4.471684065693054 12.269086833403561 +4.529284698855879 22.03622418791163 +4.5192622681720325 12.127076340187763 +4.57711305546527 21.78851071900912 +4.614919918861467 11.847454365033109 +4.673126495376003 21.298301633309855 +5.055419963392195 14.129698964415267 +5.775570195938042 55.11508419883419 +5.249568551424798 13.477522991913428 +5.926143415484363 51.240497207720544 +5.632724253413689 12.29922395956546 +6.230595709545263 45.01826196733309 +4.882277151134824 14.744431772329792 +5.322629100678156 46.254185097440526 +5.0337911073062935 14.204754161534364 +5.462438721654581 44.055271940555485 +5.335422082263237 13.20120802476918 +5.737241187169714 40.163689383245504 +4.7309254262394465 15.308535532462681 +4.992806560279497 38.7273186837646 +4.844403583055944 14.883205153851387 +5.104216538716912 37.4990602304493 +5.071636384413329 14.073745810046818 +5.324782297608378 35.19292879948919 +4.505411523568309 16.19789436167802 +4.5938617339474686 27.839708336693334 +4.561531454958039 15.970917379616674 +4.650226090836833 27.450557677674656 +4.674320297781258 15.526152266252115 +4.763209439893795 26.685787545436302 +4.473442568613942 16.328920600694623 +4.544707321484448 26.309846928071586 +4.521424118944219 16.132739767021935 +4.59289915585857 25.99781337729891 +4.617845118083539 15.746973578567959 +4.6895640782368515 25.38247428057733 +5.062254677066698 17.527599396919705 +5.859481555947673 59.609018987265124 +5.257454209429687 16.691122744527885 +6.001356657066176 55.25268055239741 +5.642166153156423 15.186338255491854 +6.293594668740433 48.3692438190014 +4.8879845186746325 18.318537957269683 +5.3844018635236655 50.71146851907804 +5.040495447542853 17.624036934912688 +5.521102820268699 48.18341409342723 +5.343710396792351 16.337513557624508 +5.790387578648017 43.77114532835466 +4.735476321869133 19.046536273656393 +5.036380105957116 43.12089576852673 +4.849837410978275 18.497432605225534 +5.147212063549512 41.679676043188984 +5.078566998772577 17.455729286810584 +5.366330435204318 39.00095656401291 +4.507897910088897 20.19871858256391 +4.613716735183193 32.14852449451442 +4.564572754724435 19.90414162027304 +4.6705105047953746 31.67352065789145 +4.67839333005802 19.327956567903176 +4.784225107963174 30.743934557996987 +4.4755999753639255 20.368933486284455 +4.561515066678203 30.610472185504737 +4.5240717442970055 20.114122051920535 +4.610124323803158 30.22682258702704 +4.621415135171362 19.61385434437507 +4.707533096210304 29.472844681211352 +5.070060524365141 20.859782597529385 +5.949134807340454 64.13705547957447 +5.266400202403102 19.829745274008108 +6.080939880415307 59.255575395341296 +5.6527451137730385 17.985640978904673 +6.359513341077132 51.66790404630075 +4.894543290789729 21.8371824637159 +5.451042610671938 55.21706533824221 +5.048158233843317 20.97877336039872 +5.583887201944051 52.32329550429155 +5.353086173860762 19.395396894448307 +5.8466288982624794 47.345223275864875 +4.740735332830583 22.73986518795917 +5.083605829168903 47.56149041765331 +4.856090460360498 22.058727673194646 +5.193578144665138 45.88199362523777 +5.086477858508346 20.771137030030644 +5.410762872848514 42.79320219753345 +4.510795762856551 24.174710037604264 +4.635282070291262 36.48688900601826 +4.568109744450976 23.80713059234159 +4.692529617061295 35.916224184539644 +4.683110099495511 23.089617590846686 +4.807005012682314 34.804196398745084 +4.478117525901765 24.38734104046393 +4.579769615790187 34.93708246984647 +4.527155623658013 24.069096584294222 +4.628832093403087 34.47377865899272 +4.625558198100686 23.445400858414402 +4.727040585991371 33.566428027802004 +5.0786811815916115 24.124045262395093 +6.044291854330868 68.68673139327908 +5.2762135828424785 22.891528879285126 +6.164550512105538 63.237815562013616 +5.664207079695767 20.696343150055508 +6.427942179006728 54.906326753118634 +4.901832470479976 25.298054223115784 +5.522554282278688 59.76444077256277 +5.056627434023422 24.266735009236736 +5.650660386507368 56.46686294432384 +5.36334143240669 22.373200767379398 +5.905691954522837 50.87827331615739 +4.746613455427376 26.386328320178542 +5.134563178694721 52.04621671549102 +4.863049682747277 25.56478766938752 +5.243305259612673 50.10127829910979 +5.095209469491383 24.017786531758702 +5.4579411584494935 46.563580833988624 +4.514063506908594 28.12436317794095 +4.658618578089628 40.85436671541857 +4.572089325883425 27.67813987456314 +4.7163208013137865 40.17738916564327 +4.688393666622191 26.80904929881932 +4.831541077955187 38.86403324293586 +4.480959999962153 28.382794931724018 +4.599523590300031 39.28938229458405 +4.53063092188312 27.99608446849267 +4.649057277138384 38.73769943929649 +4.630209347299749 27.23967509006978 +4.748086103451089 37.66115766468291 +5.087979260218067 27.319332603357136 +6.144661579837696 73.24638553595408 +5.286727100706682 25.87593874939765 +6.251829995614694 67.1897065904853 +5.676338060332687 23.31919059415466 +6.498499162359927 58.07886021168022 +4.909744408411691 28.69978728336521 +5.5989071058594115 64.34769969086639 +5.065769238080356 27.486818889712605 +5.721267748116195 60.60714687910058 +5.374297035236377 25.27065750226946 +5.9673070243157476 54.364391516101335 +4.753030862801816 29.984468210195743 +5.189316089208498 56.572953703338825 +4.870614264676554 29.014205369918443 +5.296368225388282 54.33368294687755 +5.1046217895363455 27.194660625896365 +5.507720427347832 50.307287429983866 +4.517663382149387 32.04654915154942 +4.683780590520658 45.25114437488361 +4.576463393665444 31.515894632458778 +4.7419149601593675 44.456385134788135 +4.6941747919778605 30.484816797164378 +4.857819909385076 42.921657565797986 +4.4840955224722725 32.35427394170847 +4.620823696538416 43.66763483454232 +4.534456956381929 31.893910381335374 +4.670828961026172 43.018189276322886 +4.635309940270503 30.995301729684712 +4.77066448860684 41.75564225146118 +5.097834644119621 30.445424880560555 +6.249906760095835 77.80489043858427 +5.297796599876029 28.783379071063944 +6.342411885467098 71.10288174605598 +5.688959327065734 25.855952708402672 +6.57083251067301 61.18156948742607 +4.918183804793554 32.0417172876252 +5.68004054511642 68.96123927283836 +5.07546644285965 30.638742422151044 +5.7955356883417135 64.73793104616259 +5.385799636838932 28.08847044753578 +6.031212048003808 57.79899899416192 +4.759916081735295 33.53338135852578 +5.247915733172577 61.140063708923606 +4.878694718368583 32.40624084501974 +5.352729171159108 58.575954800476225 +5.114592524633682 30.30158774883558 +5.559952724662382 54.02045839516638 +4.5215612142541906 35.94042922712588 +4.710818353516321 49.67789548812779 +4.581188459027125 35.31947956307129 +4.769338762388507 48.753072822268834 +4.700391322550736 34.11597758204601 +4.885824784588097 46.975837738915665 +4.4874951198779485 36.301003378688506 +4.643712861265388 48.072545748190386 +4.538596872421009 35.76170873021177 +4.694172500859399 47.3153033282347 +4.640807176197426 34.71133296294132 +4.794767648374482 45.84899486568745 +5.108142622873195 33.50271165100861 +6.3596508061003565 82.35152480116909 +5.309298648584484 31.61491960402189 +6.435928480590757 74.97007677493421 +5.701922585656445 28.309065989171756 +6.644621618349742 64.2118441749145 +4.9270665142637355 35.32370551237252 +5.765863937598826 73.59950114067223 +5.085616731205672 33.72282373168372 +5.87327476861706 68.85353235751367 +5.397718875301129 30.828020261340516 +6.097155093953286 61.178542591671196 +4.767205336854856 37.03258725310013 +5.310401742318907 65.74617337091865 +4.887211802233849 35.74065659888136 +5.412339163285445 62.825221197000026 +5.125015226873074 33.33901178911564 +5.614489133709104 57.69993242010654 +4.525726012312202 39.805389432724084 +4.739779725692727 54.13567925760768 +4.586225309004975 39.088258480002025 +4.798616160556264 53.06768652732749 +4.706987513655924 37.70196684405113 +4.91553694036566 51.02575408041819 +4.4911324767498675 40.22240259950035 +4.668231748577706 52.50517660324102 +4.54301736984926 39.59885502691146 +4.719110899638165 51.62944644646137 +4.646653549512475 38.387150425705684 +4.820385727925158 49.94070710893096 +5.40531957176294 3.7146235772942324 +6.097623813952628 51.362718402481356 +5.629617861163018 3.5409711691538406 +6.2784373572920495 47.425102696811386 +6.071158038917842 3.2291340726885 +6.640522345445429 41.15841308508025 +5.205164749537758 3.878673378207228 +5.5937589924678885 40.44384808098184 +5.380319007358236 3.734639141878251 +5.760460672338562 38.42048326531987 +5.72870531791776 3.4675869507391592 +6.086724424104033 34.808994275892445 +5.030258652785904 4.029312226914656 +5.238434367189688 31.2210988042393 +5.161385665494709 3.9157305666107116 +5.369517452130821 30.215908874109434 +5.424062801609332 3.699705498794582 +5.62916828051928 28.29809307073399 +4.770109111385462 4.266537279738735 +4.82383594346378 17.87049898571484 +4.834770135326843 4.206056753268668 +4.888981505816101 17.630570683414764 +4.964891099564678 4.0874088069104255 +5.019838991791197 17.152770586842852 +4.7333047583966685 4.30142336092554 +4.774037233364231 15.982518914911504 +4.788552163934553 4.249181922051259 +4.829630868984269 15.80174062478353 +4.899713017463396 4.146335021901777 +4.941354886374946 15.441052510360361 +5.408184768834356 7.397268199122454 +6.172579658959372 55.89367071289331 +5.632964540021106 7.044526641520346 +6.3450456421589845 51.51659092516331 +6.075268399489758 6.412233194425149 +6.6953467297750215 44.64965420920644 +5.207531584039901 7.730963164020344 +5.647899693392787 44.94417635689913 +5.383125741495747 7.43795749285415 +5.811726950442294 42.63060053206229 +5.732242447632447 6.895602748965816 +6.1326879698349215 38.553765353819614 +5.032128050995383 8.037793545289311 +5.2760610257656495 35.67534658907088 +5.163633725794547 7.806405835849813 +5.40653588204892 34.48707350602949 +5.426971160841319 7.3669458207949035 +5.664642101077935 32.242683800122926 +4.771115615403666 8.521838905744827 +4.8407855259650185 22.300121294274174 +4.8360058275274485 8.398329765984617 +4.906136355327344 21.986513539174137 +4.966558176146588 8.156238521245372 +5.037314144311528 21.365607241199914 +4.734176221524511 8.593113112189979 +4.788380215649777 20.416265945532928 +4.7896250798504285 8.48638975654655 +4.844174611217117 20.173763518174912 +4.901168896653719 8.276439230025067 +4.956239744845796 19.692398648299058 +5.412666707964139 11.031336748101282 +6.253775874696591 60.50674624225321 +5.638168673920587 10.491669023821917 +6.4168134836635025 55.64641991909838 +6.08158685834187 9.526935005268188 +6.7542897838280656 48.13254317516726 +5.211253695033585 11.542909566440748 +5.706937753116001 49.52766172697398 +5.38751914257526 11.093660157006711 +5.867434497599345 46.89030363815246 +5.737728409382623 10.264151490633742 +6.182499608179052 42.30426752575033 +5.035081579129258 12.01423924801792 +5.317164504281887 40.20079452709602 +5.167173175776032 11.658713705821457 +5.44695779200098 38.80790454863507 +5.431518355634367 10.98490208862704 +5.7033852366539985 36.20352222679113 +4.77271684585521 12.759715370564301 +4.859261469250553 26.77085463546818 +4.837968352289288 12.569270410275374 +4.924913624255154 26.37597965246567 +4.96919664170284 12.196434913395496 +5.056582867579011 25.5980175732188 +4.735563958939737 12.869689383714508 +4.804003933897817 24.885970276186647 +4.791331135416341 12.705038280558187 +4.860092192496826 24.575605640614985 +4.903477110769129 12.381476381457015 +4.9726687633162685 23.962097381559353 +5.418542676289974 14.606652812842798 +6.3410854548013456 65.17935795117197 +5.644947576539755 13.871125017142916 +6.493447179954796 59.79125179504734 +6.0897166994015866 12.560832906461867 +6.8168839154215295 51.584842282517926 +5.21616221273173 15.305707365732296 +5.770985274111867 54.179713118040624 +5.393283226746309 14.69172010861936 +5.927533160377962 51.18207801444491 +5.744854417472381 13.561601000196562 +6.235896637705328 46.04098828889923 +5.038996845845236 15.951409123121056 +5.3619123182016075 44.7879523697274 +5.1718468575450744 15.464205954853904 +5.490851925377399 43.166165119685175 +5.43747663241539 14.543289704830684 +5.745302432361167 40.165127480599814 +4.7748561490693096 16.976024921601464 +4.879378681660423 31.278342458918026 +4.840585235553523 16.713870427622826 +4.94540141971665 30.793297589866185 +4.972701105072861 16.20144301769422 +5.077679003847507 29.842080719318783 +4.737420092402399 17.127534765368836 +4.821009289660325 29.387887951428823 +4.7936092187669495 16.900731538494085 +4.87746378906909 29.002415881141303 +4.906548935743679 16.45563462467179 +4.990679707519907 28.24334248905079 +5.4256099661602315 18.116709763908464 +6.434283839602999 69.89263442572603 +5.65304611297038 17.176024755665434 +6.574593986044349 63.93278316528012 +6.099307208989737 15.507123313124602 +6.88265794001302 54.990875935803665 +5.222102588425582 19.013495091310983 +5.840084027373324 58.888814218594085 +5.400221251270594 18.225693084767716 +5.991911806109069 55.49224369072195 +5.753342882403174 16.781017112080747 +6.292586246820628 49.74964413878482 +5.043761468339764 19.84431737004508 +5.410423548100963 49.429986397110575 +5.177510826026082 19.217210676646545 +5.538239533614634 47.552680409736 +5.4446388125741505 18.035558369110625 +5.790262102870538 44.11604279673671 +4.777481628419259 21.167778286235983 +4.9012259715490565 35.81985497443594 +4.843790044065324 20.82855614340211 +4.967662386623867 35.23462465280309 +4.976974774040514 20.16669376883905 +5.100612981033882 34.09214526234501 +4.739700808994218 21.364021593618837 +4.839474198232253 33.9197073392044 +4.796403327048967 21.070307104146096 +4.896347249243509 33.45095599027796 +4.910302912344466 20.49481432625097 +5.010289754963334 32.53132516290766 +5.4336866453229415 21.557431329035296 +6.533073808665931 74.63006032972393 +5.662237858939349 20.402387440451392 +6.659869018405209 68.05617618077467 +6.110055000959019 18.36259055865486 +6.951159551298322 58.33945178491771 +5.228934916466946 22.662371561837688 +5.914224438697813 63.645321545333914 +5.408156432304543 21.691509561761517 +6.060418881097242 59.80963047333835 +5.762948860285796 19.918536381187558 +6.352266255529927 53.419508338118575 +5.049273253641034 23.689487805899386 +5.462785685286159 54.12178791810657 +5.184034560614357 22.913906174813008 +5.589110951897097 51.96027483531375 +5.4528191606078185 21.457629388446414 +5.83811293976286 48.04750631957062 +4.7805458492339055 25.332754158178403 +4.924876102105794 40.39379656804165 +4.847522061811419 24.910711324585264 +4.9917434612490865 39.69736742570399 +4.981929501225888 24.08894847353616 +5.125381196414007 38.34408474823024 +4.742366092297682 25.577181711043174 +4.8594623555081915 38.480121605089664 +4.799662269915258 25.2114248971415 +4.916786620185815 37.919097006322026 +4.914664778219958 24.49606290490104 +5.031503698579355 36.82258503569051 +5.442611147403595 24.926447165626627 +6.637100938218191 79.37674177708988 +5.672324413406562 23.54822950384987 +6.748871835939272 72.14916935271448 +6.121701533543858 21.126407515778684 +7.021966167925618 61.622618343918774 +5.236533648422419 26.24982767598035 +5.993354876361504 68.4407403769167 +5.416931552433497 25.08676947061128 +6.132873806744431 64.12480743625416 +5.773459009239012 22.97240017325301 +6.414636385912537 57.04242478673059 +5.055439655384148 27.484518981662173 +5.519063342413414 58.85940142449951 +5.191300677646432 26.55178735735417 +5.643434410040458 56.38313673576978 +5.461852846436603 24.807156609992084 +5.88869310877802 51.95267353513271 +4.784005647953538 29.46928476733781 +4.950391446588104 44.99941700617678 +4.85172608535728 28.95840928194179 +5.017681332633525 44.17984236352207 +4.987485263861938 27.965916852612395 +5.151971233938768 42.594863443123515 +4.7453794031881165 29.76551912315022 +4.881028174059209 43.068579154567324 +4.803339484409232 29.322337294195115 +4.938816937835925 42.405525699412536 +4.919566966735047 28.45724620755291 +5.054318527180992 41.11463237107193 +5.452241049510178 28.22261600002229 +6.745965668467853 84.11900237685698 +5.68313344159652 26.61297619717585 +6.841197622469988 76.20151522262246 +6.134028809537141 23.799351695462622 +7.094689805813457 64.83483487503561 +5.244786675502179 29.774372530558505 +6.077386504999734 73.26724995064525 +5.426407805633968 28.410278161149584 +6.209074271064757 68.42959748115166 +5.784689244504036 25.942320019537448 +6.479404826413142 60.61216340732492 +5.062177336427664 31.227807132936068 +5.579303005195829 63.63963054977928 +5.199204103924237 30.12931517823964 +5.701161150765 60.816398790945954 +5.4715947819764335 28.083040332434486 +5.941835715154914 55.826108168771036 +4.787821638047968 33.57611247199678 +4.977827552344405 49.63661380818807 +4.856351895879005 32.97023401183038 +5.045505821344933 48.68104558442697 +4.993569748669145 31.796015051859488 +5.180365011666593 46.84224623092923 +4.748707521849586 33.927894056190816 +4.9042199171521 47.685113083192384 +4.80739252172176 33.40173618470954 +4.962467213470825 46.909545134162045 +4.924948241344658 32.37684137712305 +5.078726207680056 45.40569531163265 +5.462451536117142 31.445693598804404 +6.859233936654338 88.84416545374937 +5.69451615153407 29.597052448017934 +6.936445501796758 80.20460706981918 +6.146854611757738 26.383272333703403 +7.168978501871392 67.97238529559664 +5.253594466938471 33.235274588671 +6.1661958585057794 78.11737405773722 +5.436463335686519 31.661723174375414 +6.288801078223178 72.71674761203657 +5.796481755109693 28.829037198825684 +6.546292185922228 64.12397330735504 +5.069411414977458 34.91835129651593 +5.643535555911107 68.45974621730218 +5.20765129142393 33.64567391796485 +5.762228482486566 65.25584031369523 +5.48191797166977 31.285088551159003 +5.9973722418801625 59.66343101795505 +4.791958022498085 37.65229726241779 +5.00723553881365 54.30579034186424 +4.861353909526693 36.94516277819571 +5.075242100041862 53.200487893915636 +5.000117803887793 35.57819603393911 +5.2105407857338735 51.08459363870018 +4.752320121435002 38.0634368749494 +4.9290818299520565 52.33021940588878 +4.811782765940829 37.44865211799642 +4.987762425941428 51.43093247249463 +4.930753227312354 36.25379242491507 +5.1047154815198175 49.69454109035187 +5.473133596151182 34.59609211709822 +6.976447420776252 93.54046255579787 +5.706344971657927 32.501593526767344 +7.034225009395864 84.1512195295729 +6.160027671435566 28.880717630661152 +7.244516078474531 71.03295369854861 +5.262868904383343 36.63237341620287 +6.259626479189064 82.98375993218173 +5.446991521099336 34.8414398545113 +6.371822134936697 76.97971498664457 +5.808702234229715 31.63401277657849 +6.61503367253218 67.57426004254684 +5.0770748530470975 38.5556131676051 +5.711777322190925 73.31726219242083 +5.216559167438322 37.100594696043 +5.826561562425359 69.69767132078147 +5.492711653941011 34.41377169889321 +6.055134835231709 63.461071302628675 +4.796382209369787 41.697146607357816 +5.038663775791195 59.00774895911328 +4.866690855175867 40.8824797171333 +5.106912198169992 57.73807111180867 +5.0070707746943155 39.31182662018656 +5.242474461237735 55.32071135926759 +4.756189548373147 42.171491649456776 +4.955655648130594 57.00476563399894 +4.816475186746907 41.4623812351279 +5.014724898356249 55.969832575824675 +4.936931930986174 40.08740510878043 +5.132273052085095 53.98034395089525 +5.763330753371242 3.822241563728355 +6.667831639668449 61.733966027851324 +6.021154598155061 3.6281357753750147 +6.848316942662843 56.15889011442123 +6.526144081570459 3.284703402152532 +7.227586691400637 47.79480587568346 +5.5326321966744585 4.007236345543238 +6.035597276896144 48.420741508242585 +5.734544711184266 3.8447326613175563 +6.220416698205366 45.58571981667929 +6.134783672500834 3.5466957286958936 +6.582117586258762 40.70166020331399 +5.330671490752402 4.178300792269278 +5.596049401998094 37.12219790816294 +5.4821077410078445 4.049219851640181 +5.746146936207253 35.74962845480973 +5.784905954467674 3.8054936364209797 +6.04222061939877 33.172246939625495 +5.029984881509164 4.449543289325959 +5.096290127561509 20.886139017683405 +5.104728092614175 4.380207686808572 +5.171648870252468 20.574034315515373 +5.255134985041334 4.244539150564389 +5.322939681491013 19.95343179650299 +4.987447173098309 4.489585375205344 +5.03738530794593 18.6012376714887 +5.051302760967626 4.429635677134402 +5.101689546398496 18.36800396908278 +5.179799611679206 4.311856520508971 +5.230891360147082 17.903000257975812 +5.76626917866581 7.611209196162064 +6.751475878399966 66.46319184879806 +6.024566734415567 7.217566234466962 +6.920351132006714 60.36431932687649 +6.5302974649474335 6.522260702441946 +7.284863660905813 51.33309117254839 +5.535073610950787 7.986869864859246 +6.096522143688071 53.15152372075448 +5.737425192272414 7.656854322047576 +6.276966713875185 49.961751643620126 +6.1383816062836924 7.052555586831271 +6.631321128834335 44.53765097384491 +5.332609964708101 8.334700308150675 +5.638131147933513 41.801375350817494 +5.484429677105168 8.07219441765131 +5.787151886167336 40.20813201309286 +5.787887098006908 7.577224333075541 +6.080803708473719 37.247389903680755 +5.031036666525214 8.887186027860542 +5.114995860631194 25.52684913776503 +5.1060169852629755 8.745842627472449 +5.190544733660328 25.128822596907824 +5.256867109675461 8.46950823326494 +5.342102363967641 24.342150104225603 +4.988358786220376 8.968850491873653 +5.053188200670226 23.24545218112275 +5.052423358089595 8.846595292166993 +5.117690335447576 22.940505587563766 +5.181315258419522 8.606584770471342 +5.247211751380543 22.335789402160124 +5.770869646543805 11.349518591324824 +6.841401664537855 71.2699996337065 +6.029876230554922 10.748526681763337 +6.997449217003748 64.60304544821085 +6.536684426517073 9.68967653003647 +7.346154285839723 54.859902103374296 +5.538917057048469 11.924185784889985 +6.162617381770606 57.9690746240628 +5.74193803876167 11.419283958439717 +6.338065373814716 54.38674386585662 +6.143965189076176 10.496938347177933 +6.6843493528801545 48.37664773475804 +5.335676442440857 12.457320783162515 +5.683916985124734 46.55741187507062 +5.488089460845313 12.054871833847573 +5.831716671047779 44.7187433896079 +5.792552047066779 11.297585718217336 +6.122716479564793 41.33790761061643 +5.0327124392059694 13.306311584104446 +5.135313298380732 30.212700827709895 +5.108066915444644 13.088851890488666 +5.211145818000615 29.72022096032479 +5.259612079112473 12.664226350193058 +5.363134031954841 28.75196955724029 +4.989812683785582 13.43203747074018 +5.070340573269568 27.92921006972937 +5.054207863913448 13.243843239333284 +5.135133807336545 27.54568494969599 +5.183721501622094 12.874777890685962 +5.265143287077249 26.788539902032337 +5.776905448588826 15.026458540244246 +6.937348455093762 76.12864656812505 +6.036796200527783 14.20923996020243 +7.079238309231529 68.85016557275453 +6.54490478365576 12.774156754419701 +7.410960158110885 58.352517610419824 +5.543990281096257 15.80985064507518 +6.233941531707707 62.8565741217486 +5.747863322221688 15.121458466337916 +6.403607369422544 58.84136241639069 +6.1512215171242275 13.867730019820746 +6.740900534326966 52.198138771732694 +5.339745937055458 16.538439119903774 +5.733561206811688 51.379592827394006 +5.492926727111958 15.988282983026098 +5.879887629852011 49.2678911581415 +5.798669016276541 14.95575968799342 +6.167835966028221 45.42716444364527 +5.034954441169015 17.702460678483877 +5.1573590049977875 34.93888869432332 +5.110803957649615 17.403855490245796 +5.233539850336074 34.3419977099457 +5.26326229373309 16.821684839581593 +5.386064496133763 33.174262103192554 +4.991760087615983 17.875246521297267 +5.088945234920386 32.64838678790002 +5.05659395902708 17.616649689601303 +5.1541006326170145 32.17821591571383 +5.186927780993488 17.11020717316805 +5.284721546468267 31.253832669543755 +5.7841694816304265 18.63515473913757 +7.038965875315073 81.01755324782346 +6.045066962832963 17.592506968864388 +7.16530024637022 73.08623931423332 +6.554604156618936 15.768671072826729 +7.478789741984909 61.79501892099078 +5.550134917714343 19.637623823259347 +6.310479581509469 67.80035808768253 +5.754999955143221 18.756562999073115 +6.473428665826792 63.31033185127685 +6.159868535235225 17.1576888019216 +6.800649592657966 55.987107281770996 +5.3447031277625605 20.572710308924457 +5.787168274155847 56.2599143451963 +5.498793902581459 19.86637867864728 +5.931663136824198 53.84517871352604 +5.806026411219294 18.54483070952885 +6.216004963323584 49.50274513594105 +5.037709499934332 22.072395723145654 +5.181223317451316 39.70229236911646 +5.114159957000319 21.686992789887675 +5.2577888943785585 38.98981813895119 +5.267718418833221 20.936972777535598 +5.41089997947117 37.60276459140956 +4.994156131945747 22.295627798316893 +5.1090818949175985 37.400343776239836 +5.059524248487111 21.96159197011239 +5.174648987503574 36.834448338008606 +5.190850511209861 21.308454923685154 +5.3059613296833605 35.726331073047504 +5.792475254841489 22.17128655178426 +7.1458412612925155 85.9179752548573 +6.054457488203469 20.894145206216585 +7.25519807120917 77.29567599335732 +6.565475594995803 18.669891155048667 +7.549178787107489 65.17615138345315 +5.557207050001302 23.403335689894316 +6.392161487888628 72.78870084943999 +5.763166634463002 22.320279673865482 +6.547327024358261 67.7810900367231 +6.169656828393702 20.362770274961537 +6.863268063697099 59.73231267761053 +5.350442693959503 24.55639105647111 +5.844809050690886 61.19212085298967 +5.505556643514908 23.68506664724626 +5.987009804078081 58.44229428790286 +5.814433879310289 22.060478755538334 +6.267048362546337 53.55509210670432 +5.04092877517156 26.41369823293965 +5.206980299624625 44.50096566182826 +5.118072383546891 25.935422887292642 +5.283939008066517 43.66064547322745 +5.272889586392046 25.006592807189953 +5.437632409442465 42.03280940927343 +4.996959651033531 26.691035134754568 +5.130815868573495 42.183485840168274 +5.062946014852207 26.276124157770678 +5.19682300984109 41.51188637494119 +5.195413141615683 25.466323848047555 +5.328864797978339 40.20210953844898 +5.801656697292005 25.632333481221124 +7.257518314376817 90.8133053141418 +6.064764935866775 24.112064983046302 +7.348492284596073 81.46580352272244 +6.5772572548812445 21.47695879471887 +7.621699592262601 68.48803663369782 +5.565077116411707 27.10429457629184 +6.478871720689233 77.8110973239937 +5.772201670181302 25.810053627675767 +6.625073820157598 72.24301145895707 +6.180368783106191 23.481128774973364 +6.928434864611584 63.42526994967842 +5.356868895751069 28.486884456085285 +5.906529125646817 66.17111541631688 +5.513093731298323 27.441654170403787 +6.045871191967382 63.05236228409218 +5.823722100250569 25.500211163133017 +6.3207823174391615 57.57670679772608 +5.0445676469514975 30.72454314081139 +5.23469335350861 49.33383805567881 +5.122484097354722 30.14704353267165 +5.312025654165753 48.35238934056825 +5.27869297496642 29.028060779698713 +5.466244611977571 46.46087586054637 +5.000132893384279 31.05982885155563 +5.154202987554796 46.997002718420376 +5.06681110499024 30.55833551021815 +5.220657564387725 46.208884506886434 +5.200545735057375 29.581492214898237 +5.353426038825883 44.67826247089853 +5.8115671142427425 29.017076835522044 +7.373512334349056 95.6886947945008 +6.075812831556012 27.245657171117813 +7.4447515630707155 85.58626650142115 +6.589728192076457 24.19067802686094 +7.695964419413128 71.72530381387804 +5.573629083116144 30.738894324191286 +6.570454901673881 82.85780894703437 +5.781962000916064 29.22460784734036 +6.706422031369202 76.68692150775796 +6.191816369342949 26.512458434919953 +6.995842427591889 67.05957595301793 +5.363895227157081 32.36244862928819 +5.97235331301815 71.1925553160169 +5.5212963127691514 31.1344798684567 +6.108172995073528 67.6695178769316 +5.833741695688345 28.862854491655135 +6.377019770609587 61.56162549358858 +5.048585228144547 35.00354771375841 +5.264418746844329 54.20050909430311 +5.127342936410355 34.32030236289622 +5.342077049102705 53.06366670469896 +5.285053475807184 32.999651071020494 +5.496713460001434 50.884289890396964 +5.003641404444897 35.40075346185254 +5.179292717512281 51.84069190152039 +5.071075437030776 34.80678876991485 +5.246181215362092 50.92444052051582 +5.206184673666982 33.65229573678695 +5.379633853125844 49.1526421191999 +5.822077698309039 32.32525086078479 +7.493323287506775 100.53084022905519 +6.087448609474766 30.295365486244084 +7.5435602344001405 89.64860703715117 +6.602703622319881 26.81296431613797 +7.771625677188163 74.88447251999021 +5.582759683340022 34.30634155559052 +6.666719552234857 87.91956300904278 +5.792321784799408 32.563603376552805 +6.7911117032305865 81.10476561461729 +6.203838221859674 29.457533922896822 +7.065200191569541 70.63043570458522 +5.371443720982456 36.18199052243621 +6.042288013141961 76.25255388988019 +5.530067231506322 34.762657760873566 +6.173826253308208 72.28860771380128 +5.844361678368954 32.14819890604671 +6.4355739524807305 65.50505553895741 +5.052944227022976 39.24967286444546 +5.296207982952735 59.10110023879194 +5.132601389112664 38.45407257234047 +5.374116368101778 57.793630594837275 +5.291903197526838 36.920217047901154 +5.529011894415567 55.301011575456364 +5.007453604297561 39.71284614771102 +5.206130275994029 56.714831582907436 +5.075698780250353 39.020413513385634 +5.273418209772973 55.65804734231536 +5.212272231698671 37.677574385310436 +5.40747356125689 53.62367281472872 +5.833075770360419 35.55728871358807 +7.616447559370635 105.32787207839237 +6.0995413257930915 33.26238323155199 +7.644523625520984 93.64595877535137 +6.616030091283382 29.346458344025606 +7.84837461915647 77.96350352646729 +5.592377293322287 37.8064561020675 +6.767441231085874 92.98736543026365 +5.803170725119829 35.82739173727711 +6.878874645008571 85.48939480200247 +6.216296887267224 32.317886389253495 +7.136236336778097 74.13431770998899 +5.3794443852460745 39.944917191418824 +6.116322205761693 81.34745544230162 +5.539320007045184 38.32589003830735 +6.242729357107683 76.90497409558917 +5.8554676272090935 35.35673937331617 +6.496260752244414 69.40311601400502 +5.057610569264957 43.462149174391776 +5.330109450502598 64.03614263532934 +5.138216284296462 42.54756084270026 +5.408163230753189 62.54184082983559 +5.299180838258865 40.78906018726243 +5.5631102517954885 59.709478931717385 +5.011540602359093 43.99537702559474 +5.234758133144655 61.620084908840724 +5.080644501303565 43.19842823429498 +5.302389846981677 60.40958181935179 +5.218756127049797 41.65656080791109 +5.436928205330621 58.09021345475543 +6.117733282851219 3.917266690553024 +7.272344377466206 73.01726004181084 +6.410152432452938 3.7032047966635884 +7.438409132967252 65.39850700338845 +6.979980672315658 3.3300838918385067 +7.823007786509699 54.62390484534693 +5.855314202416206 4.12314233003184 +6.494818534603608 57.199036636223276 +6.08502604581822 3.9422043824925037 +6.693614567715616 53.31553326115208 +6.538712748629627 3.6140479023239687 +7.085329209544796 46.8885892688004 +5.625116535389927 4.314908246020278 +5.958045254481277 43.59401957678749 +5.797760724738794 4.170091315145701 +6.126997587638933 41.7548469210267 +6.142240038103007 3.8987143274697877 +6.458938972758822 38.366145555977376 +5.281957823410889 4.621164089956368 +5.362685749515917 24.158241095913336 +5.367275359084821 4.542662714307788 +5.448757078353437 23.75909178227979 +5.538939599523756 4.38947373545987 +5.62142753594671 22.966963820837872 +5.2334059006582825 4.666556497733741 +5.29384293731201 21.437264407386913 +5.306291188781292 4.5986115520768855 +5.367291898366743 21.141289201763293 +5.452964708981004 4.465411182937451 +5.514815425283107 20.551807335083694 +6.120733625229811 7.800107084723693 +7.363771504029499 77.90179883170873 +6.4136174124309 7.366586867268958 +7.514875766871318 69.68531604063163 +6.984165410467523 6.612111294794915 +7.882080548127416 58.192836226193 +5.857821046381131 8.217572322035945 +6.562692938218277 62.14606344309579 +6.087969186608091 7.850646335235984 +6.755225063360867 57.83683863537305 +6.542358712377749 7.18617739709498 +7.137336205706043 50.79702134233169 +5.627117390632364 8.60692336611789 +6.004765161091975 48.490495853008376 +5.800147969026029 8.312849382638413 +6.172020818228409 46.38815944000891 +6.145282496904775 7.762513372279675 +6.500471292204906 42.55590012384111 +5.283051913790147 9.229796584779177 +5.383179357936207 29.001003828528393 +5.368613578138575 9.070007992594364 +5.469416044291731 28.502725084614724 +5.540730981388035 8.758453204267198 +5.642277805761205 27.52004005858185 +5.234355171059801 9.322234201104393 +5.311126501790667 26.282596877622037 +5.307456238814441 9.183881823458048 +5.384765112728686 25.90421378904571 +5.454535318425997 8.912851988367386 +5.532573729379241 25.154804062096844 +6.125434306144516 11.63043377609106 +7.461334404681742 82.85602478716123 +6.419011960129264 10.969714757903406 +7.596246655937762 74.00000767727182 +6.990602298993627 9.822567401769914 +7.945068319922741 61.74782458621416 +5.861770967638315 12.26788513902988 +6.635955504887648 67.18154337405156 +6.0925835251889975 11.707540632331698 +6.821436324102464 62.40526554509691 +6.548019408412625 10.695107705377794 +7.193121088767177 54.70571097421526 +5.630285848588737 12.863540704229218 +6.055410030288156 53.468942515494405 +5.803914138347985 12.413542883688024 +6.2207413758675365 51.075333285742246 +6.150046636576242 11.573088959317298 +6.545371062620647 46.75977914534899 +5.2847973449530965 13.818873026494147 +5.405369344819673 33.892881995931816 +5.370744571674035 13.573504184227872 +5.491860737210135 33.2859446209222 +5.543573039141606 13.095670010806836 +5.665067273761558 32.09558743804803 +5.23587114395027 13.960913293357851 +5.329827504036433 31.171019910023894 +5.30931390247871 13.748345944155343 +5.403747996483048 30.702598445162398 +5.457031727750986 13.332377169135029 +5.552006245467909 29.779256579951088 +6.131605278928044 15.397056884827323 +7.564645421982214 87.85167754981019 +6.426045810360992 14.50037278280001 +7.682086922669609 78.31666059997839 +6.998888623828404 12.948339832775288 +8.011452466234347 65.26588616100194 +5.866988734838034 16.264262980435458 +6.714599212976223 72.28631473805486 +6.098645788514618 15.5018427642075 +6.8920861867178855 66.99981947519112 +6.5553786733590655 14.128310761285192 +7.252349015625598 58.593380996303 +5.634494613220261 17.07658575616496 +6.110116700513281 58.517356703422195 +5.808896041940395 16.462722713953415 +6.27318002425294 55.8014735631142 +6.156297317364805 15.319146578652452 +6.593488008206117 50.960115809247256 +5.28713534652727 18.38362957357525 +5.429373400345033 38.828629574915134 +5.37359307814576 18.047416941545382 +5.516177900820054 38.10196899893317 +5.547356144106597 17.39368844225683 +5.689821136190241 36.684295847441334 +5.237904210236015 18.57842221006376 +5.350050254173463 36.09803687852232 +5.3118007601229005 18.286954270208554 +5.424321267549048 35.53065325553972 +5.460361704696021 17.717363075946544 +5.573145913239457 34.41715361417781 +6.139035658400576 19.092772238529356 +7.673244479688792 92.86525674506535 +6.434455590761502 17.951074941957792 +7.7719317547951166 82.61520642209378 +7.008667324799478 15.982212034046883 +8.080729652674188 68.73100958612771 +5.873312625639596 20.200116814214226 +6.79854151777944 77.44449454866194 +6.10595116583122 19.22640448955248 +6.966957904403961 71.60381333670239 +6.564150912097148 17.478280181660377 +7.314668737249082 62.444483126670924 +5.639625717390429 21.240376756216 +6.168970693985904 63.626494594294485 +5.814942897724097 20.45399121456108 +6.329309450512179 60.554975377842915 +6.163819147856678 18.99344374706065 +6.644640251911206 55.14365246005384 +5.2900115717240475 22.920589719516922 +5.4552828859435545 43.80473766105346 +5.377089392028767 22.487610947028738 +5.542428452179862 42.945976842145576 +5.551978653924696 21.647274807762926 +5.716540909220954 41.27930936503431 +5.240408538692114 23.171696490062395 +5.371875878516478 41.06068689272432 +5.314858115473305 22.79603423614375 +5.446543012232274 40.38432173192608 +5.464439722168344 22.063089669961283 +5.596004758696377 39.06264552267906 +6.147535094908765 22.71303992741471 +7.786628517990057 97.87669016888042 +6.444006537331171 21.31746297344212 +7.865311563275988 86.87976038152767 +7.019628846707666 18.9207632067601 +8.152430348965822 72.13197098260216 +5.880595197275327 24.071029940628716 +6.8876429338113425 82.64225908765248 +6.114314501301337 22.876684308986533 +7.045800671052189 76.20350250930863 +6.574083162747147 20.740815915856476 +7.3797316217845 66.2474352922913 +5.645571016185121 25.35091940946861 +6.232021853298409 68.78888144375561 +5.821916973763773 24.383005740219936 +6.389070147334795 65.32641087398954 +6.172417908811205 22.591444499358243 +6.698630340242981 59.30014703089988 +5.293375891577786 27.427144385618448 +5.4831726812310295 48.81890794723317 +5.3811692608757005 26.89102983848275 +5.570657036604912 47.81448889087587 +5.557347224362741 25.852686896139097 +5.74521361743633 45.8754340382516 +5.243341900057141 27.73841741559892 +5.395370955647711 46.05708674632685 +5.318431864650586 27.272841326722304 +5.470457074728126 45.26074357128423 +5.469187134863198 26.36612636218203 +5.620581964191197 43.71135217560334 +6.156933705402778 26.255204789957293 +7.904271936177186 102.86862609495114 +6.454492207444316 24.597354854365673 +7.961766891517092 91.09763498857129 +7.031508930682542 21.763109800102818 +8.226126609022621 75.46101003159873 +5.888703332779323 27.874142477349565 +6.981717376725134 87.86714427509953 +6.123570299035543 26.44998806366126 +7.128341837586086 80.78729981166762 +6.584954423691802 23.913997637185282 +7.447201738305568 69.99356747284287 +5.652231879658775 29.405432809457217 +6.299292334481463 73.99820815617542 +5.829693638547719 28.246899778011805 +6.452379090779812 70.10787016803903 +6.181920467520921 26.110525020831894 +6.755254323698491 63.42155403148902 +5.297182333372542 31.9013162059869 +5.513106743184627 53.86974429026469 +5.38577380372261 31.25540226936437 +5.600897377945634 52.70500560595185 +5.563376484846481 30.007256654063923 +5.775816961561822 50.46867629747148 +5.246665421210226 32.27680557919955 +5.420592397239369 51.08616518987596 +5.322472379238606 31.71530702639751 +5.496097783898949 50.15794010678168 +5.474531831562678 30.623972149873047 +5.64686841460916 48.35995998025649 +6.167081154542768 29.717978813929523 +8.02564277756823 107.82602193765456 +6.465732765286408 27.790111838741215 +8.060857812887619 95.2586887272919 +7.044084477931807 24.510077933920645 +8.301434202723446 78.71293217413321 +5.897517566954884 31.607742167491082 +7.080539117046946 93.10762070050876 +6.133571854236761 29.94496471578599 +7.214295410614764 85.34528286825193 +6.59657353187666 26.99750487049814 +7.516761383141685 73.67641970805302 +5.659518937677654 33.40204485823566 +6.370780933353952 79.24892061730283 +5.838160687702043 32.04389858174588 +6.51913505946691 74.89253280522509 +6.1921738115237215 29.54944606179453 +6.814307273491595 67.50148496262553 +5.301388614631342 36.341600639325804 +5.545141590262412 58.95653970047195 +5.3908490488046015 35.57904430198286 +5.6331755989720484 57.615760341008944 +5.569988773982254 34.109123692740205 +5.808322465475275 55.05593359101162 +5.250343503561487 36.78549255237467 +5.447590542896861 56.14747907574475 +5.32693406287801 36.12186879477308 +5.523492908473927 55.07460051801321 +5.4804080056982185 34.83482724640619 +5.674849481365018 53.00595111806219 +6.177845237642574 33.10107732997137 +8.150215667461424 112.73587664449468 +6.477572585102616 30.89619453558333 +8.162169793319363 99.35485499844057 +7.057168827474399 27.163637821654984 +8.378011742260004 81.88446873308649 +5.9069313197973345 35.27097875971391 +7.183848146420741 98.35282634339292 +6.144189915405821 33.36125182075988 +7.303367968285953 89.86885691553513 +6.608776302022176 29.992141512970854 +7.588113965278852 77.29124264765466 +5.6673514161109955 37.339575641900396 +6.44646539031162 84.53591966941968 +5.847217752209284 35.77305114050231 +6.589222068066022 79.67436824541228 +6.203043569070377 32.90798224097579 +6.875586778747713 71.53483174631026 +5.30595606345608 40.746862244611485 +5.579328640777128 64.07912273671906 +5.39634570370146 39.86072845376745 +5.667512401106513 62.54554176428772 +5.5771136934839864 38.157046564661975 +5.842697507790281 59.63477497064574 +5.254343405085891 41.26342440775531 +5.476411262428532 61.24108154078971 +5.3317751885370575 40.49135802157957 +5.55266563009814 60.009928406113616 +5.486755762144053 38.997431813718606 +5.704506840025958 57.64741163368641 +6.189110155134471 36.40495292261344 +8.277482335107198 117.58704565252047 +6.489877986820286 33.916847480322744 +8.265317373383972 103.37978845292359 +7.070606928094074 29.726506498785838 +8.455558516515719 84.9738102794924 +5.916849874576622 38.863654211223675 +7.2913551170092985 103.59241286762655 +6.155311045338082 36.69921603125459 +7.395263731588171 94.35053042947226 +6.621422786156474 32.89949963496207 +7.660985190408318 80.83463147260777 +5.675656645259875 41.21738065870476 +6.526303470540573 89.85434042142322 +5.856775319618287 39.43403305354064 +6.662511650077173 84.44792154907495 +6.214412217996112 36.1866510847251 +6.938895311773803 75.51749543877871 +5.310849223655625 45.11625636682466 +5.61571582825272 69.23774005366597 +5.402218833332471 44.09958629011608 +5.703924531516546 67.49355990580355 +5.584687519898532 42.150264524909424 +5.8789066689175 64.20328002516308 +5.258635080067552 45.7097985672468 +5.5070974403760395 66.36742209908985 +5.336957631713687 44.8229174575118 +5.583635901476322 64.96352603696022 +5.493520715165611 43.11094816461151 +5.735819680570057 62.28288891815434 +6.469341189282587 4.001359052658909 +7.91009904485809 85.0683046406985 +6.797274348878895 3.7679653223614777 +8.046329579262414 75.02792666162101 +7.4330513787403145 3.367175109980388 +8.424989541435624 61.58739706401936 +6.1741477468859625 4.227922966305487 +6.9743213857897635 66.77457948602802 +6.432593286060053 4.028698699947653 +7.181090434923732 61.56797234545925 +6.941088480435831 3.6714745064195804 +7.596027813955064 53.32117174560066 +5.914620988985444 4.440558426211155 +6.326542497705147 50.6482882242997 +6.109305895139859 4.279848682873698 +6.513656419211567 48.22409567725741 +6.496866790447751 3.9810393130331283 +6.880113867874183 43.854896406637565 +5.527155555573891 4.782692898223981 +5.624289885636283 27.68915861215205 +5.623517903331052 4.694743452434308 +5.721542970586435 27.18610841566152 +5.81736092059786 4.52359959326723 +5.916464082094602 26.190242883556504 +5.472320162731678 4.833614979459694 +5.544640356069935 24.49230561699457 +5.554639069833122 4.757410585226264 +5.6276477078055125 24.122035946075933 +5.720290534572068 4.608351915284816 +5.794286865671174 23.385587127475425 +6.472393834214431 7.967265415611192 +8.007802629968609 90.05767553879518 +6.800781879295104 7.495139286862772 +8.126129888555111 79.36630494855395 +7.437258853473441 6.685547870637214 +8.485308460708215 65.17488454225577 +6.176712036792756 8.426122518424101 +7.0491553933301505 71.9199168442146 +6.43558960906248 8.0226063603557 +7.247409009735025 66.21283493029229 +6.944772260331767 7.300103735811918 +7.650389656664582 57.28554656253579 +5.916678259725789 8.857302910854807 +6.378077179610052 55.75484706266877 +6.111750916218238 8.531367910098764 +6.562698296026829 53.019890786002456 +6.49996084538573 7.926139237833648 +6.924406103959683 48.144400016984605 +5.52828929710159 9.55225381877915 +5.646605195263488 32.72624128451002 +5.624901993073644 9.373464983387244 +5.743987655241229 32.10983631143726 +5.8192064549979055 9.025841289359295 +5.9389998143433615 30.897381834834004 +5.473304876456147 9.65581813529566 +5.563426792140558 29.530703986855208 +5.55584569430094 9.500848001062636 +5.646609347878068 29.06659708405035 +5.721911818945585 9.197941570267925 +5.813484509945946 28.14881295189407 +6.477179192175173 11.87900363781126 +8.111343182428953 95.10701664231667 +6.806244912864917 11.160511165640266 +8.210647489095457 83.72756803272475 +7.443731945620703 9.931177458359437 +8.549459139222728 68.74661631766514 +6.180755439521341 12.578562611571979 +7.129520487568715 77.15315948185884 +6.440290117690235 11.963306799765984 +7.318325656467068 70.90195231942467 +6.950493671756307 10.864058267212128 +7.708468672799834 61.247584325340526 +5.919938956656862 13.23714424530865 +6.433747734253472 60.94781985202958 +6.115611224923088 12.739201792210585 +6.615553627316811 57.87057864685403 +6.5048084793593866 11.816366147548091 +6.972083208527509 52.446484733410905 +5.530100030720422 14.30126827085165 +5.670701134511778 37.816353813331716 +5.627108385744865 14.027177785936601 +5.768296475741417 37.07601032199096 +5.822137209698737 13.494905129820925 +5.9635400173818125 35.628202431436215 +5.474879282564173 14.460142280540062 +5.583698072434016 34.61569878656715 +5.557771792255768 14.222437515887899 +5.6671460119346 34.049320729632704 +5.724491374798538 13.758314985024667 +5.834415790914009 32.934871730796736 +6.483464336762344 15.72495519061965 +8.220233886611815 100.18653521767999 +6.8133704578409935 14.751483747629992 +8.299405468223316 88.08527309640989 +7.452066103059684 13.09069031055371 +8.616910702025855 72.27948960532918 +6.186100099611006 16.674981230798828 +7.2153336686243374 82.45277500743778 +6.44646868945323 15.839323282063859 +7.393622866692594 75.6128908202432 +6.957933980287432 14.350454398045162 +7.769903204127843 65.18544885634394 +5.924273702057205 17.571485663036317 +6.493668914542032 66.21384339021554 +6.120721120262849 16.893458778761858 +6.672214789444535 62.75996298057939 +6.511171666706648 15.639999892407628 +7.022968723613885 56.74257946071134 +5.5325280600074835 19.024679934074705 +5.6966960305729115 42.953814727277724 +5.630060590700676 18.649809309881185 +5.79455462809068 42.077308013655724 +5.826041737548875 17.922953137539707 +5.990104753119884 40.372736214841254 +5.476993009204444 19.24215422469004 +5.605559643603394 39.74242898921783 +5.560352926619015 18.916822958366502 +5.689338054805208 39.06396225058188 +5.727935439212029 18.282473980978015 +5.8571105992716435 37.73517908537336 +6.491035220556679 19.497620369250033 +8.333939753559193 105.27183251189601 +6.821892162943949 18.260321246776133 +8.391911486723693 92.41914210922025 +7.461902319406218 16.156716997767 +8.687153886892986 75.75748627736608 +6.192581388798595 20.70846933364646 +7.306436839353199 87.80069817586076 +6.453917321111893 19.643207703854806 +7.473034550872958 80.32779105861609 +6.966804795941177 17.75155837708788 +7.834321860706734 69.08323042609962 +5.929562138735656 21.854329625714513 +6.557902650185411 71.54236042595211 +6.126926977231235 20.987419362822987 +6.73262642734262 67.6752587888877 +6.518831855440519 19.389505778006985 +7.076857671721326 61.01870219620777 +5.5355179283665 23.718782234373204 +5.724681800815903 48.13472813086526 +5.633687463280326 23.236961304916044 +5.822821353912993 47.10842545319022 +5.830816293267947 22.304446771870243 +6.0186903838782815 45.12355307350237 +5.4795993303774155 23.99858194864126 +5.629093707039654 44.90761415457405 +5.563529207226551 23.580091330901144 +5.713243091147648 44.106064214614285 +5.732156703585509 22.765410972607885 +5.881577831036563 42.543386570834485 +6.49969821309731 23.19226259434858 +8.45190666410784 110.34251437620108 +6.831572243363628 21.682512366000232 +8.487680924071775 96.71333189857756 +7.472929145626756 19.12576087297466 +8.75971792621872 79.16945337351581 +6.200048712703662 24.6743828383573 +7.402615887615609 93.18111884826203 +6.462447584323535 23.37021742525925 +7.556266481693862 85.03198046341785 +6.976850356083947 21.063036433744635 +7.9013614952619236 72.92914317662846 +5.935693561783784 26.081446016503662 +6.6264731178198915 76.92460585422278 +6.134088061074471 25.016509334028278 +6.796701077840081 72.60595956600945 +6.52759155123213 23.060154629985917 +7.133532226876026 65.26403745654243 +5.539018332326785 28.380781887332322 +5.754733678649822 53.35644042551472 +5.637923184274911 27.78537048540979 +5.8531393757926775 52.1654414121934 +5.836365273074264 26.63541205412136 +6.049278651792195 49.874947987451236 +5.482655032935839 28.726939384344718 +5.654367777594464 50.109083701206416 +5.567245235736965 28.20930671368488 +5.7389043109607725 49.172403331028164 +5.737074598697777 27.203472968136158 +5.907813375590606 47.354670298589866 +6.509280196438045 26.806105974784348 +8.57358098965114 115.38141770555163 +6.842201346088131 25.015794804988417 +8.586249811894938 100.9553907119389 +7.484880567451002 21.996917696503587 +8.834177096350537 82.5077531068476 +6.208365843279812 28.56970704811909 +7.503612334857728 98.57980674755039 +6.471890738652227 27.017532983917548 +7.643008692602276 89.71317477072809 +6.987846979408855 24.282904217079544 +7.970676472054642 76.71443920250192 +5.942566719061537 30.249880800662744 +6.6993744968127436 82.35299413748945 +6.142076691639461 28.97770125264692 +6.864327865611367 77.54317029388791 +6.537274398326411 26.649205351296914 +7.1927706437242 69.47009727061624 +5.542982037546719 33.00855395936682 +5.786915725451083 58.61722439117459 +5.642707236061392 32.2926028826903 +5.885540194448063 57.245445225759305 +5.842600974180932 30.91300653877413 +6.081841815517267 54.62246761924125 +5.486120195162238 33.42531127837896 +5.681439530920386 55.34550257466466 +5.571450017447021 32.80224797807597 +5.766355165712086 54.260667248212464 +5.742615011224694 31.593987683389184 +5.935804644547086 52.16531711876744 +6.519627743190933 30.33780050157473 +8.698423988605247 120.37411584447256 +6.853596915745197 28.259504282058238 +8.687182459578203 105.13555824136486 +7.497531918944331 24.771031893862318 +8.91015182290521 85.76734478008784 +6.217410270111274 32.39263205404231 +7.60913195308279 103.98371685053122 +6.48209696863982 30.58373689460796 +7.732944196362073 94.36096996197023 +6.999601027076115 27.410828947554688 +8.041943508551503 80.4326810171395 +5.950089651144731 34.35763924767947 +6.776575240411174 87.82070697518725 +6.150777716033416 32.869115502013095 +6.935378029537762 82.47917746887059 +6.547724309437524 30.155359998518264 +7.254352685122504 73.63016578858704 +5.547365459509233 37.600475590089836 +5.821284258173445 63.91605820181406 +5.6479839774831415 36.75684762586445 +5.920047367890215 62.34628246345918 +5.849443400290487 35.13524186315681 +6.116345793078564 59.36259276303899 +5.489958154839251 38.092219005916114 +5.710359872920336 60.61618226998238 +5.57609654532591 37.35723112879226 +5.795622301744594 59.36923388216671 +5.748710114740864 35.935025627046606 +5.965533347117531 56.9724460408219 +6.530605764151257 33.787044868787845 +8.82592214145656 125.30855861668016 +6.865600852464057 31.41411649297859 +8.790075435654535 109.24624770996002 +7.510695175587094 27.450118827814787 +8.987306990968788 88.94512943841461 +6.227072495658619 36.142255396681904 +7.718851883918115 109.38074997566686 +6.492934113249173 34.06844588931907 +7.825755029147258 98.96649134120338 +7.01194608536871 30.44764000196869 +8.114863879557518 84.07921862728203 +5.958179028520718 38.40345956789156 +6.858020463548179 93.32139636005421 +6.160087890885004 36.68974091511065 +7.009708616739515 87.40714996905525 +6.558804050934874 33.57837962355706 +7.31806304838767 77.7389095066354 +5.552128640682424 42.155317550231295 +5.8578901513757575 69.25246657719725 +5.653702456774405 41.17677997409467 +5.9566786672593794 67.4663720108614 +5.856819855738101 39.30078642949767 +6.152752201924086 64.092512640458 +5.494135079847531 42.72651981295289 +5.741175020559746 65.92094409157987 +5.581141698848473 41.87299217189207 +5.826727517194454 64.49701308971161 +5.75529801278038 40.22523125720152 +5.996977315515082 61.773810576619276 +6.542095810302232 37.154309552431634 +8.955594457341277 130.17479131014255 +6.8780772644319255 34.480921063868614 +8.8945595408443 113.28165280663808 +7.5242141258679105 30.036958436940733 +9.065349136305937 92.03947199450128 +6.237255068496328 39.81836288056347 +7.832427281871246 114.75962124782163 +6.504286053949266 37.472040682728036 +7.921127290347602 103.52215035703978 +7.024740234828668 33.39498223749954 +8.189164017670532 87.65080463091584 +5.966759746298032 42.386648713463686 +6.943633272251609 98.84897280243938 +6.1699150126008835 40.43922870070397 +7.087165060929372 92.32092613411217 +6.570393477333739 36.918802409678435 +7.383693637495204 81.7920931576327 +5.557234832380177 46.67216174522831 +5.896780420389613 74.62639908408106 +5.6598161028703995 45.55145873402355 +5.995447530024214 72.6045678522345 +5.864664392329313 43.40882033093332 +6.191019727779201 68.80995959869739 +5.498619848268347 47.32733961053654 +5.773927969128776 71.26001544691715 +5.5865459609055605 46.348600092225496 +5.859689111259451 69.64332707830143 +5.7623223677743525 44.46369941748129 +6.030111724217048 66.56765196289909 +6.818772082751164 4.075903942127354 +8.576682388043865 97.69093148413661 +7.183004121112221 3.823902057807342 +8.668685598967475 84.93127820465087 +7.885610687089018 3.3975082894291804 +9.031833997685348 68.63944348762458 +6.489863471253687 4.322852450134045 +7.476268540328627 77.12361080312353 +6.777878728168735 4.105587683165958 +7.683122762238294 70.28978601984214 +7.342337308172145 3.7204898734728244 +8.113534401660052 59.95299543021193 +6.199999934261706 4.556427919303697 +6.703473986557139 58.29519176901134 +6.417496547919538 4.379741159528664 +6.90741271766465 55.14647967048535 +6.849392709855746 4.053863547361905 +7.306209798966739 49.612102462238944 +5.76648635400616 4.9351861054815815 +5.882154264989343 31.481276151518372 +5.87434422070223 4.8375323497573115 +5.9910267030483455 30.85530337954039 +6.091241094699569 4.648059497139566 +6.208991104435121 29.619804657850516 +5.705108726941292 4.991803553175709 +5.79078917386365 27.768019095379664 +5.797249226670226 4.907096329173594 +5.883748373355615 27.310539151379754 +5.982643663035394 4.741790014342634 +6.070246952916052 26.402185507119608 +6.821868848993853 8.115440420920232 +8.678745118371822 102.73376053604926 +7.186545819695327 7.606172878088842 +8.750751322061255 89.29650549327238 +7.889834570040719 6.745603223674007 +9.092969569953103 72.23710580304896 +6.492478196730668 8.615059123484972 +7.557851847710254 82.44437949271703 +6.78092017767749 8.17546490859281 +7.753670965961301 75.0357642458373 +7.346050764487133 7.397340774263587 +8.169814471129067 63.959222754278464 +6.202108293077305 9.088185761276925 +6.75998316425681 63.604449353362945 +6.419992713270964 8.730239611605143 +6.960434450096048 60.09227577171472 +6.8525301189271115 8.0708770222231 +7.353047394761798 53.98749014445309 +5.7676573577625945 9.85666786861094 +5.906327088265882 36.70600120446704 +5.875771068747231 9.658375056239976 +6.015279964683782 35.95137204765573 +6.093136176337615 9.273952735104004 +6.233207621604525 34.4716878039955 +5.706126891025476 9.971685519366982 +5.811102046288729 32.99248628831854 +5.798494833493187 9.799618066850181 +5.904214899573328 32.428973331962275 +5.984311732587895 9.464071763384059 +6.090884170684928 31.316670445843076 +6.826725628369566 12.099332813982736 +8.786274618454566 107.82717679059672 +7.192063848650407 11.325298569444477 +8.837354614149223 93.6805940345139 +7.8963337896977945 10.01999471605594 +9.157872216953757 75.81777158524196 +6.496603677009305 12.860006311276097 +7.645016994292425 87.85014069639485 +6.785693758456407 12.190649921251751 +7.828765426436219 79.82239797127815 +7.3518198224831455 11.008252768981132 +8.229745555549911 67.96080017709441 +6.205452521289503 13.581638735542072 +6.820824388196751 69.00375659576734 +6.423936350980526 13.035564975245931 +7.017361983310399 65.09325721736599 +6.857447897144159 12.031549230830434 +7.403269696852642 58.37371390724922 +5.7695294708815075 14.75665724092837 +5.932364547066975 41.98760769905465 +5.878047755682786 14.453107974439991 +6.041473786935735 41.09262506572352 +6.096148096256198 13.865341394560593 +6.2594891224039095 39.34830309428248 +5.707756456578629 14.932844963046337 +5.832966796922278 38.267012917063155 +5.800485110275063 14.669298583519781 +5.926320330379352 37.58818902817844 +5.986968115318691 14.15591001309341 +6.113311004586049 36.255246346921304 +6.8331070870016575 16.015579056422286 +8.898725932729903 112.94089653320691 +7.199263022515529 14.968350158070763 +8.9279948311111 98.05695442068219 +7.9047024661031315 13.207094982705552 +9.226004347542156 79.35830387334279 +6.502059763557074 17.047024588012444 +7.737598742233711 93.31710266428142 +6.7919709510155375 16.139277960091142 +7.908138092367364 84.62608607237908 +7.359323729165014 14.540036876369857 +8.29294526041123 71.93550435395507 +6.20990135868711 18.027794883069237 +6.886085346046582 74.47831513047988 +6.429159527977123 17.28541774924015 +7.078157020686533 70.13196452213946 +6.863905618884061 15.923780082969438 +7.456675813542935 62.75142555757513 +5.7720421320826745 19.629816818671422 +5.960385144478692 47.319982299177916 +5.881096655241184 19.215335486098475 +6.069691284364868 46.271205904820825 +6.1001637461171025 18.41400832168679 +6.28785007122574 44.23904639075458 +5.709946343722144 19.870596222885546 +5.856489676366129 43.58637918871094 +5.80315467689618 19.510487598807174 +5.950144276554512 42.78149472345326 +5.990517610759958 18.809951125180277 +6.137553926661937 41.20877361479227 +6.840796489572329 19.856414673470606 +9.01553061581861 118.05055338313693 +7.207874593046776 18.527374531732722 +9.022167765778114 102.4053770182876 +7.914580186634262 16.299409191312296 +9.296854397919901 82.8427186746734 +6.508679223088344 21.168910842620146 +7.835360576375867 98.82520841758574 +6.799541054402785 20.013631516893792 +7.99147986604193 89.42807310051545 +7.368271894311355 17.984764097760326 +8.35902749812559 75.86719835156151 +6.215332287972664 22.420360527840714 +6.955799455312517 80.01618285630067 +6.4355061482467475 21.47278131160203 +7.142734435366851 75.19447932420901 +6.871682054934059 19.739773716936547 +7.513039733748118 67.10603501008096 +5.775138878945725 24.472218101612764 +5.990480907050898 52.69884162858956 +5.884845290497759 23.940407494477657 +6.099989519540803 51.4813312495577 +6.105077464241552 22.914126976411684 +6.318281282340348 49.13593182004392 +5.712648984277304 24.781466757070568 +5.881753642924818 48.94698757306254 +5.8064425475576895 24.31904072805 +5.9757435244048756 48.00403630786654 +5.994871271623852 23.42091393904944 +6.16361837782779 46.17041867434382 +6.84959742867527 23.616926829001006 +9.136122976528075 123.13621328729462 +7.217658343178286 21.997727245737916 +9.119386550094097 106.71024778667957 +7.925654132785175 19.29337850996729 +9.369952461769453 86.2599421690137 +6.51630876326126 25.22081212899268 +7.9380147205376375 104.35693591342566 +6.808212847401018 23.80878706687248 +8.078460707270791 94.21303410175739 +7.378406352962258 21.337985860087418 +8.427619392309236 79.74399412588339 +6.221632286566955 26.75488403284786 +7.029960470272956 85.60724137021451 +6.442832761687847 25.592867252454212 +7.210977699977846 80.2692746679577 +6.880576949637971 23.474628226255884 +7.5721256073222944 71.42626049748831 +5.778767265566222 29.280890010028187 +6.022726978143321 58.12117351888792 +5.889226388052133 28.62486205033027 +6.132408803332824 56.71863801741087 +6.110791573705095 27.361504016401586 +6.350758884733018 54.03275902070586 +5.715820254983218 29.662808065399062 +5.908826843347405 54.346379526406444 +5.810292076963603 29.091837497097423 +6.003160268804752 53.25222898091313 +5.9999467516993885 27.984933396118933 +6.191496675222769 51.13492483907013 +6.859334046901053 27.29423147458791 +9.25995667257333 128.1815057064513 +7.228402573033436 25.37707623760127 +9.219192514834129 110.95945643164774 +7.937657020965501 22.188081795757956 +9.444875896723287 89.60244288339123 +6.524809360311944 29.199571143985107 +8.045235237309345 109.89664264095241 +6.81781482562251 27.521812513158462 +8.16874192800137 98.96825590144219 +7.389501313372228 24.597662917352338 +8.498369683526306 83.55713832876428 +6.228697724621718 31.028248529941802 +7.108530113894767 91.24257899137926 +6.451009006481013 29.642499293938478 +7.282747616273572 85.34654080422771 +6.890411228758356 27.12549770948241 +7.6336964370430795 75.7032694913787 +5.7828789189439425 34.05356451285903 +6.05718708278474 63.58491301665542 +5.894177909676216 33.26610872363313 +6.1669779453790845 61.97980247052269 +6.11721623901858 31.753131689460048 +6.385249425420688 58.92462892585316 +5.719419260154529 34.51257273801457 +5.937767419155777 59.78295373183006 +5.814651039674701 33.82650914243226 +6.03242676048691 58.52342589230909 +6.0056680921225505 32.49917365643083 +6.221172512904825 56.098188315425126 +6.869850296002213 30.88692317439377 +9.386515609988763 133.1730308124488 +7.239922535799304 28.66473519223123 +9.321161028149096 115.14365643303826 +7.950363051850017 24.984378596617912 +9.521249673944455 92.86530064864371 +6.5340558303718055 33.10328824964847 +8.156668235561785 115.43019029344254 +6.8281945242670075 31.151230752246192 +8.261984719166676 103.6831053323044 +7.401361187017338 27.763452103249872 +8.57095287430663 87.3002625878398 +6.236434279813474 35.23834388836563 +7.191442450199408 96.9140817281236 +6.4599170868975735 33.61970078097418 +7.357888124724143 90.41775503682076 +6.901026209526999 30.691031893844336 +7.69751934822058 79.93010738725832 +5.787429024049216 38.7885038978599 +6.093916890375162 69.08871477136385 +5.8996426615227415 37.86221428828526 +6.203717486734554 67.26227887590858 +6.1242693220517275 36.086900174990205 +6.421713008007998 63.80761876923849 +5.723408332730527 39.32917491964065 +5.96862654769711 65.25577138193671 +5.819471093163006 38.52125401651493 +6.0635682088534795 63.81569130810471 +6.011965597649137 36.961581124905834 +6.252623732262991 61.05697265214148 +6.881008641810265 34.39468598935801 +9.515320631375374 138.09990836319218 +7.252058138814728 31.861193204929226 +9.424903800321994 119.25571255584389 +7.963583214824822 27.684321438259737 +9.598744097177024 96.04554147577457 +6.543936101318581 36.93101308414 +8.271940420339668 120.9447169831038 +6.839217302584333 34.696640053743124 +8.35785595944015 108.34865788584015 +7.413817807473528 30.836204926214034 +8.645070757582017 90.9688407359856 +6.2447563044038565 39.383831222569064 +7.278606511767388 102.61414381423103 +6.469451212830693 37.523404994943554 +7.436230252767525 95.47538227052206 +6.912282241421659 34.170979983253595 +7.763368871934121 84.10129420291871 +5.792376421029868 43.484387713923226 +6.132966284216759 74.63178933699089 +5.90556814322713 42.411760110317694 +6.242641831221388 72.56411178372423 +6.131876021116344 40.361392252975364 +6.4601053376958655 68.67855063831658 +5.727752616347529 44.11138479290756 +6.001450500080353 70.76441541325549 +5.8247078206459495 43.17471551192747 +6.0966047277008695 69.12763777591978 +6.0187755193221975 41.37070859833498 +6.285824150602574 66.00870567649397 +6.892688392052893 37.81800680214632 +9.645933216235994 142.95341413869465 +7.2646717066719715 34.967779479496265 +9.530069386885387 123.29027953823935 +7.9771604598080605 30.29074199823282 +9.677071578205629 99.1416532685685 +6.554350306925338 40.6825168338049 +8.390666861079128 126.42850672009465 +6.850764759990474 38.15843414812498 +8.456032829617937 112.95742906832864 +7.4267277021859295 33.817611866618485 +8.720452458175483 94.5597879876209 +6.253586475725057 43.46397183451993 +7.369908066210068 108.3354695211715 +6.479516779644679 41.35324079197711 +7.517594982132029 100.51266249954433 +6.924056967607245 37.565899006826726 +7.8310290467489 88.21252714340679 +5.797683148413959 48.140226269278415 +6.174380896879521 80.21377649912382 +5.91190625448385 46.913734646116964 +6.283760683287785 77.88379387862335 +6.139968335147441 44.575731813263054 +6.500379113907963 73.5348224314952 +5.732419982430514 48.858258533246065 +6.036282087396467 76.30888309772806 +5.830320394279175 47.78589088286285 +6.131552668013755 74.45830272801747 +6.026039708698575 45.725586211309235 +6.320744790710411 70.95132905099797 +7.166499288451092 4.142073090859587 +9.265102481702996 110.66723608077035 +7.567697412920115 3.8722615360981636 +9.301713047250376 95.00516227994558 +8.33782803853016 3.4223240862995086 +9.642092311073492 75.74617433098464 +6.803038358551734 4.409007603619208 +8.001816775091902 88.19678682585909 +7.121369048628273 4.174032307935983 +8.1992535509534 79.41794300190767 +7.742766362468542 3.7623579314461923 +8.636965361141595 66.74160040647384 +6.4819096017460724 4.663505297574643 +7.090607474266351 66.54215881833834 +6.722930831695338 4.470823303345824 +7.309279558219274 62.50706375766059 +7.200281127183776 4.118366597954716 +7.737424253590776 55.610380843297776 +6.000693683822239 5.079521034872208 +6.137170192329095 35.53705023704585 +6.120479496277977 4.971930845119692 +6.2580658070398085 34.76677553684624 +6.36126184481861 4.763810827037095 +6.4997835001461155 33.2518749822321 +5.932524657497255 5.1419869613173255 +6.0331373974513784 31.26606278237569 +6.034860107424434 5.048552722695147 +6.136421391289259 30.70699037507293 +6.240728719059953 4.866653657563574 +6.343472009811439 29.599221573250297 +7.169633216600948 8.246963072641893 +9.369559138551592 115.71968848047702 +7.571266472399731 7.702163496479056 +9.38512344647803 99.37895398059513 +8.342063711209846 6.794734336636792 +9.703729337066198 79.34857390201475 +6.805697352441557 8.786527313263322 +8.089664384006618 93.66466498891512 +7.1244486991551 8.311531854294053 +8.273448118333953 84.2426381742825 +7.746503030939467 7.480397207139309 +8.69475960079198 70.77803241288063 +6.484064255697698 9.301543562357782 +7.1522203715098716 72.04598443334285 +6.725472265851035 8.911565932252547 +7.366196040846758 67.58997603808601 +7.203454903588541 8.199072972710589 +7.786573215678005 60.058785063461116 +6.001899781828435 10.144791140944223 +6.163238215914125 40.94360543606153 +6.121946277820355 9.926538157739603 +6.2841504557510595 40.028232834984 +6.3632023173843395 9.50469774860775 +6.525673242563564 38.239969854871994 +5.933574465050085 10.271563962489727 +6.055001573381491 36.67047244267007 +6.036142343788488 10.081957466807292 +6.158409571366394 35.992368826013184 +6.242440107899849 9.713095265508427 +6.365547626329679 34.65681546790168 +7.17455015383191 12.294891936592329 +9.479135319313295 120.81550242698152 +7.576828540740798 11.467755039719629 +9.472922346036952 103.76877942156183 +8.348581703300848 10.09265441768957 +9.769086540111767 82.93318608765013 +6.8098948752906665 13.115416567967156 +8.183043890960116 99.21243552274656 +7.129284159403308 12.393010040146889 +8.352098879218879 89.10402851757347 +7.752309358985038 11.13141449226836 +8.756139945167465 74.80785601116908 +6.487484186795503 13.899970428712527 +7.2183408065351555 77.64253419299327 +6.729489662928856 13.305768849428079 +7.427084913974571 72.72763590811343 +7.2084315247877635 12.222130928776059 +7.839092321029147 64.51617079023508 +6.003829712093032 15.187664042559 +6.191254757921958 46.41082723193424 +6.124288623920555 14.85398875762931 +6.3122501536785505 45.33748570594586 +6.366288598440117 14.209834863264035 +6.553683846485456 43.253688129980375 +5.935256217996095 15.381608954167652 +6.078484425983943 42.128359969853804 +6.038192934679376 15.091572429442085 +6.182099170180582 41.32106112640432 +6.245167588411863 14.5279338110808 +6.389465535565342 39.73963818350563 +7.181012733872813 16.27351447951422 +9.59326677641476 125.92467701277123 +7.584086675268948 15.155818834922346 +9.56459923216978 108.14813378844673 +8.35697518159283 13.302320922728093 +9.837623129185623 86.47688407649207 +6.81544876767024 17.384632263376517 +8.281708305632678 104.81433764098533 +7.135644864267984 16.406253835101857 +8.434894805217763 93.97764294156815 +7.759863013658684 14.701958900114008 +8.820708673794373 78.8085957515861 +6.492036436114129 18.449423946507814 +7.2890241806377185 83.31550431722044 +6.734813126402034 17.642756423674776 +7.491875642240841 77.90137931372755 +7.214968545921615 16.175101262839863 +7.89475847268894 68.96253662514125 +6.006422108142317 20.202531941845336 +6.221338051760357 51.93217207351944 +6.12742785521823 19.747578186889104 +6.342445424163306 50.68614914496861 +6.37040606516053 18.870647434042585 +6.5838237688764725 48.28181198669522 +5.937518176431157 20.467192624362024 +6.103692698140513 47.63415091681678 +6.040945622450815 20.07146489610171 +6.20756869439985 46.68593542136009 +6.24881466524676 19.30347810486343 +6.41524845462156 44.83801182912499 +7.188801955277015 20.174829161190225 +9.711385025387063 131.02345141640026 +7.592770199074986 18.758212796412995 +9.659648525001606 112.49701640986895 +8.366882721634646 16.41613620234869 +9.90882724316716 89.96373179865813 +6.8221895133110015 21.58670125797887 +8.385347239834106 110.44868952392264 +7.1433178253964 20.343303735354095 +8.521492243575938 98.84411394941118 +7.768871677653259 18.183933860987825 +8.888069555139248 82.76398671864524 +6.497596522617691 22.943332688903038 +7.364270421826129 89.0515077286487 +6.741284316925525 21.915237568641764 +7.56045240266752 83.09622299338258 +7.22284248991074 20.04995483976802 +7.953327048838093 73.38279551725483 +6.009619559612319 25.185252332283653 +6.253579799926831 57.50296733380109 +6.131290256946878 24.602415010931313 +6.374790658596158 56.067962511167465 +6.37544730033358 23.481036787121145 +6.616077931408115 53.31581822861734 +5.9403119861904985 25.524648205338096 +6.130709810436756 53.18393265366841 +6.044338389965273 25.017267752718364 +6.23487376548102 52.08174443318374 +6.253290878348022 24.03418661461706 +6.442898077054891 49.94463106036305 +7.197719063083529 23.993765274076527 +9.832939659427325 136.09272320864213 +7.6026369487758965 22.270176711754363 +9.75758842252144 116.8001051919121 +8.37799051978373 19.430490458431724 +9.982230687226444 93.38272658645754 +6.8299614142043525 25.716578525793505 +8.493607825115175 116.09669302263833 +7.152109447431871 24.199073668088776 +8.611534362186605 103.68772976907279 +7.779075661154854 21.572792295317896 +8.957843729496396 86.66210750003732 +6.504049321026269 27.37703697178141 +7.444038250732146 94.83902800035973 +6.748757457659181 26.118226147021907 +7.6326693511098105 88.29969939483722 +7.231850777197515 23.841635419875193 +8.01454671952858 77.7652987913325 +6.013368575435365 30.132682143589356 +6.28805462007011 63.119837736224774 +6.135807202596793 29.414846519689938 +6.4093232912841485 61.47812097694455 +6.381312727644595 28.03660194858521 +6.650416567585694 58.34902740053262 +5.943592671709383 30.55116972639428 +6.159604243928604 58.77495689682996 +6.048313455191952 29.925682350431213 +6.264055257704169 57.50454300670235 +6.258512238874494 28.715992098144064 +6.4724028942080665 55.05381743453956 +7.207585884052028 27.727341930331292 +9.957411295892838 141.1170937909097 +7.613473336968968 25.689317923127845 +9.85796999834827 121.0456302559583 +8.39003037856016 22.344448731044704 +10.057413849894786 96.72641991818212 +6.838623016996434 29.770975745513283 +8.60610896611771 121.74178204661611 +7.161845877869932 27.970530352494166 +8.704663002549378 108.4955895069877 +7.790247516625787 24.86644790887819 +9.029677285871152 90.49424243534385 +6.511289041022429 31.747266842043164 +7.528252838995679 100.66780283427418 +6.757099746994475 30.248408054795895 +7.7083594445094175 93.50117678027829 +7.241812044001049 27.547203497142462 +8.078167858286802 82.10095747398636 +6.017619693939304 35.042414856214094 +6.324825463074243 68.78037357132636 +6.140915237103194 34.182131776083594 +6.446068983190188 66.91288568452559 +6.387910548632161 32.534178521788 +6.686800291175061 63.37610961544048 +5.947318417046172 35.544581309724386 +6.190434326530134 64.40535354156161 +6.052817413853588 34.79419730032717 +6.295143908616101 62.95134891594664 +6.264401078584577 33.34590249569342 +6.503742667671829 60.161085924589365 +7.218244154702733 31.374104168709625 +10.084318893441349 146.08419718436872 +7.6250928562597675 29.014931080428067 +9.960381558393278 125.22460635398241 +8.402775682919566 25.158883030445377 +10.134005542755876 99.98997884568158 +6.848046767808494 33.74791079358061 +8.722452531857016 127.36924524310672 +7.172372399051334 31.656143217812005 +8.800526608348617 113.25704174008122 +7.802190126927757 28.064548741655926 +9.103244761073016 94.25411363644531 +6.519219196175476 36.05180359283138 +7.616810459006525 106.52842302115181 +6.766191054629009 34.303716996832705 +7.787340480408753 98.69142654715408 +7.252565422688825 31.165262171487736 +8.143947572708695 86.38265534628772 +6.022326952653258 39.91260123977614 +6.363946913528104 74.48289711344867 +6.146555718007617 38.902219665624855 +6.485044821010091 72.369316565796 +6.395156668185356 36.971541491231655 +6.725183228960258 68.39275276142095 +5.951450616666412 40.503192544433674 +6.223251219840947 70.0739284725313 +6.05780068561414 39.620896930738446 +6.3281631925302015 68.41991077139664 +6.270885972705895 37.92174557671438 +6.536891191690739 65.26285303808 +7.229554271189959 34.93372314727412 +10.213223216442161 150.98418501968192 +7.637333814823047 32.247517135745696 +10.064449657149213 129.33025838391805 +8.416036712843086 27.875876426393194 +10.211680322686723 103.17051525744768 +6.858118325896707 37.646389379211314 +8.84223254628074 132.96598559829994 +7.183552260712182 35.25549415087842 +8.898785498783663 117.96328860990214 +7.814733950730997 31.167965471095023 +9.178250037502428 97.93732187647169 +6.527752069631152 40.28923588528229 +7.709581536130491 112.41205499477125 +6.775923324907824 38.28303497072192 +7.869419330259032 103.86232332094082 +7.263969226232369 34.695550262866064 +8.211652781749132 90.6048317747542 +6.027448060652269 44.741832170743 +6.405467405922438 80.22629352385458 +6.152674695929106 43.573600939942146 +6.526261419113251 77.84508007780047 +6.402974341880639 41.347192380591196 +6.765515070006527 73.39542581799162 +5.955953447437106 45.42568861501522 +6.258100964153727 75.78001985306011 +6.0632176229919255 44.40433487486765 +6.363131244666489 73.90854041953203 +6.277901453032079 42.44198640149965 +6.571818121992672 70.35622867743038 +7.241393645102208 38.4067007330369 +10.343727768496834 155.80931313835077 +7.650057103646967 35.38843994070083 +10.16983859173614 133.35758419731857 +8.429655814819245 30.498303099989876 +10.290154985670352 106.26659794758851 +6.868735694249435 41.466169469326516 +8.965043126401474 138.52036582179628 +7.195265121897812 38.76898885886508 +8.999115751269951 122.60708886341597 +7.827734298094775 34.178427932156644 +9.254425892840977 101.54093340365834 +6.536808271909618 44.458782049110425 +7.806412999469502 118.31025821941807 +6.78619981741046 42.18597034059276 +7.954395026235261 109.00663070050022 +7.275899235851666 38.13864193025107 +8.28106209311133 94.76317124310944 +6.032943918733476 49.5290482119846 +6.4494307316223525 86.00988079138898 +6.159222643358743 48.19519608789226 +6.5697243439810045 83.33830349339019 +6.411293683695386 45.66020172346611 +6.807742482504549 78.38120636793518 +5.960793832071986 50.31105751734546 +6.295025895792237 81.52338686288314 +6.069026180652642 49.14343860308781 +6.40006218606778 79.41598665913952 +6.28538769085406 46.905593113860355 +6.608490219514957 75.43886254584096 \ No newline at end of file diff --git a/drone_simulation_mavlink/data/config.json b/drone_simulation_mavlink/data/config.json new file mode 100644 index 0000000..8d6ffc6 --- /dev/null +++ b/drone_simulation_mavlink/data/config.json @@ -0,0 +1,23 @@ +{ + "drone": { + "position": { + "x": 0, + "y": 0 + }, + "altitude": 100, + "initialDirection": 0, + "attackSpeed": 15, + "accelerationPath": 50, + "angularSpeed": 0.5, + "turnThreshold": 0.05 + }, + "ammo": "VOG-17", + "simulation": { + "timeStep": 0.1, + "hitRadius": 2, + "targetTimeStep": 0.05, + "physicsTimeStep": 0.01, + "timeScale": 10.0 + }, + "targetArrayTimeStep": 1 +} \ No newline at end of file diff --git a/drone_simulation_mavlink/data/simulation_example.json b/drone_simulation_mavlink/data/simulation_example.json new file mode 100644 index 0000000..a7f6662 --- /dev/null +++ b/drone_simulation_mavlink/data/simulation_example.json @@ -0,0 +1,215 @@ +{ + "totalSteps": 10, + "steps": [ + { + "position": { + "x": 0, + "y": 0 + }, + "direction": 0.785, + "state": 3, + "targetIndex": 0, + "dropPoint": { + "x": 285.3, + "y": 192.1 + }, + "aimPoint": { + "x": 6.41, + "y": 6.41 + }, + "predictedTarget": { + "x": 301.2, + "y": 200.8 + } + }, + { + "position": { + "x": 0, + "y": 0 + }, + "direction": 0.835, + "state": 3, + "targetIndex": 0, + "dropPoint": { + "x": 285.1, + "y": 193 + }, + "aimPoint": { + "x": 6.03, + "y": 6.71 + }, + "predictedTarget": { + "x": 301.5, + "y": 201.1 + } + }, + { + "position": { + "x": 0, + "y": 0 + }, + "direction": 0.885, + "state": 3, + "targetIndex": 0, + "dropPoint": { + "x": 284.8, + "y": 193.9 + }, + "aimPoint": { + "x": 5.64, + "y": 7 + }, + "predictedTarget": { + "x": 301.8, + "y": 201.4 + } + }, + { + "position": { + "x": 0, + "y": 0 + }, + "direction": 0.588, + "state": 1, + "targetIndex": 0, + "dropPoint": { + "x": 285.6, + "y": 191.2 + }, + "aimPoint": { + "x": 7.55, + "y": 5.03 + }, + "predictedTarget": { + "x": 302.1, + "y": 201.7 + } + }, + { + "position": { + "x": 1.17, + "y": 0.78 + }, + "direction": 0.588, + "state": 1, + "targetIndex": 0, + "dropPoint": { + "x": 285.5, + "y": 191.3 + }, + "aimPoint": { + "x": 8.72, + "y": 5.81 + }, + "predictedTarget": { + "x": 302.4, + "y": 201.9 + } + }, + { + "position": { + "x": 3.51, + "y": 2.34 + }, + "direction": 0.588, + "state": 1, + "targetIndex": 0, + "dropPoint": { + "x": 285.3, + "y": 191.5 + }, + "aimPoint": { + "x": 11.06, + "y": 7.37 + }, + "predictedTarget": { + "x": 302.7, + "y": 202.2 + } + }, + { + "position": { + "x": 7.02, + "y": 4.68 + }, + "direction": 0.588, + "state": 1, + "targetIndex": 0, + "dropPoint": { + "x": 285, + "y": 191.8 + }, + "aimPoint": { + "x": 14.57, + "y": 9.71 + }, + "predictedTarget": { + "x": 303, + "y": 202.5 + } + }, + { + "position": { + "x": 11.7, + "y": 7.8 + }, + "direction": 0.587, + "state": 1, + "targetIndex": 0, + "dropPoint": { + "x": 284.8, + "y": 192 + }, + "aimPoint": { + "x": 19.25, + "y": 12.82 + }, + "predictedTarget": { + "x": 303.3, + "y": 202.8 + } + }, + { + "position": { + "x": 17.55, + "y": 11.7 + }, + "direction": 0.587, + "state": 4, + "targetIndex": 0, + "dropPoint": { + "x": 284.5, + "y": 192.3 + }, + "aimPoint": { + "x": 25.1, + "y": 16.72 + }, + "predictedTarget": { + "x": 303.6, + "y": 203.1 + } + }, + { + "position": { + "x": 19.05, + "y": 12.7 + }, + "direction": 0.586, + "state": 4, + "targetIndex": 0, + "dropPoint": { + "x": 284.4, + "y": 192.4 + }, + "aimPoint": { + "x": 26.6, + "y": 17.72 + }, + "predictedTarget": { + "x": 303.9, + "y": 203.4 + } + } + ] +} \ No newline at end of file diff --git a/drone_simulation_mavlink/data/targets.json b/drone_simulation_mavlink/data/targets.json new file mode 100644 index 0000000..d1a94d1 --- /dev/null +++ b/drone_simulation_mavlink/data/targets.json @@ -0,0 +1,1226 @@ +{ + "targetCount": 5, + "timeSteps": 60, + "targets": [ + { + "positions": [ + { + "x": 315, + "y": 200 + }, + { + "x": 315, + "y": 200.8 + }, + { + "x": 314.8, + "y": 201.6 + }, + { + "x": 314.6, + "y": 202.4 + }, + { + "x": 314.2, + "y": 203.1 + }, + { + "x": 313.8, + "y": 203.9 + }, + { + "x": 313.3, + "y": 204.6 + }, + { + "x": 312.7, + "y": 205.3 + }, + { + "x": 312, + "y": 206 + }, + { + "x": 311.3, + "y": 206.6 + }, + { + "x": 310.5, + "y": 207.2 + }, + { + "x": 309.6, + "y": 207.7 + }, + { + "x": 308.6, + "y": 208.2 + }, + { + "x": 307.6, + "y": 208.6 + }, + { + "x": 306.5, + "y": 209 + }, + { + "x": 305.4, + "y": 209.3 + }, + { + "x": 304.3, + "y": 209.6 + }, + { + "x": 303.1, + "y": 209.8 + }, + { + "x": 302, + "y": 209.9 + }, + { + "x": 300.8, + "y": 210 + }, + { + "x": 299.6, + "y": 210 + }, + { + "x": 298.4, + "y": 209.9 + }, + { + "x": 297.2, + "y": 209.8 + }, + { + "x": 296, + "y": 209.6 + }, + { + "x": 294.9, + "y": 209.4 + }, + { + "x": 293.8, + "y": 209.1 + }, + { + "x": 292.7, + "y": 208.7 + }, + { + "x": 291.7, + "y": 208.3 + }, + { + "x": 290.7, + "y": 207.8 + }, + { + "x": 289.8, + "y": 207.3 + }, + { + "x": 288.9, + "y": 206.8 + }, + { + "x": 288.2, + "y": 206.1 + }, + { + "x": 287.5, + "y": 205.5 + }, + { + "x": 286.8, + "y": 204.8 + }, + { + "x": 286.3, + "y": 204.1 + }, + { + "x": 285.9, + "y": 203.3 + }, + { + "x": 285.5, + "y": 202.6 + }, + { + "x": 285.2, + "y": 201.8 + }, + { + "x": 285.1, + "y": 201 + }, + { + "x": 285, + "y": 200.2 + }, + { + "x": 285, + "y": 199.4 + }, + { + "x": 285.1, + "y": 198.6 + }, + { + "x": 285.4, + "y": 197.8 + }, + { + "x": 285.7, + "y": 197.1 + }, + { + "x": 286.1, + "y": 196.3 + }, + { + "x": 286.5, + "y": 195.6 + }, + { + "x": 287.1, + "y": 194.9 + }, + { + "x": 287.8, + "y": 194.2 + }, + { + "x": 288.5, + "y": 193.6 + }, + { + "x": 289.3, + "y": 193 + }, + { + "x": 290.2, + "y": 192.4 + }, + { + "x": 291.1, + "y": 191.9 + }, + { + "x": 292.1, + "y": 191.5 + }, + { + "x": 293.2, + "y": 191.1 + }, + { + "x": 294.3, + "y": 190.8 + }, + { + "x": 295.4, + "y": 190.5 + }, + { + "x": 296.5, + "y": 190.3 + }, + { + "x": 297.7, + "y": 190.1 + }, + { + "x": 298.9, + "y": 190 + }, + { + "x": 300.1, + "y": 190 + } + ] + }, + { + "positions": [ + { + "x": 528.3, + "y": 121.2 + }, + { + "x": 526.8, + "y": 122.2 + }, + { + "x": 525.3, + "y": 123.2 + }, + { + "x": 523.7, + "y": 124.1 + }, + { + "x": 522.1, + "y": 125 + }, + { + "x": 520.4, + "y": 125.8 + }, + { + "x": 518.7, + "y": 126.5 + }, + { + "x": 516.9, + "y": 127.2 + }, + { + "x": 515, + "y": 127.8 + }, + { + "x": 513.2, + "y": 128.3 + }, + { + "x": 511.3, + "y": 128.8 + }, + { + "x": 509.3, + "y": 129.2 + }, + { + "x": 507.4, + "y": 129.5 + }, + { + "x": 505.4, + "y": 129.7 + }, + { + "x": 503.4, + "y": 129.9 + }, + { + "x": 501.4, + "y": 130 + }, + { + "x": 499.4, + "y": 130 + }, + { + "x": 497.4, + "y": 129.9 + }, + { + "x": 495.4, + "y": 129.8 + }, + { + "x": 493.4, + "y": 129.6 + }, + { + "x": 491.5, + "y": 129.3 + }, + { + "x": 489.5, + "y": 129 + }, + { + "x": 487.6, + "y": 128.5 + }, + { + "x": 485.7, + "y": 128 + }, + { + "x": 483.9, + "y": 127.5 + }, + { + "x": 482.1, + "y": 126.8 + }, + { + "x": 480.3, + "y": 126.1 + }, + { + "x": 478.6, + "y": 125.3 + }, + { + "x": 476.9, + "y": 124.5 + }, + { + "x": 475.3, + "y": 123.6 + }, + { + "x": 473.8, + "y": 122.7 + }, + { + "x": 472.3, + "y": 121.6 + }, + { + "x": 470.9, + "y": 120.6 + }, + { + "x": 469.6, + "y": 119.5 + }, + { + "x": 468.3, + "y": 118.3 + }, + { + "x": 467.1, + "y": 117.1 + }, + { + "x": 466, + "y": 115.8 + }, + { + "x": 465, + "y": 114.5 + }, + { + "x": 464.1, + "y": 113.2 + }, + { + "x": 463.3, + "y": 111.9 + }, + { + "x": 462.5, + "y": 110.5 + }, + { + "x": 461.9, + "y": 109 + }, + { + "x": 461.3, + "y": 107.6 + }, + { + "x": 460.8, + "y": 106.1 + }, + { + "x": 460.5, + "y": 104.7 + }, + { + "x": 460.2, + "y": 103.2 + }, + { + "x": 460.1, + "y": 101.7 + }, + { + "x": 460, + "y": 100.2 + }, + { + "x": 460, + "y": 98.7 + }, + { + "x": 460.2, + "y": 97.2 + }, + { + "x": 460.4, + "y": 95.7 + }, + { + "x": 460.7, + "y": 94.2 + }, + { + "x": 461.2, + "y": 92.8 + }, + { + "x": 461.7, + "y": 91.3 + }, + { + "x": 462.3, + "y": 89.9 + }, + { + "x": 463.1, + "y": 88.5 + }, + { + "x": 463.9, + "y": 87.1 + }, + { + "x": 464.8, + "y": 85.8 + }, + { + "x": 465.8, + "y": 84.5 + }, + { + "x": 466.8, + "y": 83.2 + } + ] + }, + { + "positions": [ + { + "x": 200, + "y": 402 + }, + { + "x": 199.7, + "y": 402 + }, + { + "x": 199.4, + "y": 402 + }, + { + "x": 199.1, + "y": 401.9 + }, + { + "x": 198.8, + "y": 401.8 + }, + { + "x": 198.6, + "y": 401.8 + }, + { + "x": 198.3, + "y": 401.7 + }, + { + "x": 198.1, + "y": 401.5 + }, + { + "x": 197.8, + "y": 401.4 + }, + { + "x": 197.7, + "y": 401.2 + }, + { + "x": 197.5, + "y": 401.1 + }, + { + "x": 197.3, + "y": 400.9 + }, + { + "x": 197.2, + "y": 400.7 + }, + { + "x": 197.1, + "y": 400.5 + }, + { + "x": 197, + "y": 400.3 + }, + { + "x": 197, + "y": 400.1 + }, + { + "x": 197, + "y": 399.9 + }, + { + "x": 197, + "y": 399.7 + }, + { + "x": 197.1, + "y": 399.5 + }, + { + "x": 197.2, + "y": 399.4 + }, + { + "x": 197.3, + "y": 399.2 + }, + { + "x": 197.4, + "y": 399 + }, + { + "x": 197.6, + "y": 398.8 + }, + { + "x": 197.8, + "y": 398.7 + }, + { + "x": 198, + "y": 398.5 + }, + { + "x": 198.2, + "y": 398.4 + }, + { + "x": 198.5, + "y": 398.3 + }, + { + "x": 198.7, + "y": 398.2 + }, + { + "x": 199, + "y": 398.1 + }, + { + "x": 199.3, + "y": 398.1 + }, + { + "x": 199.6, + "y": 398 + }, + { + "x": 199.9, + "y": 398 + }, + { + "x": 200.2, + "y": 398 + }, + { + "x": 200.5, + "y": 398 + }, + { + "x": 200.8, + "y": 398.1 + }, + { + "x": 201.1, + "y": 398.1 + }, + { + "x": 201.3, + "y": 398.2 + }, + { + "x": 201.6, + "y": 398.3 + }, + { + "x": 201.8, + "y": 398.4 + }, + { + "x": 202.1, + "y": 398.5 + }, + { + "x": 202.3, + "y": 398.7 + }, + { + "x": 202.5, + "y": 398.9 + }, + { + "x": 202.6, + "y": 399 + }, + { + "x": 202.7, + "y": 399.2 + }, + { + "x": 202.9, + "y": 399.4 + }, + { + "x": 202.9, + "y": 399.6 + }, + { + "x": 203, + "y": 399.8 + }, + { + "x": 203, + "y": 400 + }, + { + "x": 203, + "y": 400.2 + }, + { + "x": 202.9, + "y": 400.4 + }, + { + "x": 202.9, + "y": 400.6 + }, + { + "x": 202.8, + "y": 400.8 + }, + { + "x": 202.7, + "y": 400.9 + }, + { + "x": 202.5, + "y": 401.1 + }, + { + "x": 202.3, + "y": 401.3 + }, + { + "x": 202.1, + "y": 401.4 + }, + { + "x": 201.9, + "y": 401.6 + }, + { + "x": 201.7, + "y": 401.7 + }, + { + "x": 201.4, + "y": 401.8 + }, + { + "x": 201.1, + "y": 401.9 + } + ] + }, + { + "positions": [ + { + "x": 400, + "y": 300 + }, + { + "x": 405, + "y": 305 + }, + { + "x": 409.9, + "y": 309.7 + }, + { + "x": 414.8, + "y": 314.1 + }, + { + "x": 419.5, + "y": 317.9 + }, + { + "x": 424, + "y": 321 + }, + { + "x": 428.2, + "y": 323.3 + }, + { + "x": 432.2, + "y": 324.6 + }, + { + "x": 435.9, + "y": 325 + }, + { + "x": 439.2, + "y": 324.3 + }, + { + "x": 442.1, + "y": 322.7 + }, + { + "x": 444.6, + "y": 320.2 + }, + { + "x": 446.6, + "y": 316.9 + }, + { + "x": 448.2, + "y": 312.9 + }, + { + "x": 449.3, + "y": 308.4 + }, + { + "x": 449.9, + "y": 303.5 + }, + { + "x": 450, + "y": 298.5 + }, + { + "x": 449.6, + "y": 293.6 + }, + { + "x": 448.7, + "y": 288.9 + }, + { + "x": 447.3, + "y": 284.7 + }, + { + "x": 445.5, + "y": 281.1 + }, + { + "x": 443.2, + "y": 278.2 + }, + { + "x": 440.4, + "y": 276.2 + }, + { + "x": 437.3, + "y": 275.2 + }, + { + "x": 433.8, + "y": 275.1 + }, + { + "x": 429.9, + "y": 276 + }, + { + "x": 425.8, + "y": 277.9 + }, + { + "x": 421.4, + "y": 280.7 + }, + { + "x": 416.7, + "y": 284.2 + }, + { + "x": 412, + "y": 288.4 + }, + { + "x": 407.1, + "y": 293 + }, + { + "x": 402.1, + "y": 297.9 + }, + { + "x": 397.1, + "y": 302.9 + }, + { + "x": 392.1, + "y": 307.8 + }, + { + "x": 387.2, + "y": 312.4 + }, + { + "x": 382.5, + "y": 316.4 + }, + { + "x": 377.9, + "y": 319.8 + }, + { + "x": 373.5, + "y": 322.5 + }, + { + "x": 369.4, + "y": 324.2 + }, + { + "x": 365.6, + "y": 325 + }, + { + "x": 362.2, + "y": 324.7 + }, + { + "x": 359.1, + "y": 323.5 + }, + { + "x": 356.4, + "y": 321.4 + }, + { + "x": 354.2, + "y": 318.4 + }, + { + "x": 352.4, + "y": 314.6 + }, + { + "x": 351.1, + "y": 310.3 + }, + { + "x": 350.3, + "y": 305.6 + }, + { + "x": 350, + "y": 300.6 + }, + { + "x": 350.2, + "y": 295.6 + }, + { + "x": 350.9, + "y": 290.8 + }, + { + "x": 352.1, + "y": 286.4 + }, + { + "x": 353.7, + "y": 282.5 + }, + { + "x": 355.8, + "y": 279.3 + }, + { + "x": 358.4, + "y": 276.9 + }, + { + "x": 361.4, + "y": 275.5 + }, + { + "x": 364.7, + "y": 275 + }, + { + "x": 368.4, + "y": 275.5 + }, + { + "x": 372.5, + "y": 277 + }, + { + "x": 376.8, + "y": 279.4 + }, + { + "x": 381.3, + "y": 282.7 + } + ] + }, + { + "positions": [ + { + "x": 150, + "y": 351 + }, + { + "x": 152.4, + "y": 351.5 + }, + { + "x": 154.8, + "y": 351.9 + }, + { + "x": 157.2, + "y": 352.3 + }, + { + "x": 159.4, + "y": 352.7 + }, + { + "x": 161.5, + "y": 353 + }, + { + "x": 163.5, + "y": 353.4 + }, + { + "x": 165.3, + "y": 353.7 + }, + { + "x": 167, + "y": 354 + }, + { + "x": 168.6, + "y": 354.3 + }, + { + "x": 170.2, + "y": 354.6 + }, + { + "x": 171.8, + "y": 354.9 + }, + { + "x": 173.3, + "y": 355.3 + }, + { + "x": 175, + "y": 355.6 + }, + { + "x": 176.7, + "y": 356.1 + }, + { + "x": 178.5, + "y": 356.5 + }, + { + "x": 180.5, + "y": 357 + }, + { + "x": 182.6, + "y": 357.5 + }, + { + "x": 184.8, + "y": 358.1 + }, + { + "x": 187.2, + "y": 358.7 + }, + { + "x": 189.6, + "y": 359.3 + }, + { + "x": 192, + "y": 360 + }, + { + "x": 194.5, + "y": 360.7 + }, + { + "x": 196.9, + "y": 361.4 + }, + { + "x": 199.2, + "y": 362.1 + }, + { + "x": 201.4, + "y": 362.8 + }, + { + "x": 203.5, + "y": 363.5 + }, + { + "x": 205.5, + "y": 364.1 + }, + { + "x": 207.3, + "y": 364.8 + }, + { + "x": 209, + "y": 365.4 + }, + { + "x": 210.6, + "y": 366 + }, + { + "x": 212.2, + "y": 366.5 + }, + { + "x": 213.7, + "y": 367 + }, + { + "x": 215.3, + "y": 367.5 + }, + { + "x": 217, + "y": 367.9 + }, + { + "x": 218.7, + "y": 368.3 + }, + { + "x": 220.5, + "y": 368.6 + }, + { + "x": 222.5, + "y": 368.9 + }, + { + "x": 224.6, + "y": 369.3 + }, + { + "x": 226.9, + "y": 369.6 + }, + { + "x": 229.2, + "y": 369.9 + }, + { + "x": 231.6, + "y": 370.2 + }, + { + "x": 234.1, + "y": 370.5 + }, + { + "x": 236.5, + "y": 370.8 + }, + { + "x": 238.9, + "y": 371.2 + }, + { + "x": 241.2, + "y": 371.6 + }, + { + "x": 243.4, + "y": 372 + }, + { + "x": 245.5, + "y": 372.5 + }, + { + "x": 247.4, + "y": 373 + }, + { + "x": 249.3, + "y": 373.6 + }, + { + "x": 251, + "y": 374.2 + }, + { + "x": 252.6, + "y": 374.8 + }, + { + "x": 254.2, + "y": 375.4 + }, + { + "x": 255.7, + "y": 376.1 + }, + { + "x": 257.3, + "y": 376.8 + }, + { + "x": 258.9, + "y": 377.5 + }, + { + "x": 260.7, + "y": 378.2 + }, + { + "x": 262.5, + "y": 378.9 + }, + { + "x": 264.5, + "y": 379.6 + }, + { + "x": 266.6, + "y": 380.2 + } + ] + } + ] +} \ No newline at end of file diff --git a/drone_simulation_mavlink/include/config_loaders/factory.hpp b/drone_simulation_mavlink/include/config_loaders/factory.hpp new file mode 100644 index 0000000..a5a1d38 --- /dev/null +++ b/drone_simulation_mavlink/include/config_loaders/factory.hpp @@ -0,0 +1,16 @@ +#pragma once +#include +#include + +struct DroneConfig; +class IBallisticSolver; +class ITargetProvider; +class IConfigLoader; + +enum class SolverType { ANALYTICAL, TABLE }; +enum class ProviderType { JSON, THREAD_SAFE }; +enum class LoaderType { FILE }; + +std::unique_ptr createSolver(SolverType type, const DroneConfig& config, const std::string tablePath = ""); +std::unique_ptr createProvider(ProviderType type, const std::string path, float arrayTimeStep, float timeScale); +std::unique_ptr createLoader(LoaderType type, const std::string c, const std::string a); \ No newline at end of file diff --git a/drone_simulation_mavlink/include/config_loaders/file_config_loader.hpp b/drone_simulation_mavlink/include/config_loaders/file_config_loader.hpp new file mode 100644 index 0000000..a504bcb --- /dev/null +++ b/drone_simulation_mavlink/include/config_loaders/file_config_loader.hpp @@ -0,0 +1,18 @@ +#pragma once +#include +#include "interfaces/config_loader.hpp" + +class FileConfigLoader : public IConfigLoader { + AmmoParams ammoParams; + DroneConfig droneConfig; + const std::string droneConfigPath; + const std::string ammoConfigPath; + bool loaded = false; + +public: + FileConfigLoader(const std::string droneConfigPath, const std::string ammoConfigPath); + + auto load() -> void override; + auto getConfig() -> DroneConfig override; + auto getAmmoParams() -> AmmoParams override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_controller.hpp b/drone_simulation_mavlink/include/drone_controller.hpp new file mode 100644 index 0000000..17a393a --- /dev/null +++ b/drone_simulation_mavlink/include/drone_controller.hpp @@ -0,0 +1,14 @@ +#pragma once +#include "simulation.hpp" + +class DroneController { +public: + DroneController(const DroneConfig& config); + auto computeControl(const DroneTelemetry& telemetry, const Coord& aimPoint) -> dlink::Control; + +private: + DroneConfig config; + float prevDesiredDir = 0.0f; + float prevTime = -1.0f; + bool hasPrev = false; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_link.hpp b/drone_simulation_mavlink/include/drone_link.hpp new file mode 100644 index 0000000..f8247e4 --- /dev/null +++ b/drone_simulation_mavlink/include/drone_link.hpp @@ -0,0 +1,168 @@ +// drone_link.h — бінарний UART-протокол ДЗ11 (заняття 4.4) +// Спільний для симулятора фізики, чекера і програми студента. +// +// Кадр на дроті: +// [0] MAGIC0 = 0xA5 +// [1] MAGIC1 = 0x5A +// [2] TYPE (1 байт) — тип пакета (PacketType) +// [3] LEN (1 байт) — довжина payload у байтах +// [4..4+LEN-1] payload — корисні дані (little-endian) +// [..] CRC16 (2 байти, LE) — CRC-16/CCITT-FALSE по TYPE+LEN+payload +// +// Усі multi-byte поля — little-endian (як на ARM/x86 за замовчуванням). +// Кадр самосинхронізується: приймач шукає MAGIC0,MAGIC1, потім читає LEN і CRC. + +#ifndef DRONE_LINK_H +#define DRONE_LINK_H + +#include +#include + +namespace dlink { + +constexpr uint8_t MAGIC0 = 0xA5; +constexpr uint8_t MAGIC1 = 0x5A; + +enum PacketType : uint8_t { + PKT_TELEMETRY = 0x01, // стан дрона в момент часу + PKT_TARGET = 0x02, // позиція однієї цілі (шлеться періодично по кожній цілі) + PKT_AMMO = 0x03, // параметри боєприпасу + hitRadius (один раз на старті) + PKT_RESULT = 0x04, // вердикт чекера (HIT/MISS) — лише на реальній малині по UART назад + PKT_CONTROL = 0x05, // КЕРУВАННЯ: студент -> чекер (прискорення і швидкість повороту) +}; + +#pragma pack(push, 1) + +// PKT_TELEMETRY — те, що читає і парсить студент +struct Telemetry { + uint32_t t_ms; // час від старту, мілісекунди (таймстемп) + float x, y; // позиція дрона в площині, метри + float z; // висота (altitude), метри + float vx, vy; // швидкість у площині, м/с + float speed; // модуль горизонтальної швидкості, м/с + float dir; // курс (напрямок польоту), радіани + uint8_t state; // стан стейт-машини (0..4, як у DZ3) +}; + +// PKT_TARGET — позиція цілі «зараз» (ціль може рухатися) +struct TargetPos { + uint8_t id; // індекс цілі + float x, y; // поточна позиція цілі, метри +}; + +// PKT_AMMO — конфіг пострілу (надсилається раз на старті) +struct AmmoCfg { + char name[16]; // напр. "VOG-17" + float mass; // m + float drag; // d + float lift; // l + float hitRadius; // радіус успішного влучання, метри + uint8_t nTargets; // скільки цілей у місії +}; + +// PKT_RESULT — вердикт (зворотний канал на залізі) +struct Result { + uint8_t hit; // 1 = влучив, 0 = промах + uint8_t targetId; // у яку ціль (або 0xFF) + float miss_m; // відстань промаху, метри + uint32_t drop_t_ms; // коли спрацював скид +}; + +// PKT_CONTROL — команда керування дроном (студент шле чекеру кожен такт) +// Нормовані значення; чекер множить на фізичні ліміти дрона (maxAccel, maxTurnRate). +struct Control { + float accel; // прискорення вздовж курсу, [-1..1] (1 = повний газ, -1 = гальмо) + float turnRate; // швидкість повороту, [-1..1] (1 = макс. вліво, -1 = вправо) +}; + +#pragma pack(pop) + +// ---- CRC-16/CCITT-FALSE (poly 0x1021, init 0xFFFF) ---- +inline uint16_t crc16(const uint8_t* data, size_t len) +{ + uint16_t crc = 0xFFFF; + for (size_t i = 0; i < len; ++i) { + crc ^= (uint16_t)data[i] << 8; + for (int b = 0; b < 8; ++b) + crc = (crc & 0x8000) ? (crc << 1) ^ 0x1021 : (crc << 1); + } + return crc; +} + +// Запакувати кадр у буфер out (повертає кількість записаних байтів). +// out має бути >= 6 + payloadLen. +inline size_t encode(uint8_t type, const void* payload, uint8_t payloadLen, uint8_t* out) +{ + out[0] = MAGIC0; + out[1] = MAGIC1; + out[2] = type; + out[3] = payloadLen; + if (payloadLen && payload) + std::memcpy(out + 4, payload, payloadLen); + uint16_t c = crc16(out + 2, (size_t)payloadLen + 2); // по TYPE+LEN+payload + out[4 + payloadLen] = (uint8_t)(c & 0xFF); + out[4 + payloadLen + 1] = (uint8_t)(c >> 8); + return (size_t)payloadLen + 6; +} + +// Інкрементальний парсер: годуєш байтами, на готовому валідному кадрі feed() повертає true. +// Тримає стан між викликами — зручно читати з UART по шматках. +struct Parser { + enum { S_M0, S_M1, S_TYPE, S_LEN, S_PAYLOAD, S_CRC0, S_CRC1 } st = S_M0; + uint8_t type = 0, len = 0, idx = 0; + uint8_t buf[260]; + uint16_t crc_rx = 0; + + // Повертає true, коли зібрано повний валідний кадр. + // type/payload/payloadLen — вихідні (валідні лише при true). + bool feed(uint8_t byte, uint8_t& outType, uint8_t* outPayload, uint8_t& outLen) + { + switch (st) { + case S_M0: + if (byte == MAGIC0) + st = S_M1; + break; + case S_M1: + st = (byte == MAGIC1) ? S_TYPE : S_M0; + break; + case S_TYPE: + type = byte; + st = S_LEN; + break; + case S_LEN: + len = byte; + idx = 0; + st = len ? S_PAYLOAD : S_CRC0; + break; + case S_PAYLOAD: + buf[idx++] = byte; + if (idx >= len) + st = S_CRC0; + break; + case S_CRC0: + crc_rx = byte; + st = S_CRC1; + break; + case S_CRC1: { + crc_rx |= (uint16_t)byte << 8; + st = S_M0; + // перерахувати CRC по TYPE+LEN+payload + uint8_t tmp[262]; + tmp[0] = type; + tmp[1] = len; + std::memcpy(tmp + 2, buf, len); + if (crc16(tmp, (size_t)len + 2) == crc_rx) { + outType = type; + outLen = len; + std::memcpy(outPayload, buf, len); + return true; + } + break; // биті дані — кадр відкинуто, синхронізуємось далі + } + } + return false; + } +}; + +} // namespace dlink +#endif // DRONE_LINK_H diff --git a/drone_simulation_mavlink/include/drone_physics.hpp b/drone_simulation_mavlink/include/drone_physics.hpp new file mode 100644 index 0000000..2de968d --- /dev/null +++ b/drone_simulation_mavlink/include/drone_physics.hpp @@ -0,0 +1,33 @@ +#pragma once +#include +#include +#include +#include "simulation.hpp" +#include "thread_safe_queue.hpp" + +class DronePhysics { +public: + DronePhysics(const DroneConfig& config); + + auto sendCommand(const DroneCommand& cmd) -> void; + auto getTelemetry() const -> DroneTelemetry; + auto run() -> void; + auto start() -> void; + auto stop() -> void; + auto isThreadReady() const -> bool; + +private: + auto stepPhysics(float dt) -> void; + auto processState(float dt) -> void; + + DroneContext droneContext; + DroneConfig config; + ThreadSafeQueue commandQueue; + mutable std::mutex mtx; + float elapsedTime = 0.0f; + float angleSpeed = 0.0f; + DroneStates currentState = DroneStates::Stopped; + std::atomic ready{false}; + std::atomic running{false}; + std::atomic stopFlag{false}; +}; diff --git a/drone_simulation_mavlink/include/drone_states/state_accelerating.hpp b/drone_simulation_mavlink/include/drone_states/state_accelerating.hpp new file mode 100644 index 0000000..2c6b747 --- /dev/null +++ b/drone_simulation_mavlink/include/drone_states/state_accelerating.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateAccelerating : public IDroneState { +public: + StateAccelerating(); + + auto execute(const DroneStateInput& input) -> std::unique_ptr override; + auto name() const -> DroneStates override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_states/state_decelerating.hpp b/drone_simulation_mavlink/include/drone_states/state_decelerating.hpp new file mode 100644 index 0000000..e22d9a7 --- /dev/null +++ b/drone_simulation_mavlink/include/drone_states/state_decelerating.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateDecelerating : public IDroneState { +public: + StateDecelerating(); + + auto execute(const DroneStateInput& input) -> std::unique_ptr override; + auto name() const -> DroneStates override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_states/state_moving.hpp b/drone_simulation_mavlink/include/drone_states/state_moving.hpp new file mode 100644 index 0000000..2ce0f4b --- /dev/null +++ b/drone_simulation_mavlink/include/drone_states/state_moving.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateMoving : public IDroneState { +public: + StateMoving(); + + auto execute(const DroneStateInput& input) -> std::unique_ptr override; + auto name() const -> DroneStates override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_states/state_stopped.hpp b/drone_simulation_mavlink/include/drone_states/state_stopped.hpp new file mode 100644 index 0000000..f69b3ad --- /dev/null +++ b/drone_simulation_mavlink/include/drone_states/state_stopped.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateStopped : public IDroneState { +public: + StateStopped(); + + auto execute(const DroneStateInput& input) -> std::unique_ptr override; + auto name() const -> DroneStates override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/drone_states/state_turning.hpp b/drone_simulation_mavlink/include/drone_states/state_turning.hpp new file mode 100644 index 0000000..87e54b9 --- /dev/null +++ b/drone_simulation_mavlink/include/drone_states/state_turning.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "interfaces/drone_state.hpp" + +class StateTurning : public IDroneState { +public: + StateTurning(); + + auto execute(const DroneStateInput& input) -> std::unique_ptr override; + auto name() const -> DroneStates override; +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/interfaces/ballistic_solver.hpp b/drone_simulation_mavlink/include/interfaces/ballistic_solver.hpp new file mode 100644 index 0000000..9d00630 --- /dev/null +++ b/drone_simulation_mavlink/include/interfaces/ballistic_solver.hpp @@ -0,0 +1,13 @@ +#pragma once +#include "simulation.hpp" + +struct BallisticResult { + float flightTime; + float hDist; +}; + +class IBallisticSolver { +public: + virtual BallisticResult solve(const AmmoParams& ammo) = 0; + virtual ~IBallisticSolver() {} +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/interfaces/config_loader.hpp b/drone_simulation_mavlink/include/interfaces/config_loader.hpp new file mode 100644 index 0000000..385223f --- /dev/null +++ b/drone_simulation_mavlink/include/interfaces/config_loader.hpp @@ -0,0 +1,10 @@ +#pragma once +#include "simulation.hpp" + +class IConfigLoader { +public: + virtual void load() = 0; + virtual DroneConfig getConfig() = 0; + virtual AmmoParams getAmmoParams() = 0; + virtual ~IConfigLoader() {} +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/interfaces/drone_state.hpp b/drone_simulation_mavlink/include/interfaces/drone_state.hpp new file mode 100644 index 0000000..b67a562 --- /dev/null +++ b/drone_simulation_mavlink/include/interfaces/drone_state.hpp @@ -0,0 +1,16 @@ +#pragma once +#include +#include +#include "simulation.hpp" + +class IDroneState { +public: + virtual ~IDroneState() = default; + + // Виконати логіку стану, повернути наступний стан. + // Якщо стан не змінився — повернути nullptr + // (головний цикл залишить поточний). + virtual std::unique_ptr execute(const DroneStateInput& input) = 0; + + virtual DroneStates name() const = 0; +}; diff --git a/drone_simulation_mavlink/include/interfaces/target_provider.hpp b/drone_simulation_mavlink/include/interfaces/target_provider.hpp new file mode 100644 index 0000000..055970c --- /dev/null +++ b/drone_simulation_mavlink/include/interfaces/target_provider.hpp @@ -0,0 +1,9 @@ +#pragma once +#include "simulation.hpp" + +class ITargetProvider { +public: + virtual int getTargetCount() = 0; + virtual Target getTarget(int index) = 0; + virtual ~ITargetProvider() {} +}; \ No newline at end of file diff --git a/drone_simulation_mavlink/include/json.hpp b/drone_simulation_mavlink/include/json.hpp new file mode 100644 index 0000000..89554bc --- /dev/null +++ b/drone_simulation_mavlink/include/json.hpp @@ -0,0 +1,25830 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-FileCopyrightText: 2016-2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used C++ version, this is skipped +#if !defined(JSON_HAS_CPP_26) && !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202302L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202302L) + #define JSON_HAS_CPP_26 + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has a syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow accessing some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _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, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +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 +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find the first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find the next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +inline void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // char_traits +#include // tuple +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L + #include // byte +#endif +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non-CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e., those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g., to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for the pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +#if defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603L +template<> +struct char_traits : std::char_traits +{ + using char_type = std::byte; + using int_type = uint64_t; + + static int_type to_int_type(char_type c) noexcept + { + return static_cast(std::to_integer(c)); + } + + static char_type to_char_type(int_type i) noexcept + { + return std::byte(static_cast(i)); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; +#endif + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g., Clang 3.5 or GCC 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to use it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& +is_complete_type < +detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_compatible_reference_type_impl +{ + using JsonType = uncvref_t; + using CVType = typename std::remove_reference::type; + using Type = typename std::remove_cv::type; + constexpr static bool value = std::is_reference::value && + (!std::is_const::type>::value || std::is_const::value) && + (std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same::value); +}; + +template +struct is_compatible_reference_type + : is_compatible_reference_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template