diff --git a/.gitignore b/.gitignore index 5c7810f..7803365 100644 --- a/.gitignore +++ b/.gitignore @@ -1737,3 +1737,1422 @@ DebugTool/DebugTool/obj/._DebugTool.csproj.nuget.g.props DebugTool/DebugTool/obj/._project.assets.json DebugTool/DebugTool/obj/._project.nuget.cache ._.gitignore +DebugTool/.vs/DebugTool/v17/._.suo +DebugTool/._DebugTool.sln +DebugTool/DebugTool/._DataTemplate.cs +DebugTool/DebugTool/bin/Debug/net6.0-windows/._DebugTool.deps.json +DebugTool/DebugTool/bin/Debug/net6.0-windows/._DebugTool.dll +DebugTool/DebugTool/bin/Debug/net6.0-windows/._DebugTool.exe +DebugTool/DebugTool/bin/Debug/net6.0-windows/._DebugTool.pdb +DebugTool/DebugTool/bin/Debug/net6.0-windows/._DebugTool.runtimeconfig.json +DebugTool/DebugTool/obj/Debug/net6.0-windows/._AlarmWindow.baml +DebugTool/DebugTool/obj/Debug/net6.0-windows/._AlarmWindow.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._App.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._apphost.exe +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_0yqfjbke_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_0yqfjbke_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_0yqfjbke_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_0yqfjbke_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_0yqfjbke_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_MarkupCompile.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_MarkupCompile.lref +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.csproj.CoreCompileInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.dll +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.g.resources +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.genruntimeconfig.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.pdb +DebugTool/DebugTool/obj/Debug/net6.0-windows/._GeneratedInternalTypeHelper.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._Loading.baml +DebugTool/DebugTool/obj/Debug/net6.0-windows/._Loading.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._MainWindow.baml +DebugTool/DebugTool/obj/Debug/net6.0-windows/._MainWindow.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._WarnParamConfigWindow.baml +DebugTool/DebugTool/obj/Debug/net6.0-windows/._WarnParamConfigWindow.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0yqfjbke_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0yqfjbke_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0yqfjbke_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0yqfjbke_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0yqfjbke_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/ref/._DebugTool.dll +DebugTool/DebugTool/obj/Debug/net6.0-windows/refint/._DebugTool.dll +app/external/._libObjectEventDetect.a +app/external/npu/._rknn_api.h +app/external/npu/._librknnrt.so +app/._app.pro.user.af7f13e +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qmake.stash +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/Makefile +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/Makefile.Debug +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/Makefile.Release +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/compile_commands.json +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.336F578106E84387.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_ddk.h.2471BCD8E93D0128.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_directx.h.4FC4A1424E1483FA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_mac.h.B5B5B19DC719054F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_off_t.h.5B5A153989DBB2E5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_print_pop.h.E8A694224E367A68.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_print_push.h.8BB6AC4BA48D084D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_secapi.h.5180DDA4ADCEE6C7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw_stat64.h.C4A720165D1AFF68.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_mingw.h.0C7D6FEC5BE3083B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/_timeval.h.B6193050990C8A29.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/affine.hpp.551D82672495179D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/algorithm.B97C7C566BC4BA81.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.83A9BABF8B63B6BC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.5F14A59405A7042F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/all_indices.h.5EF3718ECF4D4924.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.92F64DC450805A84.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.C5125E10B7215150.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.DED45775CB70A69A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.3DBD1B2CAB44CAD4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.711AAFA7B1B76904.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/any.h.A9553D9FCB8C61AC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/array.5CEE309221031C51.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/assert.h.31C12AC0A52E9A19.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.B4FCD094BFD5C775.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/async.hpp.7DB824F59C10E9CF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.2F1E370882034816.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomic_futex.h.988AB60F1E3570FB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.8122E384A6D04CF5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.D7BCFC260C318F7F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomic.B57A90CDF00F469D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.6E0F3740D921A36F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.30910E9BD339B868.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/autotuned_index.h.ED95F507906E917F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/background_segm.hpp.FB3F6B49E432F572.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/base.hpp.EAB6C99805C4B741.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/basic_file.h.46297FDF1FF79E46.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/basic_ios.h.598857236FF9C470.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/basic_ios.tcc.BE0725A2F8A00C67.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.B403E509A4F404EB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.5F21E53426A68ECE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/binders.h.FC09C7DD376EA749.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/blenders.hpp.52C5DB463DEA6322.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/bufferpool.hpp.6AE15BFB2353257C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.6EF67B03E765424E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A68D3B39CB0BFEC3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/c++io.h.204A5984A314F9BE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.21F68B8279C8D39C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/calib3d_c.h.10633BCC28388924.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/calib3d.hpp.22C23F455C512B58.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/camera.hpp.571FD8E38E1DF4AA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cctype.3E41EF56E18FEC27.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cerrno.8C5C22848F7DD348.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cfloat.236DC26250ACF52D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.AC92E5AFB5FFBCF0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/check.hpp.E1382DE3399D274F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/chrono.F6DD885845F020BF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/climits.7164BCEC0C74CF79.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/clocale.CAFBF0F2D94E79B1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cmath.4988CCE4CE138F9A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/codecvt.h.7FE7ABC7C7F7A56B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/complex.BAC81DC85E603ED2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/composite_index.h.509D051012075CF2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.FA15E6515181EC0C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.7210265D6DA4FB8D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/condition_variable.B504957F88609C0E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/config.h.33EE52A4BCD4252C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/core_c.h.207E661FC9AC17F7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/core.hpp.8E5D21E7008446C5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/corecrt_startup.h.6F08457C9E873BAE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.AF0B4159550C1940.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.F638FF58BE6E1B1A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/crtdefs.h.5EDFA5D2EF4E63A7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cstddef.70950C2381DDE1EA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cstdint.731F3C93849C98D2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cstdio.B401A26C9AB8C238.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.112BB81B4A257359.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cstring.FCEC3A5F95FA9EA9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ctime.C254141143A8C9CB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ctype_base.h.D75F7E5142AA6C94.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ctype_inline.h.87E4C73D26534870.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.4A7231139AD3DDFE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cuda_types.hpp.41AD2FA826D0FD66.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cuda.hpp.4BE5B3777FDDC7CB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cuda.inl.hpp.3833F55AC50CBD3E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cv_cpu_dispatch.h.4AF842C1D03B3E39.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cvdef.h.C9B13D73D187B2CF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cvstd.hpp.5EDF33823C4F732B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cvstd.inl.hpp.878D253B4B56D80C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cwchar.ED4A05F746B3A0E0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cwctype.CB0EA163710829E9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.BB577B65A2A26619.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.7D8BFBBAAC4E5569.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/deblurring.hpp.80E1ED190D62D27E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/debug.h.CD925ACC68D3E80D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/defines.h.8E0C4F04AFC670E1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/deque.9B327B0DEE7FCB96.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/deque.tcc.BEA1C244E3FCA45B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/detection_based_tracker.hpp.14065AB33F3FCEFF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dict.hpp.55DE54D129B029D1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dist.h.81E27F2A6CAA43CB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dnn.hpp.93FD420B3001490C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dnn.hpp.9414427BAB35F453.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dnn.inl.hpp.FCFE110DE64BB517.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/dynamic_bitset.h.A93F0431B8898947.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/emdL1.hpp.28426592A7E9CC23.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/emmintrin.h.69755A2E4667BC52.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/errno.h.70F0197ABFD9B0AA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.34C50D4F115EB0CC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.06E5E6CA47E17CF0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.FD2BF0FB1CDEF9E4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/exception.C346FFF4842E49AF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/exception.h.2CEEA68D2A7DFB1D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/exposure_compensate.hpp.B69F2317A3CC1D11.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/fast_marching_inl.hpp.25210D0942D7B7D5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/fast_marching.hpp.A037CB3528EE3220.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/fast_math.hpp.BA37A0696A2E6855.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/features2d.hpp.5DBD166D487F9227.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/flann_base.hpp.B132EF37D7CA8644.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/flann.hpp.F420249FB6A5BA31.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/float.h.7CA0A15AFA366B22.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/float.h.89E1ED1DF772D607.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/float.h.1959B1E6A1408D04.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/frame_source.hpp.851EAC48A5ACFC88.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/fstream.B2B56E365B455FAB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/fstream.tcc.4DA998EC87AAE330.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.FF4FE621C4743263.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.0EBB01E2C9EDEA56.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/functional.875E2AF84AD2F34C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/future.BF2F2E819EB1468F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/general.h.19B871760466C1F3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/global_motion.hpp.EA73627B7334F67C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ground_truth.h.A7E6F2ADBE9E4A2B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.49ABE62A3A3B50F7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.46ABD8DCA91EDFB5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.791E7A29D596F48D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.8B686F2B378FDEAA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.F44FFB2A1CD9BA0D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/heap.h.AB6755E4FC4A7257.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/hierarchical_clustering_index.h.100A6B047A0E5E67.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/highgui_c.h.4CB1F275B5467AD1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/highgui.hpp.74B60B1C19545F10.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/hist_cost.hpp.CCC62A07EF250B9A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxDataBase.cpp.6E3E2C94CA038395.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxDataBase.h.99282D53CC2FFB98.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxTaskDispatch.cpp.73BE7C68D0F31FE0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxTaskDispatch.h.62E61EA6D56F4F19.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxUtils.h.11694824630D2BD6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxVideoDevice.cpp.DDEC21AB4860EF34.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/HxVideoDevice.h.94A0F0FFDB40C259.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/imgcodecs_c.h.C748D072B740E87F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/imgcodecs.hpp.AFA687475D8AE276.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/imgproc_c.h.95F945983EF0D70D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/imgproc.hpp.69F3F79CC2CFDB00.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/index_testing.h.6555D05E75A3F2F5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/inference_engine.hpp.C88865ECC3C23178.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.3050C5D9538E3D24.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/inpainting.hpp.92565C253672E2A8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/interface.h.EDBE14C9475C5550.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.3B22844231ABD2B1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/iomanip.AC1CB3FDB8BFEA1F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.13F3FE997251761B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ios.555D91907D559910.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.C8D430265D31EDC5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/iostream.E535E5EA7A4A2A80.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/istream.BA3872CFD88A3332.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/istream.tcc.4F4EBBEE72CC6E21.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/iterator.04C640A5F2F443D4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/kdtree_index.h.265FE73F41BE979E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/kdtree_single_index.h.9A6640EBDE2A81EB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/kmeans_index.h.AACACB8AE7BD125A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/layer.hpp.E9D7A156F1B331D1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/limits.3B23E4FCE0B649CA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/limits.h.A6E7C512B015C6F2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/limits.h.EC8E8F2E38484C14.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/linear_index.h.EF54E5FABD326B30.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/list.F1C4419D0752369B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.FEBF6E9AB8F76CFD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.E974AA6ABE2A9325.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.AA8E7EC36E38AFEE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_conv.h.9DC1ABAACFFB133F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_facets_nonio.h.B463B52268B1162B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_facets_nonio.tcc.C3F1DD04167CF886.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_facets.h.D9A1FD2D8365B549.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale_facets.tcc.F52F5758DCB18446.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale.71395001D8100DB8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/locale.h.A59DDDDE8D4EB862.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.A1DD4E0FD3E5A4AA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/log.hpp.2EE06DFFE0390B01.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/logger.h.CCF5CEE092C2BC83.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/lsh_index.h.A9203C6554764CBA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/lsh_table.h.2ADFD73CBBEBC2EB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.1CBBC0B9EFAD5694.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/malloc.h.7ECA563659CE7CF6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/map.151CE97CAAA9FA07.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/mat.hpp.832A7B8C58BB3842.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/mat.inl.hpp.A112898134B0CE29.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/matchers.hpp.1AFB7B051966F7C9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/math.h.A1DB45350E65EBE0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/math.h.D7D4FB932C4B6A3F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/matrix.h.72B145DF60A7BF7E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/matx.hpp.7957D79150869320.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/memory.6E16ED94F8A2D49D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.B8EB7787BA6BB141.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/messages_members.h.CD3CC2BFC4D12A7A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/miniflann.hpp.AE3DCCB4A29D6184.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ml.hpp.C718C9C6720B3CA9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ml.inl.hpp.1012190CC677D4FE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/mm_malloc.h.7C4D06982E869375.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/mmintrin.h.67900D68C1AF29C2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/motion_core.hpp.5EEA7C211327D4D2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/motion_estimators.hpp.791D9134980523AE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/motion_stabilizing.hpp.FFE28659ACCA1DEE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/move.h.F58B388B14BCD566.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/mutex.0FD0DA491DD85375.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/MvObjectEventDetect.h.9FB0DDE0734D0C98.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/neon_utils.hpp.474E67EF37399042.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.0398F9F72F7E1FE0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.C103D82E15B4F668.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/new.065635C9E2FBBB2A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/nn_index.h.664D1BF356BAAEBC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.82251F6F9F305728.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/numeric.55ED3EA6B5187529.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/objdetect_c.h.4A218CE2872428AB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/objdetect.hpp.AE6D957F9CA752A1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/opencv_modules.hpp.0C73C39D40CD48A5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/opencv.hpp.6E8B915FC4497849.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/operations.hpp.C692A6566457E622.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/opt_random.h.07E2C2F63B577E3A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/optical_flow.hpp.9F007C29B61787F8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/optical_flow.hpp.0988642E9C39FBE4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/optim.hpp.1C1FFAB13F8EFB9D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.A90A43ECF27B2CAA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.2640E0932B7FE3D5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ostream.D1315E645C66D317.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ostream.tcc.EDDE984248BD7BBE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/outlier_rejection.hpp.0E477DE0B9CD5618.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ovx.hpp.D39F07A808C53E42.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/params.h.268F2BD97AF17513.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.4072D92E9C6DADC4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/persistence.hpp.8690767C2995D53E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/photo_c.h.893515924C1AD86C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/photo.hpp.56CBD60861694E3F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.3D9F9B46EA1162CA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.75827FC786E1E608.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/process.h.CB1F4E644F5910C0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/pthread_compat.h.C33E4872EF125EFC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/pthread_signal.h.9DE9989C7D069009.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/pthread_time.h.0FF9FB6D30C7460E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/pthread_unistd.h.5FC57430EF3C45AD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.2035D80BE2D80D7F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.DD2D3F827E4F40DA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ptr.inl.hpp.A9C7173F87A79F23.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractanimation.h.4E2D3361198EF357.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstracteventdispatcher.h.30361BAF3EC39CCE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.EDC3EF7CCFFDB1E4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractnativeeventfilter.h.FB0E06521D03FBAD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractproxymodel.h.B74A451A7BBC08CE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractsocket.h.EE08917B6687EF4E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstractstate.h.45260A11586FFDC5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qabstracttransition.h.F8AB49F294FFA711.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.35FBC2DC78DB062B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qanimationgroup.h.5D33FC7137C9F9AF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.07BB0597F6A3F75F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.4E3A697674685F9C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.46160D84321B9957.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.CB6461D9BB4BEF9F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.15638A651C5B9D82.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.CC4A433FED2D05A3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbasictimer.h.00034A7D674A03D2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbitarray.h.98103452B676E22A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbuffer.h.6EED81F1A2F4D6D5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.CB48DE069F6E5B36.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.D2D51B65A5B4AE52.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qbytearraymatcher.h.C00123538522AD35.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcache.h.A9866151747C2062.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.F791E9C209669671.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborarray.h.B1C7D198164117F4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborcommon.h.4F282CA5A35BEADB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcbormap.h.094903DAC9CB7A4A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborstream.h.3653FA3A8AD7E42F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborstreamreader.h.C71C288A5B921AF4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborstreamwriter.h.04B900DDF2CEC051.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcborvalue.h.7C6ADB0806622E81.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.CE7E033B98913A16.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcollator.h.9EEF616511C31A9F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcommandlineoption.h.F3856BCB530E2FC3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcommandlineparser.h.FC30B19C9AD1BF68.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.CB589330B9F9ECC1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qconcatenatetablesproxymodel.h.91FD6500A9DC9296.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.AFC643C46FB8B246.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.9B79E3669ED63654.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.F792A05D4330C819.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcontiguouscache.h.BD07EAE9F9012ACB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QCoreApplication.6675F5B0A56A665B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.8F0181BA2F9B6250.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.DBC1528B295F3DD4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qcryptographichash.h.39853904189DDEA3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.55C533A136F63764.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QDateTime.838D6DF4942A37B5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.B5F10E9C00678A51.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QDeadlineTimer.5B33E5C4033307F9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdeadlinetimer.h.6ED1AA9C8985D85F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.6401A60D8922406C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdir.h.8691165914E3E27B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qdiriterator.h.FAD594D79567CDFF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qeasingcurve.h.86760D246F414BAA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.34988CEE8BBF4490.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.0027A25058A8A6B4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.272A6DBB6432E780.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qeventtransition.h.3D14C0BCAE85EF86.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qexception.h.6B4390893A2A69EC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfactoryinterface.h.3F9F096FC1D4B14A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfile.h.E264EC44B321622C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfiledevice.h.F4526D638505AE59.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfileinfo.h.66F7D0B77E52DBB9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfileselector.h.4DE3B69249398A86.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfilesystemwatcher.h.DF6C4A621C58346D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfinalstate.h.4D9BFE7AA5DC451C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.4557F825A1032C88.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.AD04CFA276917EA8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfuture.h.45C8FCDAD1AEE8D4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfutureinterface.h.6B8B0B87D0798A59.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfuturesynchronizer.h.1C00C0BBDF10758C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qfuturewatcher.h.CFA407260E7E94A0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.AC75258432542500.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.555E302827EB36E3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.BB5C8B1660344400.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.5501AE9F6A3E5F1B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.A27A65291471AC84.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qhistorystate.h.6D7D9DBEE6E4989D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qhostaddress.h.2434441E2AB9BC28.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QHostInfo.4FA8990E03548BF1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qhostinfo.h.001F534EF84C9DAE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qidentityproxymodel.h.4C5AE062887713CC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.7AD984A195E3AFF4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qisenum.h.F46BE4849C18C497.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qitemselectionmodel.h.7658735415CBB079.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.64DC8A4D5F101C93.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QJsonArray.D6B3F698B327A9D2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qjsonarray.h.1A9663A84D6E0BBC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QJsonDocument.9211DFAF0B6FD018.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qjsondocument.h.160368498083D000.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QJsonObject.81FDDF93572D52E5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qjsonobject.h.37D6A173FF1644D4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qjsonvalue.h.E75B92CCCE81D22E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlibrary.h.6AB7008E14201889.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlibraryinfo.h.52DB7A6111A5B08C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qline.h.D671B33CA2A6B412.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlinkedlist.h.B5F9D96269B6CC1B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.FD967A803D38CBED.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.4DFE2B86551DA3D2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlockfile.h.BEC5493F2BE34FC5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.8646B0B748C53DDF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qloggingcategory.h.538DCD69C443FA35.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QMap.5EA6E4CBED01E9A7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.2C8290789D5EAEBB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.E87DC7A45B22CA0D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmath.h.63DAAEF024DC2AF3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmessageauthenticationcode.h.4B53D57C582B1E56.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmetaobject.h.9F23E36F90E7F54F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.E0775F4D14848E9C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmimedata.h.2044FD245DE3F1C7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmimedatabase.h.CE6D1A31E7C48159.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmimetype.h.4D1092DB9423AECC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QMutex.DD812DE654B39008.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qmutex.h.81D5AE1B8ACF225B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.A5CBC1F9916FB351.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.AB3593D35F4BD6FD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.19D6A61C6ADCDB9D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QObject.F5C9B4B5CB3C2980.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.937BAC00B26CDEB6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobjectcleanuphandler.h.7344FB8505AA55CF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.AC16DA7FEBC6D317.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.BF5182CC647C551D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.F55220F6151EECF0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qoperatingsystemversion.h.0C8A6553843D7DBB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.01EC040D375EEC4A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qparallelanimationgroup.h.85180786C86DD866.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpauseanimation.h.4E99E5DAC79F93D6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qplugin.h.DE9F523BBBA2CACD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpluginloader.h.EA633A3C5D56BB81.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.6FB288C34FF26F6E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpointer.h.986070A66F49553D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QProcess.BE20511ABB71C702.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qprocess.h.A1BB6E96ACCC5C67.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.F504BB0A2254FA87.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qpropertyanimation.h.29B5E6C2E1B95A8A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qqueue.h.2F650E4439EB8437.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qrandom.h.9E96CDA87220AB36.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qreadwritelock.h.8CCD2225565AD7F5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.F5EA361C77E0C730.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E32CB392E23458C2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qregexp.h.A743E4D5A3EC60F3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qregularexpression.h.ED809E01C720F191.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qresource.h.D36D8A98978524F6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qresultstore.h.69A1FE4873FCCF33.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qrunnable.h.29D7BBF8AE89D7ED.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsavefile.h.84C4D60D900891C0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.8AD0A6696B808022.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qscopedvaluerollback.h.13E7EEE9B5109214.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.599F4523BB550F5E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsemaphore.h.03BD022815ACDF25.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsequentialanimationgroup.h.FD6B251C977AE53A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qset.h.BFAFD752BEBADCAF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsettings.h.E4A5FF87FCA064B6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.D6B568578D377DC1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsharedmemory.h.74B3985F8685FD55.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.E2245BC152CF2E19.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.D32C0199D8ED9A8B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsignalmapper.h.9FDB227BC3FAD4AC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsignaltransition.h.DC0EC1D892E23766.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.71DE2AFBA660A2C9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsocketnotifier.h.BF762D8A0F141027.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsortfilterproxymodel.h.4FFF4B7B4BAB6192.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QSqlDatabase.EEB6E95A68CA68F3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsqldatabase.h.8967DC8F96BD4418.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QSqlQuery.3C178EFD3E335631.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsqlquery.h.58DC82FB7B9832AE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstack.h.FB6935E1A949EE64.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstandardpaths.h.F27EB24E29EE186B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstate.h.A9F400A02CB8BDD3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstatemachine.h.CEC5B76DE56E797C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QStorageInfo.8212E2507EED6208.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstorageinfo.h.61967399393C5B98.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QString.8665D72C10712FDA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.5EA1833E902AE4F5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.AF1AB6ABE8F4CA85.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.B2C660C58429A68E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QStringList.9E91A5BD37AA9A83.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.DF3F832335591A2F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringlistmodel.h.E033F82F6DE71C36.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.1E9F373FCE67A3FF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.B9C78C6DB832A2BD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.938962BF20C34C05.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.8C74469949D07301.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D1E22CAF291BC911.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsystemsemaphore.h.3150EDEE5A1D7808.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrent_global.h.EBE491BCD5A3C876.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QtConcurrent.060E35BCF604347E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentcompilertest.h.8ED96DB143254118.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QtConcurrentDepends.331A385FED61665B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentexception.h.6ADF1F2DF862B68C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentfilter.h.3D525621A0580248.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentfilterkernel.h.AD8D1F7B870797CB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentfunctionwrappers.h.2F898BA60F697377.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentiteratekernel.h.BCC9A4F35FBC4B61.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentmap.h.2EFC5B3DBAFEB115.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentmapkernel.h.030D5F9979037EC0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentmedian.h.842A9091A1AF6EB3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentreducekernel.h.21F4BD198C33E37F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentrun.h.C5F1908CDD3DB639.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentrunbase.h.D431733C4305B7ED.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentstoredfunctioncall.h.3B3F0BAD775F0EDC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentthreadengine.h.FDB1A59431A3D44C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtconcurrentversion.h.4C4C1CD4FB148F34.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.EB4748EC2FBA645A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QtCore.65D441226FAD65AC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QtCoreDepends.B3C4B2819B16AE5B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtcoreversion.h.15522F22F9A93811.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QTcpServer.80DA24A8D436E365.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtcpserver.h.3683963D315F14C1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QTcpSocket.8C2B2EE3B665EC20.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtcpsocket.h.1A6468E01FF2D065.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtemporarydir.h.22EB30A249295A15.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtemporaryfile.h.65E9F2D2C371BEAC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtextboundaryfinder.h.F123E7AD44D5576D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtextcodec.h.CE780492885009B4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtextstream.h.FD7DED16BDAB5ED2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QThread.583157118AC9F20A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qthread.h.3FDA5477F7F898C7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qthreadpool.h.03EA81677E815F7A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qthreadstorage.h.2348F2408BA7FE18.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtimeline.h.3AAF333019BC4B8C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtimer.h.1BCF901E3807B726.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtimezone.h.DDA59197AAE136FB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtnetwork-config.h.3E891ADC07A39333.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtnetworkglobal.h.1A0CFDC887D5FD1E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtranslator.h.2732FFDA82B0AED2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtransposeproxymodel.h.6D42A860E83C532D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtsql-config.h.02EDD5E40FE7ACE2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtsqlglobal.h.E0CA70D79586BB7D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.043294AF5EB82066.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qtypetraits.h.0FA71E4A0F4D2884.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/queue.9FD5706C83C7F39C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qurl.h.39923D297D998B1B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qurlquery.h.79931C85B94BA345.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/quuid.h.D01E87244D39D146.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QVariant.A704BA059C5B8A47.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.594F5E3E73CCAB5D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qvariantanimation.h.767CBD22FD05B16F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.610D0616978DF4C2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qvector.h.010EAB524AFCAF9D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qversionnumber.h.63C8E522172FDAB2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.EBB7C24F771545A7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qwaitcondition.h.22F4E1441A0E0836.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qwineventnotifier.h.51D594E05FAD97AC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qxmlstream.h.D0E232452DFD61DD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/random.2B3D11F3A4FBF27B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/random.h.1F38C286BE20DA04.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/random.h.5CE7D223EC68E566.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/random.tcc.1B3CF95D55BB2D23.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6705DE4D912B2C96.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ratio.0486C04EFA9BA1BC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.A5AEC652AF1CCAAF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/result_set.h.D95AE8837D4DF604.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/ring_buffer.hpp.7362BEB213728ED3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/sampling.h.582339CE2A350482.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/saturate.hpp.BEE82585C2D5DCDF.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/saving.h.FBEB750A1DAA6121.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/seam_finders.hpp.0184F29630EF7AC8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/set.B16B4847DD282B4E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shape_distance.hpp.15D88068F71B8F4F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shape_transformer.hpp.05AB03C901ABF68A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shape.hpp.7D17588BCCE44856.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.90C9998B817DA447.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.2FDC406D1BF722F4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.5104944BDD90EA40.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/signal.h.49846CA24C328D17.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/sstream.B7DAB30A18DBD5E2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/sstream.tcc.DE45119DF1D9727C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stabilizer.hpp.930B5948892C742D.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.FB3C8F52403F7273.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.B4742125A1911407.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/std_mutex.h.1095571B6D7E9CB4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.15F65BACBA8B9323.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.03E114F40754BC25.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.4A4DE34691E1A143.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.09BF4E8AB9B167B9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.4568F321797CF475.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdio_s.h.32CBDFF657187EAD.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.A16B1BA327A7E3C2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdlib_s.h.6A7C265198DFA2C1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.5EFD4A8A3F3BD092.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.B08C8454FEFA3D8C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stitching.hpp.5C4ABBC6002A390C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.8820CF307B043629.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.6BF3180CADD195A9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.041292C0AE238322.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.36AB55C7CA46A7C6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_deque.h.461FD455F0C87617.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.2351B41E67293CB4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.50B614434E1A8864.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.1C397EDF8CA83A91.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.56140EC589D06AA1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.9DAB179302994A17.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.826C90124AA355F0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.7CE5C18A5FFDF5B6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.1280CAB4D90FCC35.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_multiset.h.A55A825088E9CCD4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.42820198EFD60330.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.CD67FF5E6532F3DC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_queue.h.D3B0FB22442DFF94.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.6C63CB239E4C7FEC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.33F09D8C6B172960.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_set.h.306351D7308CD214.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.0A61D053A5DFA070.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.032F76D3DE2AFB7E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.9FB118EFAF3C2242.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.0FB43F56F501916B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.33731E89EA1B1EB3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.18E5132709DE2328.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/streambuf.946C9A83A2F42682.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.9F9DEFE178A4A9E9.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.4626AEB0CF8D6A76.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/string_s.h.F89C051472CFB7FB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/string.78BD98DDA3ECA759.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/string.h.BC3339C2E774EF90.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.FB6C71722254174A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/superres.hpp.049DCA7DD70B5F4B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/swprintf.inl.87354148B1961076.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/system_error.C2BC630D15D7D458.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/thread.8D88C475F542A083.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/time_members.h.5909422B24806E16.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/time.h.48B8243A2650FF43.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/timeb_s.h.CDF4ABD0B21A03F2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/timeb.h.41E398516464C634.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/timer.h.AEAD3E6798B9F896.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/tracking_c.h.6EE2974E246F2771.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/tracking.hpp.DD12193457FF3015.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/traits.hpp.BAF397773940C8EC.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/tuple.8B82DDEEB850B484.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/type_traits.5C6B947F44F865B3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.A25FE2B7B86EB107.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.CC5B48228301BC4B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/types_c.h.A67F51B6A542E927.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/types_c.h.EE0900D6B1618564.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/types.h.36984CF5441BA315.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/types.hpp.FD02D5655E3758D5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.9A74DE199F23904F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.9ED941EADB531360.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.B26331BE3AC990EE.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.AE81EAD612694DF6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.C3C6CCCCB9D6E3E5.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/util_inl.hpp.5C66D827DABDA6E7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/util.hpp.A4B0D24CB3CCEAC1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/utility.1ECB6374FB0A251A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/utility.hpp.7A271394D73085C1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/vadefs.h.B2F16AD2AFB026E4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/vadefs.h.DB9AB0D373BF9498.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/vector.25941029FA90E21F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.0FD2F7E03D43A548.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/version.hpp.505C311203A09354.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/video.hpp.B3DCD8A321E35D86.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/videoio_c.h.421D437BC77508E7.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/videoio.hpp.61F28FFFF75F68F8.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/videostab.hpp.9A6D1A3900F9A65C.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/vsx_utils.hpp.EAC35909D017B41B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/warpers_inl.hpp.17D9224668990375.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/warpers.hpp.06D60F09AB33662A.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/warpers.hpp.188DA6AEB54BAF97.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/wchar_s.h.73D2262285D48E80.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.4AC9309FBBA7B478.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/wctype.h.ECB5E902604C4E86.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/wobble_suppression.hpp.3C0E656EAEA74E02.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/xmmintrin.h.364A73AC0B6B44A1.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/HxDataBase.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/HxTaskDispatch.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/HxVideoDevice.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/main.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxTaskDispatch.cpp +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxTaskDispatch.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxUtils.cpp +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxUtils.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxVideoDevice.cpp +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_HxVideoDevice.o +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/moc_predefs.h +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/_20231026182850571.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/_20231026183131896.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/_20231026183622391.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/20231026182850571.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/20231026183131896.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/20231026183622391.mp4 +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/app.exe +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/DataBase.db +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_calib3d3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_core3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_dnn3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_features2d3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_flann3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_highgui3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_imgcodecs3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_imgproc3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_ml3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_objdetect3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_photo3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_shape3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_stitching3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_superres3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_video3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_videoio3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/libopencv_videostab3412.dll +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/debug/debug/opencv_ffmpeg3412_64.dll +DebugTool/.vs/DebugTool/FileContentIndex/._43e28bbd-f9f6-45f5-a0ca-43b73cafdeeb.vsidx +DebugTool/.vs/DebugTool/FileContentIndex/43e28bbd-f9f6-45f5-a0ca-43b73cafdeeb.vsidx +DebugTool/.vs/DebugTool/v17/._.futdcache.v2 +DebugTool/.vs/ProjectEvaluation/._debugtool.metadata.v5.2 +DebugTool/.vs/ProjectEvaluation/._debugtool.projects.v5.2 +DebugTool/DebugTool/obj/._DebugTool_1gemr4xq_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/._DebugTool_1gemr4xq_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/._DebugTool_1gemr4xq_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/._DebugTool_3dax0v4e_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/._DebugTool_3dax0v4e_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/._DebugTool_3dax0v4e_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/._DebugTool_wf2v3zr0_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/._DebugTool_wf2v3zr0_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/._DebugTool_wf2v3zr0_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/._DebugTool_xp23wu5i_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/._DebugTool_xp23wu5i_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/._DebugTool_xp23wu5i_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_1gemr4xq_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_1gemr4xq_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_1gemr4xq_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_3dax0v4e_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_3dax0v4e_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_3dax0v4e_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_da5egvsh_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_da5egvsh_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_da5egvsh_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_ggpoqhuy_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_ggpoqhuy_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_ggpoqhuy_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_hvwgovfx_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_hvwgovfx_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_hvwgovfx_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_r51hc0c1_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_r51hc0c1_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_r51hc0c1_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_wf2v3zr0_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_wf2v3zr0_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_wf2v3zr0_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_xp23wu5i_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_xp23wu5i_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_xp23wu5i_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_ymz5oyii_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_ymz5oyii_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_ymz5oyii_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_1gemr4xq_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_1gemr4xq_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_1gemr4xq_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_1gemr4xq_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3cvp2gka_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3cvp2gka_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3cvp2gka_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3cvp2gka_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3cvp2gka_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3dax0v4e_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3dax0v4e_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3dax0v4e_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3dax0v4e_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_cqi52zhl_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_cqi52zhl_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_cqi52zhl_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_cqi52zhl_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_ervd3b5n_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_ervd3b5n_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_ervd3b5n_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_ervd3b5n_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_ervd3b5n_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_kcrim1j1_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_kcrim1j1_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_kcrim1j1_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_kcrim1j1_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_kcrim1j1_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_n3gp1g21_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_n3gp1g21_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_n3gp1g21_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_n3gp1g21_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_pm5253aj_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_pm5253aj_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_pm5253aj_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_pm5253aj_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_pm5253aj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_sy1gk40f_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_sy1gk40f_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_sy1gk40f_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_sy1gk40f_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_sy1gk40f_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_uk53nmfm_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_uk53nmfm_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_uk53nmfm_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_uk53nmfm_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_w4ezky5q_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_w4ezky5q_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_w4ezky5q_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_w4ezky5q_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_w4ezky5q_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wf2v3zr0_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wf2v3zr0_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wf2v3zr0_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wf2v3zr0_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wttwpy4k_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wttwpy4k_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wttwpy4k_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_wttwpy4k_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xp23wu5i_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xp23wu5i_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xp23wu5i_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xp23wu5i_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool.csproj.FileListAbsolute.txt +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0luc2ivg_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0luc2ivg_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0luc2ivg_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0luc2ivg_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0luc2ivg_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0olrncq0_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0olrncq0_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0olrncq0_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0olrncq0_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0olrncq0_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1gemr4xq_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1gemr4xq_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1gemr4xq_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1gemr4xq_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_02kpmygo_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_02kpmygo_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_02kpmygo_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_02kpmygo_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2zljg2jc_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2zljg2jc_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2zljg2jc_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2zljg2jc_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3cvp2gka_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3cvp2gka_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3cvp2gka_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3cvp2gka_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3cvp2gka_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3dax0v4e_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3dax0v4e_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3dax0v4e_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3dax0v4e_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_41mwpyib_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_41mwpyib_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_41mwpyib_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_41mwpyib_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_330rpo20_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_330rpo20_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_330rpo20_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_330rpo20_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_330rpo20_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_alhal5gl_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_alhal5gl_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_alhal5gl_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_alhal5gl_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cqi52zhl_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cqi52zhl_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cqi52zhl_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cqi52zhl_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_da5egvsh_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_da5egvsh_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_da5egvsh_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_da5egvsh_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ervd3b5n_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ervd3b5n_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ervd3b5n_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ervd3b5n_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ervd3b5n_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ggpoqhuy_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ggpoqhuy_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ggpoqhuy_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ggpoqhuy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hms1tteu_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hms1tteu_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hms1tteu_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hms1tteu_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hms1tteu_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hvwgovfx_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hvwgovfx_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hvwgovfx_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hvwgovfx_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jcz1kf5r_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jcz1kf5r_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jcz1kf5r_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jcz1kf5r_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_kcrim1j1_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_kcrim1j1_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_kcrim1j1_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_kcrim1j1_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_kcrim1j1_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_lisr30tv_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_lisr30tv_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_lisr30tv_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_lisr30tv_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_lisr30tv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mce2irop_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mce2irop_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mce2irop_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mce2irop_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mce2irop_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mgxhokt3_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mgxhokt3_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mgxhokt3_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mgxhokt3_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_mgxhokt3_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n3gp1g21_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n3gp1g21_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n3gp1g21_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n3gp1g21_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_noxf4ik2_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_noxf4ik2_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_noxf4ik2_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_noxf4ik2_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_noxf4ik2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pm5253aj_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pm5253aj_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pm5253aj_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pm5253aj_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pm5253aj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_r51hc0c1_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_r51hc0c1_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_r51hc0c1_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_r51hc0c1_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sf10lhhh_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sf10lhhh_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sf10lhhh_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sf10lhhh_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sfvlemvw_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sfvlemvw_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sfvlemvw_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sfvlemvw_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sfvlemvw_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sy1gk40f_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sy1gk40f_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sy1gk40f_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sy1gk40f_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sy1gk40f_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uk53nmfm_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uk53nmfm_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uk53nmfm_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uk53nmfm_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_w4ezky5q_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_w4ezky5q_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_w4ezky5q_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_w4ezky5q_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_w4ezky5q_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wf2v3zr0_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wf2v3zr0_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wf2v3zr0_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wf2v3zr0_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wttwpy4k_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wttwpy4k_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wttwpy4k_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wttwpy4k_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xp23wu5i_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xp23wu5i_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xp23wu5i_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xp23wu5i_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ymz5oyii_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ymz5oyii_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ymz5oyii_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ymz5oyii_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/._DebugTool.csproj +DebugTool/DebugTool/._MainWindow.xaml +DebugTool/DebugTool/._MainWindow.xaml.cs +DebugTool/DebugTool/._WarnParamConfigWindow.xaml +._通信协议说明.docx +app/app.pro.user.7f628c0 +app/app.pro.user.af7f13e +资料/testcase.cpp +资料/testcase/opencv.h +app/._app.pro.user.7f628c0 +DebugTool/DebugTool/obj/DebugTool_24wmh1qv_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_24wmh1qv_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_24wmh1qv_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_5245gnkr_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_5245gnkr_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_5245gnkr_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_bl4stmbc_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_bl4stmbc_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_bl4stmbc_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_e2a5fjmd_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_e2a5fjmd_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_e2a5fjmd_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_hhug4nxn_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_hhug4nxn_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_hhug4nxn_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_hsub1kob_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_hsub1kob_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_hsub1kob_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_jwufzprb_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_jwufzprb_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_jwufzprb_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_oyn4lmie_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_oyn4lmie_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_oyn4lmie_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_pdh0y4sk_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_pdh0y4sk_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_pdh0y4sk_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_po21z2ge_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_po21z2ge_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_po21z2ge_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_sbctekiw_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_sbctekiw_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_sbctekiw_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_ulpr3n5g_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_ulpr3n5g_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_ulpr3n5g_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_uwit1emy_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_uwit1emy_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_uwit1emy_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/DebugTool_vayyq0hn_wpftmp.csproj.nuget.dgspec.json +DebugTool/DebugTool/obj/DebugTool_vayyq0hn_wpftmp.csproj.nuget.g.props +DebugTool/DebugTool/obj/DebugTool_vayyq0hn_wpftmp.csproj.nuget.g.targets +DebugTool/DebugTool/obj/Debug/net6.0-windows/._CalibrationWindow.g.i.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3zlxasso_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3zlxasso_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3zlxasso_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3zlxasso_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_3zlxasso_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xi1l4eyu_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xi1l4eyu_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xi1l4eyu_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/._DebugTool_xi1l4eyu_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/CalibrationWindow.baml +DebugTool/DebugTool/obj/Debug/net6.0-windows/CalibrationWindow.g.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/CalibrationWindow.g.i.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0bpewova_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0bpewova_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0bpewova_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0bpewova_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0bpewova_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0nlixu1j_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0nlixu1j_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0nlixu1j_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_0nlixu1j_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1apnghox_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1apnghox_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1apnghox_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1apnghox_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cbddffa_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cbddffa_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cbddffa_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cbddffa_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cdz0ejo_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cdz0ejo_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cdz0ejo_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1cdz0ejo_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1s2bxyd2_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1s2bxyd2_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1s2bxyd2_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1s2bxyd2_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_1s2bxyd2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2tv3kdui_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2tv3kdui_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2tv3kdui_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2tv3kdui_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_2tv3kdui_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3tnyu0bm_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3tnyu0bm_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3tnyu0bm_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3tnyu0bm_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zd1hm1h_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zd1hm1h_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zd1hm1h_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zd1hm1h_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zd1hm1h_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zlxasso_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zlxasso_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zlxasso_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zlxasso_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_3zlxasso_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5bxkjlmo_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5bxkjlmo_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5bxkjlmo_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5bxkjlmo_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5bxkjlmo_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5cxvfjaz_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5cxvfjaz_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5cxvfjaz_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5cxvfjaz_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5cxvfjaz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5zpvjmsq_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5zpvjmsq_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5zpvjmsq_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5zpvjmsq_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5zpvjmsq_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_15t4lm4s_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_15t4lm4s_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_15t4lm4s_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_15t4lm4s_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_15t4lm4s_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_24wmh1qv_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_24wmh1qv_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_24wmh1qv_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_24wmh1qv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_35gtvkuo_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_35gtvkuo_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_35gtvkuo_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_35gtvkuo_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5245gnkr_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5245gnkr_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5245gnkr_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_5245gnkr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_aciig1rf_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_aciig1rf_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_aciig1rf_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_aciig1rf_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_aciig1rf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_afm3sexi_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_afm3sexi_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_afm3sexi_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_afm3sexi_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_agh4o5id_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_agh4o5id_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_agh4o5id_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_agh4o5id_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_agh4o5id_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bevg3vtl_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bevg3vtl_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bevg3vtl_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bevg3vtl_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bfbycl34_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bfbycl34_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bfbycl34_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bfbycl34_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bfbycl34_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bl4stmbc_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bl4stmbc_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bl4stmbc_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_bl4stmbc_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_c3r4jz5h_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_c3r4jz5h_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_c3r4jz5h_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_c3r4jz5h_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_c3r4jz5h_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cf4ejcai_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cf4ejcai_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cf4ejcai_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cf4ejcai_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cf4ejcai_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cghj2qyi_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cghj2qyi_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cghj2qyi_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cghj2qyi_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_cghj2qyi_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_csi5uxd3_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_csi5uxd3_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_csi5uxd3_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_csi5uxd3_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_csi5uxd3_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_dbgilnba_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_dbgilnba_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_dbgilnba_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_dbgilnba_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_dbgilnba_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_e2a5fjmd_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_e2a5fjmd_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_e2a5fjmd_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_e2a5fjmd_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_esqf03hh_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_esqf03hh_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_esqf03hh_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_esqf03hh_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_esqf03hh_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ffc5tsyz_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ffc5tsyz_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ffc5tsyz_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ffc5tsyz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_fmlcardy_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_fmlcardy_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_fmlcardy_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_fmlcardy_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_fmlcardy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_g4typldn_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_g4typldn_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_g4typldn_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_g4typldn_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gbgmngzg_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gbgmngzg_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gbgmngzg_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gbgmngzg_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gbgmngzg_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gblazvei_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gblazvei_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gblazvei_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gblazvei_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gblazvei_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gyz4cbl1_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gyz4cbl1_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gyz4cbl1_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gyz4cbl1_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_gyz4cbl1_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h1hekbjr_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h1hekbjr_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h1hekbjr_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h1hekbjr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h04sj2x4_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h04sj2x4_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h04sj2x4_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_h04sj2x4_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhug4nxn_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhug4nxn_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhug4nxn_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhug4nxn_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhv1c3ia_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhv1c3ia_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhv1c3ia_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hhv1c3ia_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hsub1kob_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hsub1kob_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hsub1kob_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hsub1kob_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hy1l5cbt_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hy1l5cbt_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hy1l5cbt_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hy1l5cbt_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_hy1l5cbt_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ilpky1kb_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ilpky1kb_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ilpky1kb_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ilpky1kb_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ilpky1kb_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ivmdh1jl_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ivmdh1jl_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ivmdh1jl_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ivmdh1jl_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jhgpbwoj_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jhgpbwoj_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jhgpbwoj_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jhgpbwoj_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jhgpbwoj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jnv1dn0f_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jnv1dn0f_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jnv1dn0f_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jnv1dn0f_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jwufzprb_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jwufzprb_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jwufzprb_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_jwufzprb_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_koso10lh_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_koso10lh_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_koso10lh_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_koso10lh_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_m4qzbcqx_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_m4qzbcqx_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_m4qzbcqx_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_m4qzbcqx_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_m4qzbcqx_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n4oox1ma_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n4oox1ma_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n4oox1ma_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_n4oox1ma_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_nbatm2ks_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_nbatm2ks_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_nbatm2ks_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_nbatm2ks_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_nbatm2ks_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ngmxpanr_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ngmxpanr_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ngmxpanr_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ngmxpanr_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ngmxpanr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_njql0vva_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_njql0vva_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_njql0vva_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_njql0vva_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_njql0vva_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_no3jz0qv_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_no3jz0qv_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_no3jz0qv_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_no3jz0qv_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_no3jz0qv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_o53surft_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_o53surft_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_o53surft_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_o53surft_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_o53surft_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_oyn4lmie_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_oyn4lmie_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_oyn4lmie_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_oyn4lmie_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pdh0y4sk_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pdh0y4sk_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pdh0y4sk_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_pdh0y4sk_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_po21z2ge_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_po21z2ge_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_po21z2ge_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_po21z2ge_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_qj1zljc5_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_qj1zljc5_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_qj1zljc5_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_qj1zljc5_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_qj1zljc5_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_rakcqrtf_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_rakcqrtf_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_rakcqrtf_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_rakcqrtf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_s40febt1_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_s40febt1_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_s40febt1_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_s40febt1_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_s40febt1_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sbctekiw_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sbctekiw_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sbctekiw_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_sbctekiw_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ujjqqv3o_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ujjqqv3o_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ujjqqv3o_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ujjqqv3o_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ulpr3n5g_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ulpr3n5g_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ulpr3n5g_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_ulpr3n5g_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_usnh3zwj_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_usnh3zwj_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_usnh3zwj_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_usnh3zwj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uwit1emy_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uwit1emy_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uwit1emy_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_uwit1emy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vayyq0hn_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vayyq0hn_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vayyq0hn_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vayyq0hn_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vwu11zat_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vwu11zat_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vwu11zat_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_vwu11zat_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wcgo2orq_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wcgo2orq_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wcgo2orq_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wcgo2orq_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wcgo2orq_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wym4bkde_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wym4bkde_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wym4bkde_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wym4bkde_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_wym4bkde_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x0awjbin_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x0awjbin_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x0awjbin_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x0awjbin_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x0awjbin_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x5ul5ls2_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x5ul5ls2_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x5ul5ls2_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x5ul5ls2_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x5ul5ls2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x41v5z4a_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x41v5z4a_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x41v5z4a_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x41v5z4a_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_x41v5z4a_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xeoixyad_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xeoixyad_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xeoixyad_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xeoixyad_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xeoixyad_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xi1l4eyu_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xi1l4eyu_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xi1l4eyu_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xi1l4eyu_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xrkhkx2l_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xrkhkx2l_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xrkhkx2l_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xrkhkx2l_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_xrkhkx2l_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_yz2lktad_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_yz2lktad_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_yz2lktad_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_yz2lktad_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_yz2lktad_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zgc5hcvo_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zgc5hcvo_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zgc5hcvo_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zgc5hcvo_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zgc5hcvo_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zi5nkile_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zi5nkile_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zi5nkile_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zi5nkile_wpftmp.csproj.BuildWithSkipAnalyzers +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zi5nkile_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zs2tbxar_wpftmp.AssemblyInfo.cs +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zs2tbxar_wpftmp.AssemblyInfoInputs.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zs2tbxar_wpftmp.assets.cache +DebugTool/DebugTool/obj/Debug/net6.0-windows/DebugTool_zs2tbxar_wpftmp.GeneratedMSBuildEditorConfig.editorconfig +DebugTool/DebugTool/bin/Debug/net6.0-windows/DebugTool.zip +DebugTool/DebugTool/bin/Debug/net6.0-windows/Thumbs.db +DebugTool/.vs/DebugTool/FileContentIndex/93960abd-88b5-45d0-a264-8a7d99810008.vsidx +0001-add-rknnModel.patch +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpchannel.h.71144DFDE1E01D07.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpclient.h.15E2FEB794966D58.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpexchange.h.7E5432F4296473B4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpglobal.h.D0C1651CE8A97492.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpmessage.h.286A783AC8220EBA.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqpqueue.h.90AD844522AAEDC0.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qamqptable.h.F463F4945AC1BE8F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QByteArray.17581CB797109D5B.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QFile.FCD7DB2B95FE5159.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QFlags.B7DB8B484D58F9DB.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QHash.E751EE29C48FE3B3.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QHostAddress.2A9E89F71E1AE70F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QMetaType.9198532699D15359.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QQueue.523EF55906FE8D1F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QSharedDataPointer.155E01DC88A3AF94.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qssl.h.60E31DF6259D1DB6.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsslcertificate.h.6B9DE9AE6595391F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QSslConfiguration.091BCB96EA83165F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsslconfiguration.h.46E92CCC80DE2A19.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QSslError.BC64BA294149612F.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsslerror.h.208A22EF8305D88E.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/qsslsocket.h.EF0015A1D04CE455.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QThreadPool.E16EC34907CC23B2.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QUrl.CEE06E0160407BD4.idx +build-app-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/.qtc_clangd/.cache/clangd/index/QVariantHash.7BF6FAFC1D9D3571.idx +Motovis主动安全ADAS+DSM+BSD安装标定(2)(1)(1).pdf +DebugTool/DebugTool/CalibrationWindow.xaml +DebugTool/DebugTool/CalibrationWindow.xaml.cs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cef9b0b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "__node_handle": "cpp", + "optional": "cpp", + "system_error": "cpp", + "string": "cpp" + } +} \ No newline at end of file diff --git a/app/HxDataBase.cpp b/app/HxDataBase.cpp index c08bd19..acb0477 100644 --- a/app/HxDataBase.cpp +++ b/app/HxDataBase.cpp @@ -1,18 +1,21 @@ #include "HxDataBase.h" -QMutex DataBase::mutex; -QSqlDatabase DataBase::database; -QString DataBase::device_id; -QString DataBase::ftp_address; -QString DataBase::ftp_username; -QString DataBase::ftp_password; -int DataBase::algorithm_type; -QString DataBase::dsm_video_input_source; -QString DataBase::adas_video_input_source; -QStringList DataBase::bsd_video_input_source; -QStringList DataBase::bsd_warn_regions; +#include "HxUtils.h" -QSqlDatabase DataBase::open(QString filepath, QString connectionName) +QMutex HxDataBase::mutex; +QSqlDatabase HxDataBase::database; +QString HxDataBase::device_id; +QString HxDataBase::ftp_address, HxDataBase::ftp_username, HxDataBase::ftp_password; +QString HxDataBase::qamqp_address, HxDataBase::qamqp_username, HxDataBase::qamqp_password; +int HxDataBase::algorithm_type; +QString HxDataBase::dsm_video_input_source; +QString HxDataBase::adas_video_input_source; +QStringList HxDataBase::bsd_video_input_source; +QStringList HxDataBase::bsd_warn_regions; +EventWarnParamConfig HxDataBase::warm_param_config; +CameraCalibration HxDataBase::adas_camera_calibration; + +QSqlDatabase HxDataBase::open(QString filepath, QString connectionName) { QSqlDatabase db; if (QSqlDatabase::contains(connectionName)) @@ -40,14 +43,14 @@ QSqlDatabase DataBase::open(QString filepath, QString connectionName) * @brief 关闭数据库 * @param connectionName 连接名 */ -void DataBase::close(QString connectionName) { QSqlDatabase::removeDatabase(connectionName); } +void HxDataBase::close(QString connectionName) { QSqlDatabase::removeDatabase(connectionName); } /** * @brief 读取 Setting 表数据 * @param name name字段值 * @return 返回对应参数 */ -QVariant DataBase::read_setting(QString name) +QVariant HxDataBase::read_setting(QString name) { QVariant value; @@ -74,7 +77,7 @@ QVariant DataBase::read_setting(QString name) * @param defaultValue 默认值(int) * @return 返回对应参数(int) */ -int DataBase::read_setting(QString name, int defaultValue) +int HxDataBase::read_setting(QString name, int defaultValue) { auto value = read_setting(name); @@ -87,7 +90,7 @@ int DataBase::read_setting(QString name, int defaultValue) * @param defaultValue 默认值(bool) * @return 返回对应参数(bool) */ -bool DataBase::read_setting(QString name, bool defaultValue) +bool HxDataBase::read_setting(QString name, bool defaultValue) { auto value = read_setting(name); @@ -100,7 +103,7 @@ bool DataBase::read_setting(QString name, bool defaultValue) * @param defaultValue 默认值(string) * @return 返回对应参数(string) */ -QString DataBase::read_setting(QString name, QString defaultValue) +QString HxDataBase::read_setting(QString name, QString defaultValue) { auto value = read_setting(name); @@ -112,7 +115,7 @@ QString DataBase::read_setting(QString name, QString defaultValue) * @param name name字段值 * @param value 对应参数 */ -void DataBase::write_setting(QString name, QString value) +void HxDataBase::write_setting(QString name, QString value) { QMutexLocker lock(&mutex); @@ -128,7 +131,108 @@ void DataBase::write_setting(QString name, QString value) query.clear(); } -void DataBase::initialization() +void HxDataBase::read_warm_param_config(void) +{ + auto start_event_warn_kind = read_setting("start_event_warn_kind", QString("1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1")).split(";"); + auto abnormal_warn_frame_count = read_setting("abnormal_warn_frame_count", QString("0;0;0;0;0;0;0;50;75;25;50;75;50;50;50;25;75;50;50;50;50;50;75;50;50;100")).split(";"); + auto normal_frame_count = read_setting("normal_frame_count", QString("0;0;0;0;0;0;0;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25;0;0;0;0")).split(";"); + auto abnormal_warn_interval_frame_count = read_setting("abnormal_warn_interval_frame_count", QString("0;0;125;0;125;0;0;0;0;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0")).split(";"); + auto abnormal_warn_score_threshold = read_setting("abnormal_warn_score_threshold", QString("0;0;0;0;0;0;0;0.7;0.8;0.4;0.65;0.95;0.75;0.3;0.65;0.5;0.87;25;25;20;15;0.75;0.3;0.5;0.5;0.5")).split(";"); + auto normal_warn_score_threshold = read_setting("normal_warn_score_threshold", QString("0;0;0;0;0;0;0;0.35;0.35;0.7;0.7;0.7;0.55;0.8;0.4;0.55;0.13;20;20;15;10;0.55;0.3;0.3;0.5;0.5")).split(";"); + + for (int i = 0; i < EVENT_WARN_NUM; i++) + { + warm_param_config.bStartEventWarnKind[i] = QVariant(start_event_warn_kind.at(i)).toBool(); + warm_param_config.nAbnormalWarnFrameCount[i] = abnormal_warn_frame_count.at(i).toInt(); + warm_param_config.nNormalFrameCount[i] = normal_frame_count.at(i).toInt(); + warm_param_config.nAbnormalWarnIntervalFrameCount[i] = abnormal_warn_interval_frame_count.at(i).toInt(); + warm_param_config.fAbnormalWarnScoreThreshold[i] = abnormal_warn_score_threshold.at(i).toFloat(); + warm_param_config.fNormalWarnScoreThreshold[i] = normal_warn_score_threshold.at(i).toFloat(); + } + + warm_param_config.nHmwTime = read_setting("hmw_time", 1200); + warm_param_config.nPcwTime = read_setting("pcw_time", 2000); + warm_param_config.nFcwTime = read_setting("fcw_time", 2400); + warm_param_config.fHmwVel = read_setting("hmw_vel", 30); + warm_param_config.fFcwVel = read_setting("fcw_vel", 30); + warm_param_config.fLdwVel = read_setting("ldw_vel", 55); + warm_param_config.fPcwVel = read_setting("pcw_vel", 50); + warm_param_config.fBsdFirstVel = read_setting("bsd_first_vel", 30); + warm_param_config.fBsdSecondVel = read_setting("bsd_second_vel", 30); + warm_param_config.fBsdThirdVel = read_setting("bsd_third_vel", 30); + warm_param_config.nLdwDistance = read_setting("ldw_distance", -5); + warm_param_config.fDsmVel = read_setting("dsm_vel", 5); +} + +void HxDataBase::write_warm_param_config(void) +{ + QStringList start_event_warn_kind, abnormal_warn_frame_count, normal_frame_count, abnormal_warn_interval_frame_count, abnormal_warn_score_threshold, normal_warn_score_threshold; + + for (int i = 0; i < EVENT_WARN_NUM; i++) + { + start_event_warn_kind.append(QString::number(warm_param_config.bStartEventWarnKind[i])); + abnormal_warn_frame_count.append(QString::number(warm_param_config.nAbnormalWarnFrameCount[i])); + normal_frame_count.append(QString::number(warm_param_config.nNormalFrameCount[i])); + abnormal_warn_interval_frame_count.append(QString::number(warm_param_config.nAbnormalWarnIntervalFrameCount[i])); + abnormal_warn_score_threshold.append(QString::number(warm_param_config.fAbnormalWarnScoreThreshold[i])); + normal_warn_score_threshold.append(QString::number(warm_param_config.fNormalWarnScoreThreshold[i])); + } + + write_setting("start_event_warn_kind", start_event_warn_kind.join(";")); + write_setting("abnormal_warn_frame_count", abnormal_warn_frame_count.join(";")); + write_setting("normal_frame_count", normal_frame_count.join(";")); + write_setting("abnormal_warn_interval_frame_count", abnormal_warn_interval_frame_count.join(";")); + write_setting("abnormal_warn_score_threshold", abnormal_warn_score_threshold.join(";")); + write_setting("normal_warn_score_threshold", normal_warn_score_threshold.join(";")); + write_setting("hmw_time", QString::number(warm_param_config.nHmwTime)); + write_setting("pcw_time", QString::number(warm_param_config.nPcwTime)); + write_setting("fcw_time", QString::number(warm_param_config.nFcwTime)); + write_setting("hmw_vel", QString::number(warm_param_config.fHmwVel)); + write_setting("fcw_vel", QString::number(warm_param_config.fFcwVel)); + write_setting("ldw_vel", QString::number(warm_param_config.fLdwVel)); + write_setting("pcw_vel", QString::number(warm_param_config.fPcwVel)); + write_setting("bsd_first_vel", QString::number(warm_param_config.fBsdFirstVel)); + write_setting("bsd_second_vel", QString::number(warm_param_config.fBsdSecondVel)); + write_setting("bsd_third_vel", QString::number(warm_param_config.fBsdThirdVel)); + write_setting("ldw_distance", QString::number(warm_param_config.nLdwDistance)); + write_setting("dsm_vel", QString::number(warm_param_config.fDsmVel)); +} + +void HxDataBase::read_adas_camera_calibration(void) +{ + auto value = read_setting("adas_camera_calibration", QString("4527;1830;0;1695;0;1500;6.00;0.00;-0.32;0.00")).split(";"); + + adas_camera_calibration.fCarLen = value[0].toInt(); + adas_camera_calibration.fCarWidth = value[1].toInt(); + adas_camera_calibration.fRefCenter = value[2].toInt(); + adas_camera_calibration.fRefTop = value[3].toInt(); + adas_camera_calibration.fDisLen2Tyre = value[4].toInt(); + adas_camera_calibration.fCameraHeight = value[5].toInt(); + adas_camera_calibration.fCameraFocus = value[6].toFloat(); + adas_camera_calibration.fCameraDx = value[7].toFloat(); + adas_camera_calibration.fPitch = value[8].toFloat(); + adas_camera_calibration.fYaw = value[9].toFloat(); +} + +void HxDataBase::write_adas_camera_calibration(void) +{ + QStringList value; + + value.append(QString::number(adas_camera_calibration.fCarLen)); + value.append(QString::number(adas_camera_calibration.fCarWidth)); + value.append(QString::number(adas_camera_calibration.fRefCenter)); + value.append(QString::number(adas_camera_calibration.fRefTop)); + value.append(QString::number(adas_camera_calibration.fDisLen2Tyre)); + value.append(QString::number(adas_camera_calibration.fCameraHeight)); + value.append(QString::number(adas_camera_calibration.fCameraFocus, 'f', 2)); + value.append(QString::number(adas_camera_calibration.fCameraDx, 'f', 2)); + value.append(QString::number(adas_camera_calibration.fPitch, 'f', 2)); + value.append(QString::number(adas_camera_calibration.fYaw, 'f', 2)); + + write_setting("adas_camera_calibration", value.join(";")); +} + +void HxDataBase::initialization() { database = open("DataBase.db", "DataBase"); @@ -142,25 +246,26 @@ void DataBase::initialization() /* 创建 程序配置信息 表 */ if (!query.exec("CREATE TABLE IF NOT EXISTS [Setting] (" - " [name] TEXT NOT NULL PRIMARY KEY," - " [value] TEXT" - ");")) + " [name] TEXT NOT NULL PRIMARY KEY," + " [value] TEXT" + ");")) { - qDebug("配置表创建失败"); + HxLog::append("database", "setting read failed"); return; } - /* */ + /* 设备编号 */ device_id = read_setting("device_id", QString("TVIS")); - /* */ + /* FTP信息 */ ftp_address = read_setting("ftp_address", QString("192.168.10.10:7616")); - - /* */ ftp_username = read_setting("ftp_username", QString("nvruser")); + ftp_password = read_setting("ftp_password", QString("Sztvis_789.")); /* */ - ftp_password = read_setting("ftp_password", QString("Sztvis_789.")); + qamqp_address = read_setting("qamqp_address", QString("192.168.1.227:5672")); + qamqp_username = read_setting("qamqp_username", QString("root")); + qamqp_password = read_setting("qamqp_password", QString("Sztvis@789.")); /* 算法类型, 默认 BSD */ algorithm_type = read_setting("algorithm_type", 0x02); @@ -174,18 +279,25 @@ void DataBase::initialization() /* BSD 视频输入源 (string) */ bsd_video_input_source = read_setting("bsd_video_input_source", QString(";;;;;;")).split(";"); + /* BSD 报警区域 */ bsd_warn_regions = read_setting( - "bsd_warn_regions", - QString("0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" - "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" - "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" - "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" - "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" - "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0")) - .split("*"); + "bsd_warn_regions", + QString("0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" + "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" + "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" + "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" + "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*" + "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0")) + .split("*"); + + /* 读取报警参数配置 */ + read_warm_param_config(); + + /* 读取 ADAS 相机内外参 */ + read_adas_camera_calibration(); } -bool DataBase::save_setting() +bool HxDataBase::save_setting() { database.transaction(); @@ -193,11 +305,16 @@ bool DataBase::save_setting() write_setting("ftp_address", ftp_address); write_setting("ftp_username", ftp_username); write_setting("ftp_password", ftp_password); + write_setting("qamqp_address", qamqp_address); + write_setting("qamqp_username", qamqp_username); + write_setting("qamqp_password", qamqp_password); write_setting("algorithm_type", QString::number(algorithm_type)); write_setting("dsm_video_input_source", dsm_video_input_source); write_setting("adas_video_input_source", adas_video_input_source); write_setting("bsd_video_input_source", bsd_video_input_source.join(";")); write_setting("bsd_warn_regions", bsd_warn_regions.join("*")); + write_warm_param_config(); + write_adas_camera_calibration(); return database.commit(); } @@ -207,7 +324,7 @@ bool DataBase::save_setting() * @param channel 通道号 * @return 返回 BsdWarnRegion 结构体 */ -BsdWarnRegion DataBase::get_bsd_warn_region(int channel) +BsdWarnRegion HxDataBase::get_bsd_warn_region(int channel) { BsdWarnRegion ret; diff --git a/app/HxDataBase.h b/app/HxDataBase.h index 873392d..b4c48fb 100644 --- a/app/HxDataBase.h +++ b/app/HxDataBase.h @@ -13,7 +13,7 @@ #define BSD_MAX_CHANNEL 6 -class DataBase +class HxDataBase { private: /** @@ -68,6 +68,14 @@ private: */ static void write_setting(QString name, QString value); + static void read_warm_param_config(void); + + static void write_warm_param_config(void); + + static void read_adas_camera_calibration(void); + + static void write_adas_camera_calibration(void); + public: /** * @brief 初始化 @@ -104,30 +112,28 @@ public: /* FTP密码 */ static QString ftp_password; - /** - * 算法类型 - */ + static QString qamqp_address, qamqp_username, qamqp_password; + + /* 算法类型 */ static int algorithm_type; - /** - * DSM 视频输入源 - */ + /* DSM 视频输入源 */ static QString dsm_video_input_source; - /** - * ADAS 视频输入源 - */ + /* ADAS 视频输入源 */ static QString adas_video_input_source; - /** - * BSD 视频输入源 - */ + /* BSD 视频输入源 */ static QStringList bsd_video_input_source; - /** - * BSD 报警区域 - */ + /* BSD 报警区域 */ static QStringList bsd_warn_regions; + + /* 报警参数配置 */ + static EventWarnParamConfig warm_param_config; + + /* ADAS 相机内外参 */ + static CameraCalibration adas_camera_calibration; }; #endif // HXDATABASE_H diff --git a/app/HxTaskDispatch.cpp b/app/HxTaskDispatch.cpp index 2ad3e25..422c720 100644 --- a/app/HxTaskDispatch.cpp +++ b/app/HxTaskDispatch.cpp @@ -6,115 +6,141 @@ #include /* 视频设备 */ -VideoDevice adas_video_device, bsd_video_device[6], dsm_video_device; +HxVideoDevice adas_video_device, bsd_video_device[6], dsm_video_device; -TaskDispatch *dispatcher = new TaskDispatch(); +HxTaskDispatch* dispatcher = new HxTaskDispatch(); + +QMutex upload_file_mutex; +QQueue upload_file_queue; + +#ifdef USE_RABBITMQ +HxRabbitMQUtils HxRabbitMQ; +#endif + +/* 倒车灯;1:亮;0:熄灭 */ +static int reversing_light = 0; /* 车辆状态: 1 直行; 2 左转弯; 3 右转弯; 4 倒车 */ static int vehicle_status = 0; static int detect_channel = 0; -void TaskDispatch::initialization(void) +void HxTaskDispatch::initialization(void) { + HxLog::append("initialization", QString("algorithm_type=%1").arg(HxDataBase::algorithm_type)); + HxLog::append("initialization", QString("ftp=%1,%2,%3").arg(HxDataBase::ftp_address, HxDataBase::ftp_username, HxDataBase::ftp_password)); + HxLog::append("initialization", QString("rabbitmq=%1,%2,%3").arg(HxDataBase::qamqp_address, HxDataBase::qamqp_username, HxDataBase::qamqp_password)); + /* 算法模块初始化 */ #if USE_ALGORITHM /* adas检测配置 */ - strcpy(dispatcher->event_detect_config.szAdasDetectConfigPathName, "/opt/algmode/adas_detect.bin"); + strcpy(dispatcher->event_detect_config.szAdasDetectConfigPathName, "./algmode/adas_detect.bin"); /* adas跟踪配置 */ - strcpy(dispatcher->event_detect_config.szAdasTrackConfigPathName, "/opt/algmode/adas_track.bin"); + strcpy(dispatcher->event_detect_config.szAdasTrackConfigPathName, "./algmode/adas_track.bin"); /* bsd检测配置 */ - strcpy(dispatcher->event_detect_config.szBsdDetectConfigPathName, "/opt/algmode/bsd_detect.bin"); - // strcpy(dispatcher->event_detect_config.szRightBsdFrontDetectConfigPathName, "/opt/algmode/bsd_detect.bin"); + strcpy(dispatcher->event_detect_config.szBsdDetectConfigPathName, "./algmode/bsd_detect.bin"); + // strcpy(dispatcher->event_detect_config.szRightBsdFrontDetectConfigPathName, "./algmode/bsd_detect.bin"); /* dsm人脸检测配置 */ - strcpy(dispatcher->event_detect_config.szDsmFaceDetectConfigPathName, "/opt/algmode/dsm_face_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmFaceDetectConfigPathName, "./algmode/dsm_face_detect.bin"); /* dsm人脸特征点检测配置 */ - strcpy(dispatcher->event_detect_config.szDsmFaceLandMarksDetectConfigPathName, "/opt/algmode/dsm_face_landmarks_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmFaceLandMarksDetectConfigPathName, "./algmode/dsm_face_landmarks_detect.bin"); /* dsm人脸认证检测配置 */ - strcpy(dispatcher->event_detect_config.szDsmFaceVerificationDetectConfigPathName, "/opt/algmode/dsm_face_verification_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmFaceVerificationDetectConfigPathName, "./algmode/dsm_face_verification_detect.bin"); /* dsm人眼认证检测配置 */ - strcpy(dispatcher->event_detect_config.szDsmEyeLandMarksDetectConfigPathName, "/opt/algmode/dsm_eye_landmarks_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmEyeLandMarksDetectConfigPathName, "./algmode/dsm_eye_landmarks_detect.bin"); /* dsm人脸认证检测配置 */ - strcpy(dispatcher->event_detect_config.szDsmSmokeConfPathName, "/opt/algmode/dsm_smoke_detect.bin"); - strcpy(dispatcher->event_detect_config.szDsmCallConfPathName, "/opt/algmode/dsm_call_detect.bin"); - strcpy(dispatcher->event_detect_config.szDsmFaceFeaturePathName, "/opt/algmode/dsm_face_feature.bin"); - strcpy(dispatcher->event_detect_config.szDsmHeadPoseConfPathName, "/opt/algmode/data_68kp"); + strcpy(dispatcher->event_detect_config.szDsmSmokeConfPathName, "./algmode/dsm_smoke_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmCallConfPathName, "./algmode/dsm_call_detect.bin"); + strcpy(dispatcher->event_detect_config.szDsmFaceFeaturePathName, "./algmode/dsm_face_feature.bin"); + strcpy(dispatcher->event_detect_config.szDsmHeadPoseConfPathName, "./algmode/data_68kp"); /* 输出调试信息 */ MvSetPrintf(false); /* 目标跟踪事件检测初始化 */ - auto result = MvObjectEventDetectInit(&dispatcher->event_detect_config, RIGHT_BSD_FRONT_DETECT_CHANNEL | - RIGHT_BSD_REAR_DETECT_CHANNEL | - LEFT_BSD_FRONT_DETECT_CHANNEL | - LEFT_BSD_REAR_DETECT_CHANNEL | - FRONT_BSD_DETECT_CHANNEL | - REAR_BSD_DETECT_CHANNEL | - DMS_DETECT_CHANNEL | - ADAS_DETECT_CHANNEL); - + auto result = MvObjectEventDetectInit(&dispatcher->event_detect_config, RIGHT_BSD_FRONT_DETECT_CHANNEL | RIGHT_BSD_REAR_DETECT_CHANNEL | LEFT_BSD_FRONT_DETECT_CHANNEL | LEFT_BSD_REAR_DETECT_CHANNEL | FRONT_BSD_DETECT_CHANNEL | REAR_BSD_DETECT_CHANNEL | DMS_DETECT_CHANNEL | ADAS_DETECT_CHANNEL); if (result != 0) + { + HxLog::append("initialization", "object event detect init failed!!"); + return; + } + + /* 设置报警参数 */ + result = MvSetEventWarnParamConfig(&HxDataBase::warm_param_config); + if (result != 0) + HxLog::append("initialization", "set event warn param config failed!!"); + + + /* 相机标定 */ + if(MvCameraCalibration(&HxDataBase::adas_camera_calibration) != 0) + HxLog::append("initialization", "camera calibration failed!!"); #endif /* ADAS 通道初始化 */ - if ((DataBase::algorithm_type & 0x1) == 1) - { - adas_video_device.set(0, DataBase::adas_video_input_source); - } + if ((HxDataBase::algorithm_type & 0x1) == 1) + adas_video_device.set(0, HxDataBase::adas_video_input_source); /* BSD 通道初始化 */ - if (((DataBase::algorithm_type >> 1) & 0x1) == 1) + if (((HxDataBase::algorithm_type >> 1) & 0x1) == 1) { /* BSD-前 */ - bsd_video_device[0].set(6, DataBase::bsd_video_input_source[0], DataBase::get_bsd_warn_region(0)); + bsd_video_device[0].set(6, HxDataBase::bsd_video_input_source[0], HxDataBase::get_bsd_warn_region(0)); /* BSD-后 */ - bsd_video_device[1].set(7, DataBase::bsd_video_input_source[1], DataBase::get_bsd_warn_region(1)); + bsd_video_device[1].set(7, HxDataBase::bsd_video_input_source[1], HxDataBase::get_bsd_warn_region(1)); /* BSD-左前 */ - bsd_video_device[2].set(4, DataBase::bsd_video_input_source[2], DataBase::get_bsd_warn_region(2)); + bsd_video_device[2].set(4, HxDataBase::bsd_video_input_source[2], HxDataBase::get_bsd_warn_region(2)); /* BSD-右前 */ - bsd_video_device[3].set(1, DataBase::bsd_video_input_source[3], DataBase::get_bsd_warn_region(3)); + bsd_video_device[3].set(1, HxDataBase::bsd_video_input_source[3], HxDataBase::get_bsd_warn_region(3)); /* BSD-左后 */ - bsd_video_device[4].set(5, DataBase::bsd_video_input_source[4], DataBase::get_bsd_warn_region(4)); + bsd_video_device[4].set(5, HxDataBase::bsd_video_input_source[4], HxDataBase::get_bsd_warn_region(4)); /* BSD-右后 */ - bsd_video_device[5].set(3, DataBase::bsd_video_input_source[5], DataBase::get_bsd_warn_region(5)); + bsd_video_device[5].set(3, HxDataBase::bsd_video_input_source[5], HxDataBase::get_bsd_warn_region(5)); } /* DSM 通道初始化 */ - if (((DataBase::algorithm_type >> 2) & 0x1) == 1) - { - dsm_video_device.set(2, DataBase::dsm_video_input_source); - } + if (((HxDataBase::algorithm_type >> 2) & 0x1) == 1) + dsm_video_device.set(2, HxDataBase::dsm_video_input_source); dispatcher->start(); + +#ifdef USE_RABBITMQ + HxRabbitMQ.set(HxDataBase::qamqp_address, HxDataBase::qamqp_username, HxDataBase::qamqp_password); + HxRabbitMQ.set_exchanger_name("vehicle.direct.exchange"); + HxRabbitMQ.set_queue_name("bsd_video_transcode_tag"); + HxRabbitMQ.set_routing_key("bsd_video_transcode_tag_1"); +#endif } -void TaskDispatch::listern(uint16_t port) +void HxTaskDispatch::listern(uint16_t port) { dispatcher->debug_tool = new HxSocketUtils(port); - connect(dispatcher->debug_tool, &HxSocketUtils::data_receive_event, dispatcher, &TaskDispatch::data_receive_event); - connect(dispatcher, &TaskDispatch::data_write_event, dispatcher->debug_tool, &HxSocketUtils::write); + connect(dispatcher->debug_tool, &HxSocketUtils::data_receive_event, dispatcher, &HxTaskDispatch::data_receive_event); + connect(dispatcher, &HxTaskDispatch::data_write_event, dispatcher->debug_tool, &HxSocketUtils::write); } -void TaskDispatch::connect_to_host(QString address, int port) +void HxTaskDispatch::connect_to_host(QString address, int port) { dispatcher->platform = new HxSocketUtils(address, port); - connect(dispatcher->platform, &HxSocketUtils::data_receive_event, dispatcher, &TaskDispatch::data_receive_event); - connect(dispatcher, &TaskDispatch::data_write_event, dispatcher->platform, &HxSocketUtils::write); + connect(dispatcher->platform, &HxSocketUtils::data_receive_event, dispatcher, &HxTaskDispatch::data_receive_event); + connect(dispatcher, &HxTaskDispatch::data_write_event, dispatcher->platform, &HxSocketUtils::write); } -void TaskDispatch::algorithm_alarm_event(int channel, int level, int event_type, int detect_type, int left, int top, int right, int bottom, int distance, int speed, QString base64_string, QString filepath) +void HxTaskDispatch::algorithm_alarm_event(QDateTime time, int channel, int level, int event_type, int detect_type, int left, int top, int right, int bottom, int distance, int speed, QString base64_string, QString filepath) { - QJsonObject root({{"type", 4}}); + Q_UNUSED(speed); - QJsonObject msgInfo({{"channel", channel}, + QJsonObject root({ {"type", 4} }); + + QJsonObject msgInfo({ {"time", time.toString("yyyy-MM-dd HH:mm:ss")}, + {"channel", channel}, {"level", level}, {"event_type", event_type}, {"detect_type", detect_type}, @@ -123,20 +149,22 @@ void TaskDispatch::algorithm_alarm_event(int channel, int level, int event_type, {"right", right}, {"bottom", bottom}, {"distance", distance}, - {"speed", speed}, + {"speed", dispatcher->car_info.fVelocity}, {"image", base64_string}, - {"filepath", filepath}}); + {"filepath", filepath} }); root.insert("msgInfo", msgInfo); emit dispatcher->data_write_event(QJsonDocument(root).toJson(QJsonDocument::Compact)); + HxLog::append("algorithm", QString("alarm type=0x%1, filepath=%2").arg(QString::number(event_type, 16), filepath)); + // dispatcher->send_can_data(channel, pObjectTrackEventResult->nDangerLevel, pObjectTrackEventResult->objInfo[i].nDetectType); } -CarInfoInput *TaskDispatch::get_car_info(void) { return &dispatcher->car_info; } +CarInfoInput* HxTaskDispatch::get_car_info(void) { return &dispatcher->car_info; } -QString TaskDispatch::get_video_frame_data(int type, int channel, int id) +QString HxTaskDispatch::get_video_frame_data(int type, int channel, int id) { Q_UNUSED(channel); @@ -153,7 +181,22 @@ QString TaskDispatch::get_video_frame_data(int type, int channel, int id) return ""; } -QString TaskDispatch::build_alarm_image(int type, int channel, int frame_id) +bool HxTaskDispatch::get_alarm_detection_timestamp(int type, int channel) +{ + switch (type) + { + case 0: + return adas_video_device.get_alarm_detection_timestamp(); + case 1: + return bsd_video_device[channel].get_alarm_detection_timestamp(); + case 2: + return dsm_video_device.get_alarm_detection_timestamp(); + } + + return false; +} + +QString HxTaskDispatch::build_alarm_image(int type, int channel, int frame_id) { switch (type) { @@ -168,7 +211,7 @@ QString TaskDispatch::build_alarm_image(int type, int channel, int frame_id) return ""; } -QString TaskDispatch::build_alarm_video(int type, int channel, int frame_id) +QString HxTaskDispatch::build_alarm_video(int type, int channel, int frame_id) { switch (type) { @@ -183,17 +226,24 @@ QString TaskDispatch::build_alarm_video(int type, int channel, int frame_id) return ""; } -void TaskDispatch::update_heartbeat() +void HxTaskDispatch::enqueue_upload_file(QString filename) +{ + upload_file_mutex.lock(); + upload_file_queue.enqueue(filename); + upload_file_mutex.unlock(); +} + +void HxTaskDispatch::update_heartbeat() { if (QDateTime::currentDateTime() > heartbeat_timestamp.addSecs(30)) { heartbeat_timestamp = QDateTime::currentDateTime(); - emit data_write_event(QJsonDocument(QJsonObject({{"type", 0}})).toJson(QJsonDocument::Compact)); + emit data_write_event(QJsonDocument(QJsonObject({ {"type", 0} })).toJson(QJsonDocument::Compact)); } } -void TaskDispatch::updata_vehiclue_status(QJsonObject object) +void HxTaskDispatch::updata_vehiclue_status(QJsonObject object) { vehicle_status_update_time = QDateTime::currentDateTime(); @@ -207,9 +257,11 @@ void TaskDispatch::updata_vehiclue_status(QJsonObject object) car_info.fSteeingWheelAngle = object.value("seeing_wheel_angle").toDouble(); reversing_light = object.value("reversing_light").toInt(); + + HxLog::append("vehiclue status", QString(QJsonDocument(object).toJson(QJsonDocument::Compact))); } -void TaskDispatch::parsing_vehiclue_status(void) +void HxTaskDispatch::parsing_vehiclue_status(void) { if (dispatcher->vehicle_status_update_time.secsTo(QDateTime::currentDateTime()) >= 10) car_info.fVelocity = 0; @@ -219,19 +271,19 @@ void TaskDispatch::parsing_vehiclue_status(void) auto _detect_channel = 0; /* ADAS 通道初始化 */ - if ((DataBase::algorithm_type & 0x1) == 1) + if ((HxDataBase::algorithm_type & 0x1) == 1) { _detect_channel |= ADAS_DETECT_CHANNEL; } /* DSM 通道初始化 */ - if (((DataBase::algorithm_type >> 2) & 0x1) == 1) + if (((HxDataBase::algorithm_type >> 2) & 0x1) == 1) { _detect_channel |= DMS_DETECT_CHANNEL; } /* BSD 类型 */ - else if (((DataBase::algorithm_type >> 1) & 0x1) == 1) + else if (((HxDataBase::algorithm_type >> 1) & 0x1) == 1) { auto status = 0; @@ -254,7 +306,7 @@ void TaskDispatch::parsing_vehiclue_status(void) /* 车辆状态发生改变 */ if (status != 0 && vehicle_status != status) { - qDebug() << "车辆状态发生改变 " << vehicle_status << " => " << status; + HxLog::append("vehicle status", QString("vehicle status change, %1=>%2").arg(vehicle_status).arg(status)); vehicle_status = status; @@ -275,7 +327,7 @@ void TaskDispatch::parsing_vehiclue_status(void) _detect_channel |= (FRONT_BSD_DETECT_CHANNEL | LEFT_BSD_FRONT_DETECT_CHANNEL | RIGHT_BSD_FRONT_DETECT_CHANNEL); break; - /* 左转弯, 检测通道: C D E */ + /* 左转弯, 检测通道: C D E */ case 2: /* 允许送帧 */ bsd_video_device[2].set(true); @@ -286,7 +338,7 @@ void TaskDispatch::parsing_vehiclue_status(void) _detect_channel |= (LEFT_BSD_FRONT_DETECT_CHANNEL | RIGHT_BSD_FRONT_DETECT_CHANNEL | LEFT_BSD_REAR_DETECT_CHANNEL); break; - /* 右转弯, 检测通道: C D F */ + /* 右转弯, 检测通道: C D F */ case 3: /* 允许送帧 */ bsd_video_device[2].set(true); @@ -297,7 +349,7 @@ void TaskDispatch::parsing_vehiclue_status(void) _detect_channel |= (LEFT_BSD_FRONT_DETECT_CHANNEL | RIGHT_BSD_FRONT_DETECT_CHANNEL | RIGHT_BSD_REAR_DETECT_CHANNEL); break; - /* 倒车, 检测通道: B C D */ + /* 倒车, 检测通道: B C D */ case 4: /* 允许送帧 */ bsd_video_device[1].set(true); @@ -318,13 +370,85 @@ void TaskDispatch::parsing_vehiclue_status(void) #if USE_ALGORITHM MvSetDetectChannel(detect_channel); -#endif +#endif + HxLog::append("algorithm", QString("starting detect channel=0x%1").arg(QString::number(detect_channel, 16))); } } } -void TaskDispatch::run() +void HxTaskDispatch::recording_upload_task(void) { + QString command; + + while(true) + { + if (!upload_file_queue.isEmpty()) + { + upload_file_mutex.lock(); + auto filename = upload_file_queue.dequeue(); + upload_file_mutex.unlock(); + + if(!QFile::exists(filename)) + { + HxLog::append("recording upload task", QString("file=%1 not exists, upload failed").arg(filename)); + + continue; + } + + QString path = QString("%1/%2/alarm").arg(QDateTime::currentDateTime().toString("yyyyMMdd"), HxDataBase::device_id); + + while (true) + { + /* FTP 上传 */ + HxProcess::execute(QString("curl -u %1:%2 ftp://%3/%4/ --ftp-create-dirs -T %5").arg(HxDataBase::ftp_username, HxDataBase::ftp_password, HxDataBase::ftp_address, path, filename)); + + command = QString("curl -u %1:%2 --ftp-ssl --head ftp://%3/%4/%5").arg(HxDataBase::ftp_username, HxDataBase::ftp_password, HxDataBase::ftp_address, path, filename); + + /* 判断FTP文件是否存在 */ + auto res = HxProcess::start(command); + + QRegExp rx("Content-Length:\\s\\d{1,9}"); + + if (rx.indexIn(res, 0) == -1) + continue; + + QFileInfo info(filename); + + auto size1 = info.size(); + auto size2 = rx.cap(0).replace("Content-Length:", "").toInt(); + + if (size1 == size2) + { + HxLog::append("recording upload task", QString("%1 upload finish").arg(filename)); + + qDebug() << info.suffix(); + if(info.suffix() == "mp4") + { +#ifdef USE_RABBITMQ + emit HxRabbitMQ.publish(QString("{\"ftproot\": \"%1\", \"complate\": true}").arg(("/"+path+"/"+filename))); +#endif + } + + break; + } + + msleep(100); + } + + QFile::remove(filename); + + HxLog::append("recording upload task", QString("%1 delete").arg(filename)); + } + + msleep(1000); + } +} + +void HxTaskDispatch::run() +{ + /* 启动 录像上传任务 */ + QtConcurrent::run(this, &HxTaskDispatch::recording_upload_task); + while (true) { QCoreApplication::processEvents(); @@ -335,11 +459,11 @@ void TaskDispatch::run() /* 分析车辆行驶状态 */ parsing_vehiclue_status(); - QThread::msleep(10); + QThread::msleep(1000); } } -void TaskDispatch::debug_tool_response_event(int type, std::initializer_list> args) +void HxTaskDispatch::debug_tool_response_event(int type, std::initializer_list> args) { QJsonObject root, msginfo; @@ -352,7 +476,137 @@ void TaskDispatch::debug_tool_response_event(int type, std::initializer_list= 17 && i <= 20) ? 1 : 100))); + normal_warn_score_threshold.append((int)(HxDataBase::warm_param_config.fNormalWarnScoreThreshold[i] * ((i >= 17 && i <= 20) ? 1 : 100))); + + qDebug() << "enable=" << HxDataBase::warm_param_config.bStartEventWarnKind[i] + << "nAbnormalWarnFrameCount=" << HxDataBase::warm_param_config.nAbnormalWarnFrameCount[i] + << "nNormalFrameCount=" << HxDataBase::warm_param_config.nNormalFrameCount[i] + << "nAbnormalWarnIntervalFrameCount" << HxDataBase::warm_param_config.nAbnormalWarnIntervalFrameCount[i] + << "fAbnormalWarnScoreThreshold=" << HxDataBase::warm_param_config.fAbnormalWarnScoreThreshold[i] + << "fNormalWarnScoreThreshold=" << HxDataBase::warm_param_config.fNormalWarnScoreThreshold[i]; + } + + debug_tool_response_event(type, { {"start_event_warn_kind", start_event_warn_kind}, + {"abnormal_warn_frame_count", abnormal_warn_frame_count}, + {"normal_frame_count", normal_frame_count}, + {"abnormal_warn_interval_frame_count", abnormal_warn_interval_frame_count}, + {"abnormal_warn_score_threshold", abnormal_warn_score_threshold}, + {"normal_warn_score_threshold", normal_warn_score_threshold}, + {"hmw_time", HxDataBase::warm_param_config.nHmwTime}, + {"pcw_time", HxDataBase::warm_param_config.nPcwTime}, + {"fcw_time", HxDataBase::warm_param_config.nFcwTime}, + {"hmw_vel", HxDataBase::warm_param_config.fHmwVel}, + {"fcw_vel", HxDataBase::warm_param_config.fFcwVel}, + {"ldw_vel", HxDataBase::warm_param_config.fLdwVel}, + {"pcw_vel", HxDataBase::warm_param_config.fPcwVel}, + {"bsd_first_vel", HxDataBase::warm_param_config.fBsdFirstVel}, + {"bsd_second_vel", HxDataBase::warm_param_config.fBsdSecondVel}, + {"bsd_third_vel", HxDataBase::warm_param_config.fBsdThirdVel}, + {"ldw_distance", HxDataBase::warm_param_config.nLdwDistance}, + {"dsm_vel", HxDataBase::warm_param_config.fDsmVel} }); +} + +void HxTaskDispatch::set_warn_param_config(int type, QJsonObject object) +{ + QJsonArray start_event_warn_kind = object.value("start_event_warn_kind").toArray(); + QJsonArray abnormal_warn_frame_count = object.value("abnormal_warn_frame_count").toArray(); + QJsonArray normal_frame_count = object.value("normal_frame_count").toArray(); + QJsonArray abnormal_warn_interval_frame_count = object.value("abnormal_warn_interval_frame_count").toArray(); + QJsonArray abnormal_warn_score_threshold = object.value("abnormal_warn_score_threshold").toArray(); + QJsonArray normal_warn_score_threshold = object.value("normal_warn_score_threshold").toArray(); + + for (int i = 0; i < EVENT_WARN_NUM; i++) + { + HxDataBase::warm_param_config.bStartEventWarnKind[i] = start_event_warn_kind.at(i).toBool(); + HxDataBase::warm_param_config.nAbnormalWarnFrameCount[i] = abnormal_warn_frame_count.at(i).toInt() * 25; + HxDataBase::warm_param_config.nNormalFrameCount[i] = normal_frame_count.at(i).toInt() * 25; + HxDataBase::warm_param_config.nAbnormalWarnIntervalFrameCount[i] = abnormal_warn_interval_frame_count.at(i).toInt() * 25; + HxDataBase::warm_param_config.fAbnormalWarnScoreThreshold[i] = abnormal_warn_score_threshold.at(i).toDouble() / ((i >= 17 && i <= 20) ? 1 : 100); + HxDataBase::warm_param_config.fNormalWarnScoreThreshold[i] = normal_warn_score_threshold.at(i).toDouble() / ((i >= 17 && i <= 20) ? 1 : 100); + } + + HxDataBase::warm_param_config.nHmwTime = object.value("hmw_time").toInt(); + HxDataBase::warm_param_config.nPcwTime = object.value("pcw_time").toInt(); + HxDataBase::warm_param_config.nFcwTime = object.value("fcw_time").toInt(); + HxDataBase::warm_param_config.fHmwVel = object.value("hmw_vel").toDouble(); + HxDataBase::warm_param_config.fFcwVel = object.value("fcw_vel").toDouble(); + HxDataBase::warm_param_config.fLdwVel = object.value("ldw_vel").toDouble(); + HxDataBase::warm_param_config.fPcwVel = object.value("pcw_vel").toDouble(); + HxDataBase::warm_param_config.fBsdFirstVel = object.value("bsd_first_vel").toDouble(); + HxDataBase::warm_param_config.fBsdSecondVel = object.value("bsd_second_vel").toDouble(); + HxDataBase::warm_param_config.fBsdThirdVel = object.value("bsd_third_vel").toDouble(); + HxDataBase::warm_param_config.nLdwDistance = object.value("ldw_distance").toInt(); + HxDataBase::warm_param_config.fDsmVel = object.value("dsm_vel").toDouble(); + +#if USE_ALGORITHM + if(MvSetEventWarnParamConfig(&HxDataBase::warm_param_config) != 0) + { + debug_tool_response_event(type, { {"status", false} }); + return; + } +#endif + + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); +} + +void HxTaskDispatch::get_adas_camera_calibration(int type) +{ +#if USE_ALGORITHM + if(MvGetCameraCalibrationInfo(&HxDataBase::adas_camera_calibration) != 0) + return; +#endif + + debug_tool_response_event(type, { {"car_len", HxDataBase::adas_camera_calibration.fCarLen}, + {"car_width", HxDataBase::adas_camera_calibration.fCarWidth}, + {"ref_center", HxDataBase::adas_camera_calibration.fRefCenter}, + {"ref_top", HxDataBase::adas_camera_calibration.fRefTop}, + {"dis_len_tyre", HxDataBase::adas_camera_calibration.fDisLen2Tyre}, + {"camera_height", HxDataBase::adas_camera_calibration.fCameraHeight}, + {"camera_focus", HxDataBase::adas_camera_calibration.fCameraFocus}, + {"camera_dx", HxDataBase::adas_camera_calibration.fCameraDx}, + {"pitch", HxDataBase::adas_camera_calibration.fPitch}, + {"yaw", HxDataBase::adas_camera_calibration.fYaw} }); +} +void HxTaskDispatch::set_adas_camera_calibration(int type, QJsonObject object) +{ + HxDataBase::adas_camera_calibration.fCarLen = object.value("car_len").toInt(); + HxDataBase::adas_camera_calibration.fCarWidth = object.value("car_width").toInt(); + HxDataBase::adas_camera_calibration.fRefCenter = object.value("ref_center").toInt(); + HxDataBase::adas_camera_calibration.fRefTop = object.value("ref_top").toDouble(); + HxDataBase::adas_camera_calibration.fDisLen2Tyre = object.value("dis_len_tyre").toDouble(); + HxDataBase::adas_camera_calibration.fCameraHeight = object.value("camera_height").toDouble(); + HxDataBase::adas_camera_calibration.fCameraFocus = object.value("camera_focus").toDouble(); + HxDataBase::adas_camera_calibration.fCameraDx = object.value("camera_dx").toDouble(); + HxDataBase::adas_camera_calibration.fPitch = object.value("pitch").toDouble(); + HxDataBase::adas_camera_calibration.fYaw = object.value("yaw").toDouble(); + +#if USE_ALGORITHM + if(MvCameraCalibration(&HxDataBase::adas_camera_calibration) != 0) + { + debug_tool_response_event(type, { {"status", false} }); + return; + } +#endif + + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); +} + +void HxTaskDispatch::data_receive_event(QByteArray data) { int type = -1; @@ -371,96 +625,143 @@ void TaskDispatch::data_receive_event(QByteArray data) case 0: break; - /* 车辆状态 */ + /* 车辆状态 */ case 3: updata_vehiclue_status(msginfo); break; - /* 获取算法类型 */ - case 0xF0: - debug_tool_response_event(type, {{"mode", DataBase::algorithm_type}}); + /* 校时 */ + case 5: + HxProcess::start(QString("date -s %1").arg(msginfo.value("date").toString())); + HxProcess::start(QString("date -s %1").arg(msginfo.value("time").toString())); + debug_tool_response_event(type, { {"status", true} }); + + HxLog::append("timing", QString(QJsonDocument(msginfo).toJson(QJsonDocument::Compact))); break; - /* 设置算法类型 */ - case 0xF1: - DataBase::algorithm_type = msginfo.value("mode").toInt(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 重启 */ + case 200: + debug_tool_response_event(type, { {"status", true} }); + HxProcess::start("systemctl restart app.service"); break; - /* 获取ADAS视频输入源 */ - case 0xF2: - debug_tool_response_event(type, {{"source", DataBase::adas_video_input_source}}); + /* 获取算法类型 */ + case 240: + debug_tool_response_event(type, { {"mode", HxDataBase::algorithm_type} }); break; - /* 设置ADAS视频输入源 */ - case 0xF3: - DataBase::adas_video_input_source = msginfo.value("source").toString(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 设置算法类型 */ + case 241: + HxDataBase::algorithm_type = msginfo.value("mode").toInt(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); break; - /* 抓拍 */ - case 0xF4: - debug_tool_response_event(type, {{"data", adas_video_device.snap()}}); + /* 获取ADAS视频输入源 */ + case 242: + debug_tool_response_event(type, { {"source", HxDataBase::adas_video_input_source} }); break; - /* 获取BSD视频输入源 */ - case 0xF5: - debug_tool_response_event(type, {{"source", DataBase::bsd_video_input_source[msginfo.value("channel").toInt()]}}); + /* 设置ADAS视频输入源 */ + case 243: + HxDataBase::adas_video_input_source = msginfo.value("source").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); break; - /* 设置BSD视频输入源 */ - case 0xF6: - DataBase::bsd_video_input_source[msginfo.value("channel").toInt()] = msginfo.value("source").toString(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 抓拍 */ + case 244: + debug_tool_response_event(type, { {"data", adas_video_device.snap()} }); break; - /* 抓拍 */ - case 0xF7: - debug_tool_response_event(type, {{"data", bsd_video_device[msginfo.value("channel").toInt()].snap()}}); + /* 获取BSD视频输入源 */ + case 245: + debug_tool_response_event(type, { {"source", HxDataBase::bsd_video_input_source[msginfo.value("channel").toInt()]} }); break; - /* 获取Dsm视频输入源 */ - case 0xF8: - debug_tool_response_event(type, {{"source", DataBase::dsm_video_input_source}}); + /* 设置BSD视频输入源 */ + case 246: + HxDataBase::bsd_video_input_source[msginfo.value("channel").toInt()] = msginfo.value("source").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); break; - /* 设置Dsm视频输入源 */ - case 0xF9: - DataBase::dsm_video_input_source = msginfo.value("source").toString(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 抓拍 */ + case 247: + debug_tool_response_event(type, { {"data", bsd_video_device[msginfo.value("channel").toInt()].snap()} }); break; - /* 抓拍 */ - case 0xFA: - debug_tool_response_event(type, {{"data", dsm_video_device.snap()}}); + /* 获取Dsm视频输入源 */ + case 248: + debug_tool_response_event(type, { {"source", HxDataBase::dsm_video_input_source} }); break; - /* 获取BSD报警区域 */ - case 0xFB: - debug_tool_response_event(type, {{"data", DataBase::bsd_warn_regions[msginfo.value("channel").toInt()]}}); + /* 设置Dsm视频输入源 */ + case 249: + HxDataBase::dsm_video_input_source = msginfo.value("source").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); break; - /* 设置BSD报警区域 */ - case 0xFC: - DataBase::bsd_warn_regions[msginfo.value("channel").toInt()] = msginfo.value("data").toString(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 抓拍 */ + case 250: + debug_tool_response_event(type, { {"data", dsm_video_device.snap()} }); break; - /* 获取设备编号及FTP信息 */ - case 0xFD: - debug_tool_response_event(type, {{"device_id", DataBase::device_id}, - {"ftp_address", DataBase::ftp_address}, - {"ftp_username", DataBase::ftp_username}, - {"ftp_password", DataBase::ftp_password}}); + /* 获取BSD报警区域 */ + case 251: + debug_tool_response_event(type, { {"data", HxDataBase::bsd_warn_regions[msginfo.value("channel").toInt()]} }); break; - /* 设置设备编号及FTP信息 */ - case 0xFE: - DataBase::device_id = msginfo.value("device_id").toString(); - DataBase::ftp_address = msginfo.value("ftp_address").toString(); - DataBase::ftp_username = msginfo.value("ftp_username").toString(); - DataBase::ftp_password = msginfo.value("ftp_password").toString(); - debug_tool_response_event(type, {{"status", DataBase::save_setting()}}); + /* 设置BSD报警区域 */ + case 252: + HxDataBase::bsd_warn_regions[msginfo.value("channel").toInt()] = msginfo.value("data").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); + break; + + /* 获取设备编号及FTP信息 */ + case 253: + debug_tool_response_event(type, { {"device_id", HxDataBase::device_id}, + {"ftp_address", HxDataBase::ftp_address}, + {"ftp_username", HxDataBase::ftp_username}, + {"ftp_password", HxDataBase::ftp_password}, }); + break; + + /* 设置设备编号及FTP信息 */ + case 254: + HxDataBase::device_id = msginfo.value("device_id").toString(); + HxDataBase::ftp_address = msginfo.value("ftp_address").toString(); + HxDataBase::ftp_username = msginfo.value("ftp_username").toString(); + HxDataBase::ftp_password = msginfo.value("ftp_password").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); + break; + + + case 255: + get_warn_param_config(type); + break; + + case 256: + set_warn_param_config(type, msginfo); + break; + + case 257: + get_adas_camera_calibration(type); + break; + + case 258: + set_adas_camera_calibration(type, msginfo); + break; + + /* 获取 RabbitMQ 信息 */ + case 259: + debug_tool_response_event(type, { {"qamqp_address", HxDataBase::qamqp_address}, + {"qamqp_username", HxDataBase::qamqp_username}, + {"qamqp_password", HxDataBase::qamqp_password} }); + break; + + /* 设置 RabbitMQ 信息 */ + case 260: + HxDataBase::qamqp_address = msginfo.value("qamqp_address").toString(); + HxDataBase::qamqp_username = msginfo.value("qamqp_username").toString(); + HxDataBase::qamqp_password = msginfo.value("qamqp_password").toString(); + debug_tool_response_event(type, { {"status", HxDataBase::save_setting()} }); break; case 0xFFFF: diff --git a/app/HxTaskDispatch.h b/app/HxTaskDispatch.h index b00ce84..ae022ea 100644 --- a/app/HxTaskDispatch.h +++ b/app/HxTaskDispatch.h @@ -11,7 +11,7 @@ #define ALGORITHM_TYPE_BSD 1 #define ALGORITHM_TYPE_DSM 2 -class TaskDispatch : public QThread +class HxTaskDispatch : public QThread { Q_OBJECT public: @@ -32,20 +32,26 @@ public: */ static void connect_to_host(QString address, int port); - static void algorithm_alarm_event(int channel, int level, int event_type, int detect_type, int left, int top, int right, int bottom, int distance, int speed, QString base64_string, QString filepath); - - static DataBase database(void); + static void algorithm_alarm_event(QDateTime time, int channel, int level, int event_type, int detect_type, int left, int top, int right, int bottom, int distance, int speed, QString base64_string, QString filepath); static CarInfoInput* get_car_info(void); static QString get_video_frame_data(int type, int channel, int id); + /** + * @brief 获取报警检测时间 + * @param type + * @param channel + * @return + */ + static bool get_alarm_detection_timestamp(int type, int channel); + /** * @brief 生成报警图片 * @param type 报警类型 * @param channel 视频通道 * @param frame_id 视频帧编号 - * @return 返回 Base64 字符串 + * @return 返回 图片路径 */ static QString build_alarm_image(int type, int channel, int frame_id); @@ -54,17 +60,30 @@ public: * @param type 报警类型 * @param channel 视频通道 * @param frame_id 视频帧编号 + * @return 返回 视频路径 */ static QString build_alarm_video(int type, int channel, int frame_id); + /** + * @brief enqueue_upload_file + * @param filename + */ + static void enqueue_upload_file(QString filename); + protected: void run() override; private: - void update_heartbeat(); + void update_heartbeat(void); void updata_vehiclue_status(QJsonObject object); void parsing_vehiclue_status(void); + void recording_upload_task(void); + void upload_file_queue_check(void); void debug_tool_response_event(int type, std::initializer_list> args); + void get_warn_param_config(int type); + void set_warn_param_config(int type, QJsonObject object); + void get_adas_camera_calibration(int type); + void set_adas_camera_calibration(int type, QJsonObject object); signals: void data_write_event(QByteArray data); @@ -90,9 +109,6 @@ private: /* 车辆状态信息 */ CarInfoInput car_info; - - /* 倒车灯;1:亮;0:熄灭 */ - int reversing_light = 0; }; #endif // HXTASKDISPATCH_H diff --git a/app/HxUtils.h b/app/HxUtils.h index 988339b..f2c8fa6 100644 --- a/app/HxUtils.h +++ b/app/HxUtils.h @@ -8,6 +8,15 @@ #include #include #include +#include +#include +#include + +#ifdef USE_RABBITMQ +#include "qamqpclient.h" +#include "qamqpexchange.h" +#include "qamqpqueue.h" +#endif /** * @brief SocketUtils socket 工具类 @@ -80,14 +89,8 @@ public slots: void disconnected() { - qDebug("socket disconnect"); - if (is_reconnect) - { - qDebug("socket will be reconnected... "); - emit reconnection_event(); - } } /** @@ -97,29 +100,21 @@ public slots: { /* 取消已有的连接 */ if (socket != nullptr) - { socket->disconnectFromHost(); - qDebug("socket release"); - } - - qDebug("socket connecting......"); /* 连接服务器 */ socket->connectToHost(address, port); /* 等待连接 */ - if (socket->waitForConnected(500)) + if (!socket->waitForConnected(500)) { - qDebug("socket connect success"); - } - else - { - qDebug("socket connect failed"); - /* 使用 QThread::msleep 延时,会使 Socket 出现接收不到事件信息 (槽无法响应) */ auto time = QTime::currentTime().addMSecs(10000); while (QTime::currentTime() < time) + { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); + QThread::msleep(100); + } emit reconnection_event(); } @@ -130,17 +125,56 @@ private: QString address; bool is_reconnect = false; QTcpServer server; - QTcpSocket* socket = nullptr; + QTcpSocket *socket = nullptr; }; -class HxProcessUtils +class HxDir +{ +public: + static bool mkdir(QString name) + { + QDir dir; + return dir.mkpath(name); + } +}; + +class HxLog +{ +public: + static void append(QString title, QString message) + { + static QMutex mutex; + + mutex.lock(); + + auto current_time = QDateTime::currentDateTime(); + + HxDir::mkdir(QString("log/%1").arg(current_time.toString("yyyyMMdd"))); + + QFile file(QString("log/%1/%1.txt").arg(current_time.toString("yyyyMMdd"))); + + if (file.open(QIODevice::WriteOnly | QIODevice::Append)) + { + auto data = QString("[%1] | [%2] | %3\r\n").arg(current_time.toString("yyyy-MM-dd HH:mm:ss"), title, message); + + file.write(data.toLocal8Bit()); + + file.close(); + + qDebug() << data; + } + + mutex.unlock(); + } +}; + +class HxProcess { public: - /** - * - */ static int execute(QString command) { + qDebug() << command; + auto array = command.split(" "); QString program = array.at(0); @@ -150,6 +184,75 @@ public: return QProcess::execute(program, arguments); } + + static QString start(QString command) + { + auto array = command.split(" "); + + QString program = array.at(0); + QStringList arguments; + for (int i = 1; i < array.count(); i++) + arguments << array.at(i); + + QProcess process; + process.setProcessChannelMode(QProcess::MergedChannels); + process.start(program, arguments); + process.waitForFinished(); + return QString(process.readAll()); + } }; +#ifdef USE_RABBITMQ +class HxRabbitMQUtils : public QObject +{ + Q_OBJECT +public: + void set(QString host, QString username, QString password) + { + auto hosts = host.split(":"); + + client.setHost(hosts.at(0)); + client.setPort(hosts.size() == 2 ? hosts.at(1).toInt() : 5672); + client.setUsername(username); + client.setPassword(password); + client.setVirtualHost("/"); + client.setAutoReconnect(true, 10); + + connect(&client, SIGNAL(connected()), this, SLOT(connected())); + connect(&client, SIGNAL(disconnected()), this, SLOT(disconnected())); + + connect(this, &HxRabbitMQUtils::publish, this, &HxRabbitMQUtils::send_message); + + client.connectToHost(); + } + + void set_exchanger_name(QString exchanger_name) { this->exchanger_name = exchanger_name; } + + void set_queue_name(QString queue_name) { this->queue_name = queue_name; } + + void set_routing_key(QString routing_key) { this->routing_key = routing_key; } + +private: + void send_message(QString message) + { + QAmqpExchange *exchange = client.createExchange(exchanger_name); + + exchange->publish(message, routing_key); + + HxLog::append("RabbitMQ", QString("Key:%1 message:%2").arg(routing_key, message)); + } + +signals: + void publish(QString message); + +public slots: + void connected() { HxLog::append("RabbitMQ", "connect success"); } + + void disconnected() { HxLog::append("RabbitMQ", "disconnect"); } + +private: + QAmqpClient client; + QString exchanger_name, queue_name, routing_key; +}; +#endif #endif // HXUTILS_H diff --git a/app/HxVideoDevice.cpp b/app/HxVideoDevice.cpp index 908b870..bd8dc5c 100644 --- a/app/HxVideoDevice.cpp +++ b/app/HxVideoDevice.cpp @@ -1,46 +1,55 @@ #include "HxVideoDevice.h" /* bsd算法结果处理函数 */ -void algorithm_alarm_callback(int nDataChannel, ObjectTrackEventResult* pObjectTrackEventResult, void* pPrivData) +void algorithm_alarm_callback(int nDataChannel, ObjectTrackEventResult *pObjectTrackEventResult, void *pPrivData) { Q_UNUSED(nDataChannel); Q_UNUSED(pPrivData); + QDateTime current_time = QDateTime::currentDateTime(); + if (pObjectTrackEventResult->nEventType == 0) return; if (nDataChannel == 0) /* ADAS */ { - printf("ProcessAdasAlgResult nDataChannel=%d,nFrameId=%d,nObjectNumber=%d,nEventType=%x\n", nDataChannel, pObjectTrackEventResult->nFrameId, pObjectTrackEventResult->nObjectNumber, pObjectTrackEventResult->nEventType); + if (!HxTaskDispatch::get_alarm_detection_timestamp(ALGORITHM_TYPE_ADAS, 0)) + return; + + qDebug() << current_time.toString("[yyyy-MM-dd HH:mm:ss] ") << " Adas FrameId=" << pObjectTrackEventResult->nFrameId << " nEventType=" << pObjectTrackEventResult->nEventType; + /* 生成报警图片 */ - auto base64_string = TaskDispatch::build_alarm_image(ALGORITHM_TYPE_ADAS, 0, pObjectTrackEventResult->nFrameId); + auto image_path = HxTaskDispatch::build_alarm_image(ALGORITHM_TYPE_ADAS, 0, pObjectTrackEventResult->nFrameId); /* 生成报警视频 */ - auto filename = TaskDispatch::build_alarm_video(ALGORITHM_TYPE_ADAS, 0, pObjectTrackEventResult->nFrameId); + auto record_path = HxTaskDispatch::build_alarm_video(ALGORITHM_TYPE_ADAS, 0, pObjectTrackEventResult->nFrameId); /* 上传 */ - TaskDispatch::algorithm_alarm_event(0, 0, pObjectTrackEventResult->nEventType, 0, 0, 0, 0, 0, 0, 0, base64_string, filename); + HxTaskDispatch::algorithm_alarm_event(current_time, 0, 0, pObjectTrackEventResult->nEventType, 0, 0, 0, 0, 0, 0, 0, image_path, record_path); } else if (nDataChannel == 2) /* DSM */ { - printf("ProcessDsmAlgResult nDataChannel=%d,nFrameId=%d,nObjectNumber=%d,nEventType=%x\n", nDataChannel, pObjectTrackEventResult->nFrameId, pObjectTrackEventResult->nObjectNumber, pObjectTrackEventResult->nEventType); + if (!HxTaskDispatch::get_alarm_detection_timestamp(ALGORITHM_TYPE_DSM, 0)) + return; + + qDebug() << current_time.toString("[yyyy-MM-dd HH:mm:ss] ") << " Dsm FrameId=" << pObjectTrackEventResult->nFrameId << " nEventType=" << pObjectTrackEventResult->nEventType; /* 生成报警图片 */ - auto base64_string = TaskDispatch::build_alarm_image(ALGORITHM_TYPE_DSM, 0, pObjectTrackEventResult->nFrameId); + auto image_path = HxTaskDispatch::build_alarm_image(ALGORITHM_TYPE_DSM, 0, pObjectTrackEventResult->nFrameId); /* 生成报警视频 */ - auto filename = TaskDispatch::build_alarm_video(ALGORITHM_TYPE_DSM, 0, pObjectTrackEventResult->nFrameId); + auto record_path = HxTaskDispatch::build_alarm_video(ALGORITHM_TYPE_DSM, 0, pObjectTrackEventResult->nFrameId); /* 上传 */ - TaskDispatch::algorithm_alarm_event(1, 0, pObjectTrackEventResult->nEventType, 0, 0, 0, 0, 0, 0, 0, base64_string, filename); + HxTaskDispatch::algorithm_alarm_event(current_time, 1, 0, pObjectTrackEventResult->nEventType, 0, 0, 0, 0, 0, 0, 0, image_path, record_path); } else if (nDataChannel == 1 || /* BSD-右前 */ - nDataChannel == 3 || /* BSD-右后 */ - nDataChannel == 4 || /* BSD-左前 */ - nDataChannel == 5 || /* BSD-左后 */ - nDataChannel == 6 || /* BSD-前 */ - nDataChannel == 7) /* BSD-后 */ + nDataChannel == 3 || /* BSD-右后 */ + nDataChannel == 4 || /* BSD-左前 */ + nDataChannel == 5 || /* BSD-左后 */ + nDataChannel == 6 || /* BSD-前 */ + nDataChannel == 7) /* BSD-后 */ { int channel = 0; @@ -66,6 +75,9 @@ void algorithm_alarm_callback(int nDataChannel, ObjectTrackEventResult* pObjectT break; } + if (!HxTaskDispatch::get_alarm_detection_timestamp(ALGORITHM_TYPE_BSD, channel)) + return; + qDebug("ProcessBsdAlgResult nDataChannel=%d,nFrameId=%d,nObjectNumber=%d,nEventType=%x,nDangerLevel=%d\n", nDataChannel, pObjectTrackEventResult->nFrameId, pObjectTrackEventResult->nObjectNumber, pObjectTrackEventResult->nEventType, pObjectTrackEventResult->nDangerLevel); for (int i = 0; i < pObjectTrackEventResult->nObjectNumber; i++) @@ -78,29 +90,46 @@ void algorithm_alarm_callback(int nDataChannel, ObjectTrackEventResult* pObjectT continue; /* 生成报警图片 */ - auto base64_string = TaskDispatch::build_alarm_image(ALGORITHM_TYPE_BSD, channel, pObjectTrackEventResult->nFrameId); + auto image_path = HxTaskDispatch::build_alarm_image(ALGORITHM_TYPE_BSD, channel, pObjectTrackEventResult->nFrameId); /* 生成报警视频 */ - auto filename = TaskDispatch::build_alarm_video(ALGORITHM_TYPE_BSD, channel, pObjectTrackEventResult->nFrameId); + auto record_path = HxTaskDispatch::build_alarm_video(ALGORITHM_TYPE_BSD, channel, pObjectTrackEventResult->nFrameId); /* 上传 */ - TaskDispatch::algorithm_alarm_event(channel, - pObjectTrackEventResult->nDangerLevel, - pObjectTrackEventResult->nEventType, - pObjectTrackEventResult->objInfo[i].nDetectType, - pObjectTrackEventResult->objInfo[i].nLeft, - pObjectTrackEventResult->objInfo[i].nTop, - pObjectTrackEventResult->objInfo[i].nRight, - pObjectTrackEventResult->objInfo[i].nBottom, - pObjectTrackEventResult->objInfo[i].fDist, - pObjectTrackEventResult->objInfo[i].fVelo, - base64_string, - filename); + HxTaskDispatch::algorithm_alarm_event(current_time, channel, + pObjectTrackEventResult->nDangerLevel, + pObjectTrackEventResult->nEventType, + pObjectTrackEventResult->objInfo[i].nDetectType, + pObjectTrackEventResult->objInfo[i].nLeft, + pObjectTrackEventResult->objInfo[i].nTop, + pObjectTrackEventResult->objInfo[i].nRight, + pObjectTrackEventResult->objInfo[i].nBottom, + pObjectTrackEventResult->objInfo[i].fDist, + pObjectTrackEventResult->objInfo[i].fVelo, + image_path, + record_path); } } } -VideoDevice::VideoDevice(void) +// adas算法车道线结果处理函数 +void algorithm_lane_line_callback(DrawPointInfo *pPointInfo, void *pPrivData) +{ + Q_UNUSED(pPrivData); + + for (int i = 0; i < 4; i++) + { + printf("ProcessAdasAlgLaneLineResult pPointInfo->nPointCounters[i]=%d\n", pPointInfo->nPointCounters[i]); + for (unsigned int j = 0; j < pPointInfo->nPointCounters[i]; j++) + { + printf("pSrcPointX=%d,pSrcPointY=%d\n", pPointInfo->pSrcPointX[i][j], pPointInfo->pSrcPointY[i][j]); + } + } + + return; +} + +HxVideoDevice::HxVideoDevice(void) { detect_frame_buffer.u32Width = 1280; detect_frame_buffer.u32Height = 720; @@ -111,7 +140,7 @@ VideoDevice::VideoDevice(void) MvGetFrameBlkInfo(&bgr_frame_buffer); } -void VideoDevice::set(int type, QString address) +void HxVideoDevice::set(int type, QString address) { this->type = type; this->address = address; @@ -119,12 +148,19 @@ void VideoDevice::set(int type, QString address) auto result = MvSetAlgResultFuncCallback(type, algorithm_alarm_callback, nullptr); if (result != 0) return; + + if (type == 1) + { + result = MvSetAlgLaneLineFuncCallback(algorithm_lane_line_callback, nullptr); + if (result != 0) + return; + } #endif start(); } -void VideoDevice::set(int type, QString address, BsdWarnRegion region) +void HxVideoDevice::set(int type, QString address, BsdWarnRegion region) { Q_UNUSED(region); @@ -143,97 +179,59 @@ void VideoDevice::set(int type, QString address, BsdWarnRegion region) start(); } -void VideoDevice::set(bool status) { detection_status = status; } +void HxVideoDevice::set(bool status) { detection_status = status; } -QString VideoDevice::snap() { return snap(video_frame); } +bool HxVideoDevice::get_alarm_detection_timestamp(void) { return alarm_detection_timestamp.secsTo(QDateTime::currentDateTime()) > 10; } -QString VideoDevice::build_image(int id) +QString HxVideoDevice::snap() { return snap(video_frame); } + +QString HxVideoDevice::build_image(int id) { - if (video_frames_string.contains(id)) - return snap(video_frames_string[id]); + auto start_id = id - video_fps * 5, end_id = id + video_fps * 5; - return ""; + alarm_detection_timestamp = QDateTime::currentDateTime(); + + QString filename = QString("%1_%2_%3.jpg").arg(start_id > 0 ? start_id : 0).arg(end_id).arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmsszzz")); + + Mat frame; + record_frames_mutex.lock(); + if (record_frames.contains(id)) + frame = imdecode(record_frames[id], CV_LOAD_IMAGE_COLOR); + record_frames_mutex.unlock(); + +// return snap(record_frames[id]); + + imwrite(filename.toUtf8().data(), frame); + + HxTaskDispatch::enqueue_upload_file(filename); + + return QString("/%1/%2/alarm/%3").arg(QDateTime::currentDateTime().toString("yyyyMMdd"), HxDataBase::device_id, filename); } -QString VideoDevice::build_video(int id) +QString HxVideoDevice::build_video(int id) { - QString url = QString("ftp://%3/%4/%5/alarm/").arg(DataBase::ftp_address, QDateTime::currentDateTime().toString("yyyyMMdd"), DataBase::device_id); - QString filename = QString("%1.mp4").arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmsszzz")); + auto start_id = id - video_fps * 5, end_id = id + video_fps * 5; - QtConcurrent::run([=]() { - if (video_frames_string.contains(id)) - { - frame_mutex.lock(); - auto first_key = video_frames_string.firstKey(); - frame_mutex.unlock(); + QString filename = QString("%1_%2_%3.mp4").arg(start_id > 0 ? start_id : 0).arg(end_id).arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmsszzz")); - auto start_id = id - frame_fps * 10, end_id = id + frame_fps * 10; + record_queue_mutex.lock(); + record_queue.enqueue(filename); + record_queue_mutex.unlock(); - start_id = start_id < first_key ? first_key : start_id; - - qDebug() << "build video; start id = " << start_id << " end id = " << end_id; - - while (true) - { - frame_mutex.lock(); - auto last_key = video_frames_string.lastKey(); - frame_mutex.unlock(); - - // qDebug() << " end id = " << end_id << " last id = "<< last_key; - - /* 判断最新的视频帧是否超过设定的时间 */ - if (last_key >= end_id) - { - frame_mutex.lock(); - auto _video_frames_string = video_frames_string; - _video_frames_string.detach(); - frame_mutex.unlock(); - - VideoWriter writer(filename.toUtf8().data(), CV_FOURCC('m', 'p', '4', 'v'), frame_fps, Size(video_capture.get(CV_CAP_PROP_FRAME_WIDTH), video_capture.get(CV_CAP_PROP_FRAME_HEIGHT)), true); - - for (int i = start_id; i <= end_id; i++) - { - auto __frame = imdecode(_video_frames_string[i], CV_LOAD_IMAGE_COLOR); - - writer.write(__frame); - - msleep(frame_fps); - - qDebug() << " write " << filename << ". frame id = " << i; - } - - writer.release(); - - qDebug() << "video build finish"; - - HxProcessUtils::execute(QString("curl -u %1:%2 %3 --ftp-create-dirs -T %4") - .arg(DataBase::ftp_username, - DataBase::ftp_password, - url, - filename)); - - QFile::remove(filename); - - return; - } - msleep(100); - } - } }); - - return url + filename; + return QString("/%1/%2/alarm/%3").arg(QDateTime::currentDateTime().toString("yyyyMMdd"), HxDataBase::device_id, filename); } -void VideoDevice::test(void) +void HxVideoDevice::test(void) { - ObjectTrackEventResult pObjectTrackEventResult = { 0 }; - pObjectTrackEventResult.nFrameId = video_frames_string.lastKey(); + ObjectTrackEventResult pObjectTrackEventResult; + pObjectTrackEventResult.nFrameId = record_frames.lastKey(); pObjectTrackEventResult.nEventType = EVENT_PCW; pObjectTrackEventResult.nObjectNumber = 1; pObjectTrackEventResult.objInfo[0].nDetectType = PEDESTRIAN_TYPE; algorithm_alarm_callback(0, &pObjectTrackEventResult, nullptr); } -vector VideoDevice::compress(Mat frame, int quality) +vector HxVideoDevice::compress(Mat frame, int quality) { vector buffer; @@ -246,98 +244,193 @@ vector VideoDevice::compress(Mat frame, int quality) return buffer; } -QString VideoDevice::snap(Mat frame) +QString HxVideoDevice::snap(Mat frame) { return frame.data == nullptr ? "" : snap(compress(frame, 50)); } + +QString HxVideoDevice::snap(vector buffer) { return QString(QByteArray::fromRawData((const char *)buffer.data(), buffer.size()).toBase64()); } + +void HxVideoDevice::recording_creation_task(void) { - if (frame.data != nullptr) - return snap(compress(frame, 50)); - - return ""; -} - -QString VideoDevice::snap(vector buffer) -{ - QByteArray byteArray = QByteArray::fromRawData((const char*)buffer.data(), buffer.size()); - - return QString(byteArray.toBase64()); -} - -void VideoDevice::video_frame_queue_check() -{ - if (video_frames_string.count() > frame_fps * 30) + while (true) { - frame_mutex.lock(); - video_frames_string.remove(video_frames_string.firstKey()); - frame_mutex.unlock(); - } -} - -void VideoDevice::read_frame() -{ - if (address.isEmpty()) - return; - - if (!video_capture.isOpened()) - { - video_capture = VideoCapture(address.toUtf8().data()); - - frame_fps = video_capture.get(CV_CAP_PROP_FPS); - - qDebug() << address << " open"; - } - - if (!video_capture.read(video_frame)) - { - qDebug() << address << " close"; - - video_capture.release(); - - return; - } - - if (video_frame.data != nullptr) - { - frame_mutex.lock(); - video_frames_string.insert(frame_id, compress(video_frame, 80)); - frame_mutex.unlock(); - - if (detection_status) + if (record_queue.size() > 0) { - auto car = TaskDispatch::get_car_info(); + record_queue_mutex.lock(); + auto filename = record_queue.dequeue(); + record_queue_mutex.unlock(); - if (car->fVelocity >= 10) + HxLog::append("recording", QString("type=%1, count=%2, %3 creation task start").arg(type).arg(record_queue.size()).arg(filename)); + + auto data = filename.split("_"); + auto start_id = data[0].toInt(), end_id = data[1].toInt(); + + while (true) { -#if USE_ALGORITHM - bgr_frame_buffer.nFrameId = frame_id; // 帧号 - bgr_frame_buffer.u64PTS = QDateTime::currentMSecsSinceEpoch(); // 时间戳(毫秒) + record_frames_mutex.lock(); + auto first_key = record_frames.firstKey(); + auto last_key = record_frames.lastKey(); + record_frames_mutex.unlock(); - memcpy(bgr_frame_buffer.pu8VirAddr, video_frame.data, 1280 * 720 * 3); + if (last_key < first_key) + { + HxLog::append("recording", QString("%1 not found last id, creation failed").arg(filename)); - MvConvertImage(&bgr_frame_buffer, &detect_frame_buffer); // bgr->nv16 + break; + } - MvObjectEventDetect(this->type, &detect_frame_buffer, TaskDispatch::get_car_info()); -#endif + /* 判断最新的视频帧是否超过设定的时间 */ + if (last_key >= end_id) + { + record_frames_mutex.lock(); + auto _record_frames = record_frames; + _record_frames.detach(); + record_frames_mutex.unlock(); + + VideoWriter writer(filename.toUtf8().data(), CV_FOURCC('m', 'p', '4', 'v'), video_fps, Size(video_capture.get(CV_CAP_PROP_FRAME_WIDTH), video_capture.get(CV_CAP_PROP_FRAME_HEIGHT)), true); + + for (int i = start_id; i <= end_id; i++) + { + if (_record_frames.contains(i)) + { + auto __frame = imdecode(_record_frames[i], CV_LOAD_IMAGE_COLOR); + + writer.write(__frame); + + msleep(10); + + HxLog::append("recording", QString("%1 write frame id:%2").arg(filename).arg(i)); + } + } + + writer.release(); + + HxTaskDispatch::enqueue_upload_file(filename); + + HxLog::append("recording", QString("%1 creation success").arg(type).arg(filename)); + + break; + } + + msleep(100); } } - frame_id++; + msleep(500); } } -void VideoDevice::run() +void HxVideoDevice::video_frame_queue_check(void) { - frame_id = 0; + while (true) + { + /* 缓存队列超过30s, 删除掉头数据 */ + record_frames_mutex.lock(); + while (record_frames.count() > video_fps * 180) + { + record_frames.remove(record_frames.firstKey()); + msleep(1); + } + record_frames_mutex.unlock(); + + msleep(1000); + } +} + +void HxVideoDevice::frame_read_task(void) +{ + HxLog::append("videolivestream", QString("type=%1, address=%2, frame read task start").arg(type).arg(address)); while (true) { - video_frame_queue_check(); + if (address.isEmpty()) + return; - read_frame(); + if (!video_capture.isOpened()) + { + /* 打开 */ + video_capture = VideoCapture(address.toUtf8().data()); - msleep(1); + if(video_capture.isOpened()) + { + /* 获取视频帧率 */ + video_fps = video_capture.get(CV_CAP_PROP_FPS); + + HxLog::append("videolivestream", QString("type=%1, video open success, fps=%2").arg(video_fps)); + } + } + + if (!video_capture.read(video_frame)) + { + /* 关闭,释放 */ + video_capture.release(); + + HxLog::append("videolivestream", QString("type=%1, video close").arg(type)); + + msleep(1000); + + continue; + } + +// video_frames_mutex.lock(); +// video_frames.enqueue(video_frame); +// video_frames_mutex.unlock(); + + msleep(15); } } -int VideoDevice::MvGetFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo) +void HxVideoDevice::run() +{ + /* 启动 录像创建任务 */ + QtConcurrent::run(this, &HxVideoDevice::recording_creation_task); + + /* 创建 缓存队列监控线程 */ + QtConcurrent::run(this, &HxVideoDevice::video_frame_queue_check); + + /* 创建 视频读取线程 */ + QtConcurrent::run(this, &HxVideoDevice::frame_read_task); + + while (true) + { +// Mat frame; +// video_frames_mutex.lock(); +// if (video_frames.size() > 0) +// frame = video_frames.dequeue(); +// video_frames_mutex.unlock(); + + if (video_frame.data != nullptr) + { + record_frames_mutex.lock(); + record_frames.insert(frame_id, compress(video_frame, 40)); + record_frames_mutex.unlock(); + + if (detection_status) + { + auto car_info = HxTaskDispatch::get_car_info(); + + if (car_info->fVelocity > 10) + { + bgr_frame_buffer.nFrameId = frame_id; // 帧号 + bgr_frame_buffer.u64PTS = QDateTime::currentMSecsSinceEpoch(); // 时间戳(毫秒) + + memcpy(bgr_frame_buffer.pu8VirAddr, video_frame.data, 1280 * 720 * 3); + + MvConvertImage(&bgr_frame_buffer, &detect_frame_buffer); // bgr->nv16 +#if USE_ALGORITHM + MvObjectEventDetect(this->type, &detect_frame_buffer, car_info); + + HxLog::append("algorithm", QString("type: %1, send %2 frame").arg(type).arg(frame_id)); +#endif + } + } + + frame_id++; + } + + msleep(5); + } +} + +int HxVideoDevice::MvGetFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo) { Q_UNUSED(pImageDataInfo); @@ -345,14 +438,14 @@ int VideoDevice::MvGetFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo) if (pImageDataInfo == NULL) return -1; - pImageDataInfo->pu8VirAddr = (unsigned char*)calloc(pImageDataInfo->u32Width * pImageDataInfo->u32Height * 3, sizeof(unsigned char)); + pImageDataInfo->pu8VirAddr = (unsigned char *)calloc(pImageDataInfo->u32Width * pImageDataInfo->u32Height * 3, sizeof(unsigned char)); if (pImageDataInfo->pu8VirAddr == NULL) return -1; #endif return 0; } -int VideoDevice::MvReleaseFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo) +int HxVideoDevice::MvReleaseFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo) { Q_UNUSED(pImageDataInfo); @@ -369,7 +462,7 @@ int VideoDevice::MvReleaseFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo) return 0; } -int VideoDevice::MvConvertImage(VideoFrameDataInfo* pSrcImageDataInfo, VideoFrameDataInfo* pDstImageDataInfo) +int HxVideoDevice::MvConvertImage(VideoFrameDataInfo *pSrcImageDataInfo, VideoFrameDataInfo *pDstImageDataInfo) { Q_UNUSED(pSrcImageDataInfo); Q_UNUSED(pDstImageDataInfo); diff --git a/app/HxVideoDevice.h b/app/HxVideoDevice.h index b03d124..7c8bf67 100644 --- a/app/HxVideoDevice.h +++ b/app/HxVideoDevice.h @@ -19,14 +19,15 @@ using namespace std; #include "rkrga/im2d.hpp" #endif -class VideoDevice : public QThread +class HxVideoDevice : public QThread { Q_OBJECT public: - VideoDevice(void); + HxVideoDevice(void); void set(int type, QString address); void set(int type, QString address, BsdWarnRegion region); void set(bool status); + bool get_alarm_detection_timestamp(void); QString snap(void); QString build_image(int id); @@ -38,25 +39,34 @@ private: vector compress(Mat frame, int quality); QString snap(Mat frame); QString snap(vector data); - void video_frame_queue_check(); - void read_frame(); + void recording_creation_task(void); + void video_frame_queue_check(void); + void frame_read_task(void); protected: void run() override; private: - int MvGetFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo); - int MvReleaseFrameBlkInfo(VideoFrameDataInfo* pImageDataInfo); - int MvConvertImage(VideoFrameDataInfo* pSrcImageDataInfo, VideoFrameDataInfo* pDstImageDataInfo); + int MvGetFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo); + int MvReleaseFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo); + int MvConvertImage(VideoFrameDataInfo *pSrcImageDataInfo, VideoFrameDataInfo *pDstImageDataInfo); private: int type; - int frame_id; - int frame_fps; - QString address; + int frame_id = 0; + int video_fps = 25; + QString address = ""; + QDateTime alarm_detection_timestamp = QDateTime::currentDateTime(); bool detection_status = true; - QMap> video_frames_string; - QMutex frame_mutex; + + QMutex record_queue_mutex; + QQueue record_queue; + + QMutex video_frames_mutex; + QQueue video_frames; + + QMutex record_frames_mutex; + QMap> record_frames; Mat video_frame; VideoCapture video_capture; @@ -65,4 +75,4 @@ private: VideoFrameDataInfo bgr_frame_buffer; }; -#endif // HXVIDEODEVICE_H +#endif diff --git a/app/app.pro b/app/app.pro index e9c5710..974c7ab 100644 --- a/app/app.pro +++ b/app/app.pro @@ -26,18 +26,27 @@ CONFIG += c++11 HEADERS += HxDataBase.h HxTaskDispatch.h HxUtils.h HxVideoDevice.h SOURCES += HxDataBase.cpp HxTaskDispatch.cpp HxVideoDevice.cpp main.cpp +# DEFINES += USE_RABBITMQ # DEFINES += USE_ALGORITHM INCLUDEPATH += $$PWD/external +contains(DEFINES, USE_RABBITMQ) { + INCLUDEPATH += $$PWD/external/qamqp + LIBS += -L$$PWD/external/qamqp/ -lqamqp + + unix { + PRE_TARGETDEPS += $$PWD/external/qamqp/libqamqp.a + } +} contains(DEFINES, USE_ALGORITHM) { -LIBS += -L$$PWD/external/ -lObjectEventDetect -PRE_TARGETDEPS += $$PWD/external/libObjectEventDetect.a + LIBS += -L$$PWD/external/ -lObjectEventDetect + PRE_TARGETDEPS += $$PWD/external/libObjectEventDetect.a } contains(DEFINES, USE_ALGORITHM) { -LIBS += -L$$PWD/external/npu/ -lrknn_api -INCLUDEPATH += $$PWD/external/npu + LIBS += -L$$PWD/external/npu/ -lrknn_api + INCLUDEPATH += $$PWD/external/npu } win32 { @@ -46,6 +55,6 @@ win32 { } unix { - LIBS += -L/usr/local/lib -lopencv_imgproc -lopencv_videoio -lopencv_imgcodecs -lopencv_highgui -lopencv_core + LIBS += -L/usr/local/lib -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lopencv_core INCLUDEPATH += /usr/local/include } diff --git a/app/external/libObjectEventDetect.a b/app/external/libObjectEventDetect.a index 4f33787..b38d94b 100644 Binary files a/app/external/libObjectEventDetect.a and b/app/external/libObjectEventDetect.a differ diff --git a/app/external/qamqp/libqamqp.a b/app/external/qamqp/libqamqp.a new file mode 100644 index 0000000..9a78083 Binary files /dev/null and b/app/external/qamqp/libqamqp.a differ diff --git a/app/external/qamqp/qamqp.dll b/app/external/qamqp/qamqp.dll new file mode 100644 index 0000000..a3662b1 Binary files /dev/null and b/app/external/qamqp/qamqp.dll differ diff --git a/app/external/qamqp/qamqpauthenticator.h b/app/external/qamqp/qamqpauthenticator.h new file mode 100644 index 0000000..509c0ba --- /dev/null +++ b/app/external/qamqp/qamqpauthenticator.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPAUTHENTICATOR_H +#define QAMQPAUTHENTICATOR_H + +#include +#include + +#include "qamqpglobal.h" + +class QAMQP_EXPORT QAmqpAuthenticator +{ +public: + virtual ~QAmqpAuthenticator() {} + virtual QString type() const = 0; + virtual void write(QDataStream &out) = 0; +}; + +class QAMQP_EXPORT QAmqpPlainAuthenticator : public QAmqpAuthenticator +{ +public: + QAmqpPlainAuthenticator(const QString &login = QString(), const QString &password = QString()); + virtual ~QAmqpPlainAuthenticator(); + + QString login() const; + void setLogin(const QString &l); + + QString password() const; + void setPassword(const QString &p); + + virtual QString type() const; + virtual void write(QDataStream &out); + +private: + QString login_; + QString password_; + +}; + +#endif // QAMQPAUTHENTICATOR_H diff --git a/app/external/qamqp/qamqpchannel.h b/app/external/qamqp/qamqpchannel.h new file mode 100644 index 0000000..42fcef7 --- /dev/null +++ b/app/external/qamqp/qamqpchannel.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPCHANNEL_H +#define QAMQPCHANNEL_H + +#include +#include "qamqpglobal.h" + +class QAmqpClient; +class QAmqpChannelPrivate; +class QAMQP_EXPORT QAmqpChannel : public QObject +{ + Q_OBJECT + Q_PROPERTY(int number READ channelNumber CONSTANT) + Q_PROPERTY(bool open READ isOpen CONSTANT) + Q_PROPERTY(QString name READ name WRITE setName) +public: + virtual ~QAmqpChannel(); + + int channelNumber() const; + bool isOpen() const; + + QString name() const; + void setName(const QString &name); + + QAMQP::Error error() const; + QString errorString() const; + + qint32 prefetchSize() const; + qint16 prefetchCount() const; + + void reset(); + + // AMQP Basic + void qos(qint16 prefetchCount, qint32 prefetchSize = 0); + +public Q_SLOTS: + void close(); + void reopen(); + void resume(); + +Q_SIGNALS: + void opened(); + void closed(); + void resumed(); + void paused(); + void error(QAMQP::Error error); + void qosDefined(); + +protected: + virtual void channelOpened() = 0; + virtual void channelClosed() = 0; + +protected: + explicit QAmqpChannel(QAmqpChannelPrivate *dd, QAmqpClient *client); + + Q_DISABLE_COPY(QAmqpChannel) + Q_DECLARE_PRIVATE(QAmqpChannel) + QScopedPointer d_ptr; + + Q_PRIVATE_SLOT(d_func(), void _q_open()) + Q_PRIVATE_SLOT(d_func(), void _q_disconnected()) + + friend class QAmqpClientPrivate; + friend class QAmqpExchangePrivate; +}; + +#endif // QAMQPCHANNEL_H diff --git a/app/external/qamqp/qamqpchannel_p.h b/app/external/qamqp/qamqpchannel_p.h new file mode 100644 index 0000000..e902e86 --- /dev/null +++ b/app/external/qamqp/qamqpchannel_p.h @@ -0,0 +1,84 @@ +#ifndef QAMQPCHANNEL_P_H +#define QAMQPCHANNEL_P_H + +#include +#include "qamqpframe_p.h" +#include "qamqptable.h" + +#define METHOD_ID_ENUM(name, id) name = id, name ## Ok + +class QAmqpChannel; +class QAmqpClient; +class QAmqpClientPrivate; +class QAmqpChannelPrivate : public QAmqpMethodFrameHandler +{ +public: + enum MethodId { + METHOD_ID_ENUM(miOpen, 10), + METHOD_ID_ENUM(miFlow, 20), + METHOD_ID_ENUM(miClose, 40) + }; + + enum BasicMethod { + METHOD_ID_ENUM(bmQos, 10), + METHOD_ID_ENUM(bmConsume, 20), + METHOD_ID_ENUM(bmCancel, 30), + bmPublish = 40, + bmReturn = 50, + bmDeliver = 60, + METHOD_ID_ENUM(bmGet, 70), + bmGetEmpty = 72, + bmAck = 80, + bmReject = 90, + bmRecoverAsync = 100, + METHOD_ID_ENUM(bmRecover, 110), + bmNack = 120 + }; + + QAmqpChannelPrivate(QAmqpChannel *q); + virtual ~QAmqpChannelPrivate(); + + void init(int channel, QAmqpClient *client); + void sendFrame(const QAmqpFrame &frame); + virtual void resetInternalState(); + + void open(); + void flow(bool active); + void flowOk(); + void close(int code, const QString &text, int classId, int methodId); + void notifyClosed(); + + // reimp MethodHandler + virtual bool _q_method(const QAmqpMethodFrame &frame); + void openOk(const QAmqpMethodFrame &frame); + void flow(const QAmqpMethodFrame &frame); + void flowOk(const QAmqpMethodFrame &frame); + void close(const QAmqpMethodFrame &frame); + void closeOk(const QAmqpMethodFrame &frame); + void qosOk(const QAmqpMethodFrame &frame); + + // private slots + virtual void _q_disconnected(); + void _q_open(); + + QPointer client; + QString name; + quint16 channelNumber; + static quint16 nextChannelNumber; + bool opened; + bool needOpen; + + qint32 prefetchSize; + qint32 requestedPrefetchSize; + qint16 prefetchCount; + qint16 requestedPrefetchCount; + + QAMQP::Error error; + QString errorString; + + Q_DECLARE_PUBLIC(QAmqpChannel) + QAmqpChannel * const q_ptr; + QAmqpTable arguments; +}; + +#endif // QAMQPCHANNEL_P_H diff --git a/app/external/qamqp/qamqpchannelhash_p.h b/app/external/qamqp/qamqpchannelhash_p.h new file mode 100644 index 0000000..eab5124 --- /dev/null +++ b/app/external/qamqp/qamqpchannelhash_p.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPCHANNELHASH_P_H +#define QAMQPCHANNELHASH_P_H + +#include +#include +#include +#include + +/* Forward declarations */ +class QAmqpChannel; +class QAmqpQueue; +class QAmqpExchange; + +/*! + * QAmqpChannelHash is a container for storing queues and exchanges for later + * retrieval. When the objects are destroyed, they are automatically removed + * from the container. + */ +class QAmqpChannelHash : public QObject +{ + Q_OBJECT +public: + /*! + * Retrieve a pointer to the named channel. + * + * A NULL string is assumed to be equivalent to "" for the purpose + * of retrieving the nameless (default) exchange. + * + * \param[in] name The name of the channel to retrieve. + * \retval NULL Channel does not exist. + */ + QAmqpChannel* get(const QString& name) const; + + /*! + * Return true if the named channel exists. + */ + bool contains(const QString& name) const; + + /** + * Returns a list of channels tracked by this hash + */ + QStringList channels() const; + + /*! + * Store an exchange in the hash. The nameless exchange is stored under + * the name "". + */ + void put(QAmqpExchange* exchange); + + /*! + * Store a queue in the hash. If the queue is nameless, we hook its + * declared signal and store it when the queue receives a name from the + * broker, otherwise we store it under the name given. + */ + void put(QAmqpQueue* queue); + +private Q_SLOTS: + /*! + * Handle destruction of a channel. Do a full garbage collection run. + */ + void channelDestroyed(QObject* object); + + /*! + * Handle a queue that has just been declared and given a new name. The + * caller is assumed to be a QAmqpQueue instance. + */ + void queueDeclared(); + +private: + /*! + * Store a channel in the hash. This hooks the 'destroyed' signal + * so the channel can be removed from our list. + */ + void put(const QString& name, QAmqpChannel* channel); + + /*! A collection of channels. Key is the channel's "name". */ + QHash m_channels; +}; + +/* vim: set ts=4 sw=4 et */ +#endif diff --git a/app/external/qamqp/qamqpclient.h b/app/external/qamqp/qamqpclient.h new file mode 100644 index 0000000..62c6cc4 --- /dev/null +++ b/app/external/qamqp/qamqpclient.h @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPCLIENT_H +#define QAMQPCLIENT_H + +#include +#include +#include +#include +#include + +#include "qamqpglobal.h" + +class QAmqpExchange; +class QAmqpQueue; +class QAmqpAuthenticator; +class QAmqpClientPrivate; +class QAMQP_EXPORT QAmqpClient : public QObject +{ + Q_OBJECT + Q_PROPERTY(quint32 port READ port WRITE setPort) + Q_PROPERTY(QString host READ host WRITE setHost) + Q_PROPERTY(QString virtualHost READ virtualHost WRITE setVirtualHost) + Q_PROPERTY(QString user READ username WRITE setUsername) + Q_PROPERTY(QString password READ password WRITE setPassword) + Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) + Q_PROPERTY(qint16 channelMax READ channelMax WRITE setChannelMax) + Q_PROPERTY(qint32 frameMax READ frameMax WRITE setFrameMax) + Q_PROPERTY(qint16 heartbeatDelay READ heartbeatDelay() WRITE setHeartbeatDelay) + +public: + explicit QAmqpClient(QObject *parent = 0); + ~QAmqpClient(); + + // properties + quint16 port() const; + void setPort(quint16 port); + + QString host() const; + void setHost(const QString &host); + + QString virtualHost() const; + void setVirtualHost(const QString &virtualHost); + + QString username() const; + void setUsername(const QString &username); + + QString password() const; + void setPassword(const QString &password); + + void setAuth(QAmqpAuthenticator *auth); + QAmqpAuthenticator *auth() const; + + bool autoReconnect() const; + void setAutoReconnect(bool value, int timeout = 0); + + bool isConnected() const; + + qint16 channelMax() const; + void setChannelMax(qint16 channelMax); + + qint32 frameMax() const; + void setFrameMax(qint32 frameMax); + + qint16 heartbeatDelay() const; + void setHeartbeatDelay(qint16 delay); + + int writeTimeout() const; + void setWriteTimeout(int msecs); + + void addCustomProperty(const QString &name, const QString &value); + QString customProperty(const QString &name) const; + + QAbstractSocket::SocketError socketError() const; + QAbstractSocket::SocketState socketState() const; + + QAMQP::Error error() const; + QString errorString() const; + + QSslConfiguration sslConfiguration() const; + void setSslConfiguration(const QSslConfiguration &config); + + static QString gitVersion(); + + // channels + QAmqpExchange *createExchange(int channelNumber = -1); + QAmqpExchange *createExchange(const QString &name, int channelNumber = -1); + + QAmqpQueue *createQueue(int channelNumber = -1); + QAmqpQueue *createQueue(const QString &name, int channelNumber = -1); + + // methods + void connectToHost(const QString &uri = QString()); + void connectToHost(const QHostAddress &address, quint16 port = AMQP_PORT); + void disconnectFromHost(); + void abort(); + +Q_SIGNALS: + void connected(); + void disconnected(); + void heartbeat(); + void error(QAMQP::Error error); + void socketErrorOccurred(QAbstractSocket::SocketError error); + void socketStateChanged(QAbstractSocket::SocketState state); + void sslErrors(const QList &errors); + +public Q_SLOTS: + void ignoreSslErrors(const QList &errors); + +protected: + QAmqpClient(QAmqpClientPrivate *dd, QObject *parent = 0); + + Q_DISABLE_COPY(QAmqpClient) + Q_DECLARE_PRIVATE(QAmqpClient) + QScopedPointer d_ptr; + +private: + Q_PRIVATE_SLOT(d_func(), void _q_socketConnected()) + Q_PRIVATE_SLOT(d_func(), void _q_socketDisconnected()) + Q_PRIVATE_SLOT(d_func(), void _q_readyRead()) + Q_PRIVATE_SLOT(d_func(), void _q_socketError(QAbstractSocket::SocketError error)) + Q_PRIVATE_SLOT(d_func(), void _q_heartbeat()) + Q_PRIVATE_SLOT(d_func(), void _q_connect()) + Q_PRIVATE_SLOT(d_func(), void _q_disconnect()) + + friend class QAmqpChannelPrivate; + friend class QAmqpQueuePrivate; + +}; + +#endif // QAMQPCLIENT_H diff --git a/app/external/qamqp/qamqpclient_p.h b/app/external/qamqp/qamqpclient_p.h new file mode 100644 index 0000000..397e426 --- /dev/null +++ b/app/external/qamqp/qamqpclient_p.h @@ -0,0 +1,120 @@ +#ifndef QAMQPCLIENT_P_H +#define QAMQPCLIENT_P_H + +#include +#include +#include +#include +#include + +#include "qamqpchannelhash_p.h" +#include "qamqpglobal.h" +#include "qamqpauthenticator.h" +#include "qamqptable.h" +#include "qamqpframe_p.h" + +#define METHOD_ID_ENUM(name, id) name = id, name ## Ok + +class QTimer; +class QSslSocket; +class QAmqpClient; +class QAmqpQueue; +class QAmqpExchange; +class QAmqpConnection; +class QAmqpAuthenticator; +class QAMQP_EXPORT QAmqpClientPrivate : public QAmqpMethodFrameHandler +{ +public: + enum MethodId { + METHOD_ID_ENUM(miStart, 10), + METHOD_ID_ENUM(miSecure, 20), + METHOD_ID_ENUM(miTune, 30), + METHOD_ID_ENUM(miOpen, 40), + METHOD_ID_ENUM(miClose, 50) + }; + + QAmqpClientPrivate(QAmqpClient *q); + virtual ~QAmqpClientPrivate(); + + virtual void init(); + virtual void initSocket(); + void resetChannelState(); + void setUsername(const QString &username); + void setPassword(const QString &password); + void parseConnectionString(const QString &uri); + void sendFrame(const QAmqpFrame &frame); + + void closeConnection(); + + // private slots + void _q_socketConnected(); + void _q_socketDisconnected(); + void _q_readyRead(); + void _q_socketError(QAbstractSocket::SocketError error); + void _q_heartbeat(); + virtual void _q_connect(); + void _q_disconnect(); + + virtual bool _q_method(const QAmqpMethodFrame &frame); + + // method handlers, FROM server + void start(const QAmqpMethodFrame &frame); + void secure(const QAmqpMethodFrame &frame); + void tune(const QAmqpMethodFrame &frame); + void openOk(const QAmqpMethodFrame &frame); + void closeOk(const QAmqpMethodFrame &frame); + + // method handlers, TO server + void startOk(); + void secureOk(); + void tuneOk(); + void open(); + + // method handlers, BOTH ways + void close(int code, const QString &text, int classId = 0, int methodId = 0); + void close(const QAmqpMethodFrame &frame); + + quint16 port; + QString host; + QString virtualHost; + + QSharedPointer authenticator; + + // Network + QByteArray buffer; + bool autoReconnect; + bool reconnectFixedTimeout; + int timeout; + bool connecting; + bool useSsl; + + QSslSocket *socket; + QHash > methodHandlersByChannel; + QHash > contentHandlerByChannel; + QHash > bodyHandlersByChannel; + + // Connection + bool closed; + bool connected; + QPointer heartbeatTimer; + QPointer reconnectTimer; + QAmqpTable customProperties; + qint16 channelMax; + qint16 heartbeatDelay; + qint32 frameMax; + + QAMQP::Error error; + QString errorString; + + /*! Exchange objects */ + QAmqpChannelHash exchanges; + + /*! Named queue objects */ + QAmqpChannelHash queues; + + QAmqpClient * const q_ptr; + Q_DECLARE_PUBLIC(QAmqpClient) + +}; + +#endif // QAMQPCLIENT_P_H diff --git a/app/external/qamqp/qamqpexchange.h b/app/external/qamqp/qamqpexchange.h new file mode 100644 index 0000000..8247913 --- /dev/null +++ b/app/external/qamqp/qamqpexchange.h @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPEXCHANGE_H +#define QAMQPEXCHANGE_H + +#include "qamqptable.h" +#include "qamqpchannel.h" +#include "qamqpmessage.h" + +class QAmqpClient; +class QAmqpQueue; +class QAmqpClientPrivate; +class QAmqpExchangePrivate; +class QAMQP_EXPORT QAmqpExchange : public QAmqpChannel +{ + Q_OBJECT + Q_PROPERTY(QString type READ type CONSTANT) + Q_PROPERTY(ExchangeOptions options READ options CONSTANT) + +public: + virtual ~QAmqpExchange(); + + enum ExchangeType { + Direct, + FanOut, + Topic, + Headers + }; + QString type() const; + + enum PublishOption { + poNoOptions = 0x0, + poMandatory = 0x01, + poImmediate = 0x02 + }; + Q_DECLARE_FLAGS(PublishOptions, PublishOption) + + enum RemoveOption { + roForce = 0x0, + roIfUnused = 0x01, + roNoWait = 0x04 + }; + Q_DECLARE_FLAGS(RemoveOptions, RemoveOption) + + enum ExchangeOption { + NoOptions = 0x0, + Passive = 0x01, + Durable = 0x02, + AutoDelete = 0x04, + Internal = 0x08, + NoWait = 0x10 + }; + Q_DECLARE_FLAGS(ExchangeOptions, ExchangeOption) + ExchangeOptions options() const; + Q_ENUM(ExchangeOptions) + + bool isDeclared() const; + + void enableConfirms(bool noWait = false); + bool waitForConfirms(int msecs = 30000); + +Q_SIGNALS: + void declared(); + void removed(); + + void confirmsEnabled(); + void allMessagesDelivered(); + +public Q_SLOTS: + // AMQP Exchange + void declare(QAmqpExchange::ExchangeType type = Direct, + QAmqpExchange::ExchangeOptions options = NoOptions, + const QAmqpTable &args = QAmqpTable()); + void declare(const QString &type, + QAmqpExchange::ExchangeOptions options = NoOptions, + const QAmqpTable &args = QAmqpTable()); + void remove(int options = roIfUnused|roNoWait); + + // AMQP Basic + void publish(const QString &message, const QString &routingKey, + const QAmqpMessage::PropertyHash &properties = QAmqpMessage::PropertyHash(), + int publishOptions = poNoOptions); + void publish(const QByteArray &message, const QString &routingKey, const QString &mimeType, + const QAmqpMessage::PropertyHash &properties = QAmqpMessage::PropertyHash(), + int publishOptions = poNoOptions); + void publish(const QByteArray &message, const QString &routingKey, + const QString &mimeType, const QAmqpTable &headers, + const QAmqpMessage::PropertyHash &properties = QAmqpMessage::PropertyHash(), + int publishOptions = poNoOptions); + +protected: + virtual void channelOpened(); + virtual void channelClosed(); + +private: + explicit QAmqpExchange(int channelNumber = -1, QAmqpClient *parent = 0); + + Q_DISABLE_COPY(QAmqpExchange) + Q_DECLARE_PRIVATE(QAmqpExchange) + friend class QAmqpClient; + friend class QAmqpClientPrivate; + +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QAmqpExchange::ExchangeOptions) +Q_DECLARE_METATYPE(QAmqpExchange::ExchangeType) + +#endif // QAMQPEXCHANGE_H diff --git a/app/external/qamqp/qamqpexchange_p.h b/app/external/qamqp/qamqpexchange_p.h new file mode 100644 index 0000000..9e0e929 --- /dev/null +++ b/app/external/qamqp/qamqpexchange_p.h @@ -0,0 +1,45 @@ +#ifndef QAMQPEXCHANGE_P_H +#define QAMQPEXCHANGE_P_H + +#include "qamqptable.h" +#include "qamqpexchange.h" +#include "qamqpchannel_p.h" + +class QAmqpExchangePrivate: public QAmqpChannelPrivate +{ +public: + enum MethodId { + METHOD_ID_ENUM(miDeclare, 10), + METHOD_ID_ENUM(miDelete, 20) + }; + + enum ConfirmMethod { + METHOD_ID_ENUM(cmConfirm, 10) + }; + + QAmqpExchangePrivate(QAmqpExchange *q); + static QString typeToString(QAmqpExchange::ExchangeType type); + + virtual void resetInternalState(); + + void declare(); + + // method handler related + virtual void _q_disconnected(); + virtual bool _q_method(const QAmqpMethodFrame &frame); + void declareOk(const QAmqpMethodFrame &frame); + void deleteOk(const QAmqpMethodFrame &frame); + void basicReturn(const QAmqpMethodFrame &frame); + void handleAckOrNack(const QAmqpMethodFrame &frame); + + QString type; + QAmqpExchange::ExchangeOptions options; + bool delayedDeclare; + bool declared; + qlonglong nextDeliveryTag; + QVector unconfirmedDeliveryTags; + + Q_DECLARE_PUBLIC(QAmqpExchange) +}; + +#endif // QAMQPEXCHANGE_P_H diff --git a/app/external/qamqp/qamqpframe_p.h b/app/external/qamqp/qamqpframe_p.h new file mode 100644 index 0000000..644f6bf --- /dev/null +++ b/app/external/qamqp/qamqpframe_p.h @@ -0,0 +1,171 @@ +#ifndef QAMQPFRAME_P_H +#define QAMQPFRAME_P_H + +#include +#include +#include +#include + +#include "qamqpglobal.h" +#include "qamqpmessage.h" + +class QAmqpFramePrivate; +class QAmqpFrame +{ +public: + static const qint64 HEADER_SIZE = 7; + static const qint64 FRAME_END_SIZE = 1; + static const quint8 FRAME_END = 0xCE; + + enum FrameType + { + Method = 1, + Header = 2, + Body = 3, + Heartbeat = 8 + }; + + enum MethodClass + { + Connection = 10, + Channel = 20, + Exchange = 40, + Queue = 50, + Basic = 60, + Confirm = 85, + Tx = 90 + }; + + virtual ~QAmqpFrame(); + + FrameType type() const; + + quint16 channel() const; + void setChannel(quint16 channel); + + static int writeTimeout(); + static void setWriteTimeout(int msecs); + + virtual qint32 size() const; + + static QVariant readAmqpField(QDataStream &s, QAmqpMetaType::ValueType type); + static void writeAmqpField(QDataStream &s, QAmqpMetaType::ValueType type, const QVariant &value); + +protected: + explicit QAmqpFrame(FrameType type); + virtual void writePayload(QDataStream &stream) const = 0; + virtual void readPayload(QDataStream &stream) = 0; + + qint32 size_; + +private: + qint8 type_; + quint16 channel_; + + static QReadWriteLock lock_; + static int writeTimeout_; + + friend QDataStream &operator<<(QDataStream &stream, const QAmqpFrame &frame); + friend QDataStream &operator>>(QDataStream &stream, QAmqpFrame &frame); +}; + +QDataStream &operator<<(QDataStream &, const QAmqpFrame &frame); +QDataStream &operator>>(QDataStream &, QAmqpFrame &frame); + +class QAMQP_EXPORT QAmqpMethodFrame : public QAmqpFrame +{ +public: + QAmqpMethodFrame(); + QAmqpMethodFrame(MethodClass methodClass, qint16 id); + + qint16 id() const; + MethodClass methodClass() const; + + virtual qint32 size() const; + + QByteArray arguments() const; + void setArguments(const QByteArray &data); + +private: + void writePayload(QDataStream &stream) const; + void readPayload(QDataStream &stream); + + short methodClass_; + qint16 id_; + QByteArray arguments_; +}; + +class QAmqpContentFrame : public QAmqpFrame +{ +public: + QAmqpContentFrame(); + QAmqpContentFrame(MethodClass methodClass); + + MethodClass methodClass() const; + + virtual qint32 size() const; + + QVariant property(QAmqpMessage::Property prop) const; + void setProperty(QAmqpMessage::Property prop, const QVariant &value); + + qlonglong bodySize() const; + void setBodySize(qlonglong size); + +private: + void writePayload(QDataStream &stream) const; + void readPayload(QDataStream &stream); + friend class QAmqpQueuePrivate; + + short methodClass_; + qint16 id_; + mutable QByteArray buffer_; + QAmqpMessage::PropertyHash properties_; + qlonglong bodySize_; +}; + +class QAmqpContentBodyFrame : public QAmqpFrame +{ +public: + QAmqpContentBodyFrame(); + + void setBody(const QByteArray &data); + QByteArray body() const; + + virtual qint32 size() const; + +private: + void writePayload(QDataStream &stream) const; + void readPayload(QDataStream &stream); + + QByteArray body_; +}; + +class QAmqpHeartbeatFrame : public QAmqpFrame +{ +public: + QAmqpHeartbeatFrame(); + +private: + void writePayload(QDataStream &stream) const; + void readPayload(QDataStream &stream); +}; + +class QAmqpMethodFrameHandler +{ +public: + virtual bool _q_method(const QAmqpMethodFrame &frame) = 0; +}; + +class QAmqpContentFrameHandler +{ +public: + virtual void _q_content(const QAmqpContentFrame &frame) = 0; +}; + +class QAmqpContentBodyFrameHandler +{ +public: + virtual void _q_body(const QAmqpContentBodyFrame &frame) = 0; +}; + +#endif // QAMQPFRAME_P_H diff --git a/app/external/qamqp/qamqpglobal.h b/app/external/qamqp/qamqpglobal.h new file mode 100644 index 0000000..54abf52 --- /dev/null +++ b/app/external/qamqp/qamqpglobal.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPGLOBAL_H +#define QAMQPGLOBAL_H + +#include + +#define AMQP_SCHEME "amqp" +#define AMQP_SSL_SCHEME "amqps" +#define AMQP_PORT 5672 +#define AMQP_SSL_PORT 5671 +#define AMQP_HOST "localhost" +#define AMQP_VHOST "/" +#define AMQP_LOGIN "guest" +#define AMQP_PSWD "guest" + +#define AMQP_FRAME_MAX 131072 +#define AMQP_FRAME_MIN_SIZE 4096 + +#define AMQP_BASIC_CONTENT_TYPE_FLAG (1 << 15) +#define AMQP_BASIC_CONTENT_ENCODING_FLAG (1 << 14) +#define AMQP_BASIC_HEADERS_FLAG (1 << 13) +#define AMQP_BASIC_DELIVERY_MODE_FLAG (1 << 12) +#define AMQP_BASIC_PRIORITY_FLAG (1 << 11) +#define AMQP_BASIC_CORRELATION_ID_FLAG (1 << 10) +#define AMQP_BASIC_REPLY_TO_FLAG (1 << 9) +#define AMQP_BASIC_EXPIRATION_FLAG (1 << 8) +#define AMQP_BASIC_MESSAGE_ID_FLAG (1 << 7) +#define AMQP_BASIC_TIMESTAMP_FLAG (1 << 6) +#define AMQP_BASIC_TYPE_FLAG (1 << 5) +#define AMQP_BASIC_USER_ID_FLAG (1 << 4) +#define AMQP_BASIC_APP_ID_FLAG (1 << 3) +#define AMQP_BASIC_CLUSTER_ID_FLAG (1 << 2) + +#define QAMQP_VERSION "0.6.0" + +#define AMQP_CONNECTION_FORCED 320 + +#ifdef QAMQP_SHARED +# ifdef QAMQP_BUILD +# define QAMQP_EXPORT Q_DECL_EXPORT +# else +# define QAMQP_EXPORT Q_DECL_IMPORT +# endif +#else +# define QAMQP_EXPORT +#endif + +#define qAmqpDebug if (qEnvironmentVariableIsEmpty("QAMQP_DEBUG")); else qDebug + +namespace QAmqpMetaType { + +enum ValueType +{ + Invalid = -1, + + // basic AMQP types + Boolean, + ShortUint, + LongUint, + LongLongUint, + ShortString, + LongString, + + // field-value types + ShortShortInt, + ShortShortUint, + ShortInt, + LongInt, + LongLongInt, + Float, + Double, + Decimal, + Array, + Timestamp, + Hash, + Bytes, + Void +}; + +} // namespace QAmqpMetaType + +namespace QAMQP { + +enum Error +{ + NoError = 0, + ContentTooLargeError = 311, + NoRouteError = 312, + NoConsumersError = 313, + ConnectionForcedError = 320, + InvalidPathError = 402, + AccessRefusedError = 403, + NotFoundError = 404, + ResourceLockedError = 405, + PreconditionFailedError = 406, + FrameError = 501, + SyntaxError = 502, + CommandInvalidError = 503, + ChannelError = 504, + UnexpectedFrameError = 505, + ResourceError = 506, + NotAllowedError = 530, + NotImplementedError = 540, + InternalError = 541 +}; + +struct Decimal +{ + qint8 scale; + quint32 value; +}; + +} // namespace QAMQP + +Q_DECLARE_METATYPE(QAMQP::Error) +Q_DECLARE_METATYPE(QAMQP::Decimal) + +#endif // QAMQPGLOBAL_H diff --git a/app/external/qamqp/qamqpmessage.h b/app/external/qamqp/qamqpmessage.h new file mode 100644 index 0000000..74960a5 --- /dev/null +++ b/app/external/qamqp/qamqpmessage.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPMESSAGE_H +#define QAMQPMESSAGE_H + +#include +#include +#include +#include + +#include "qamqpglobal.h" + +class QAmqpMessagePrivate; +class QAMQP_EXPORT QAmqpMessage +{ +public: + QAmqpMessage(); + QAmqpMessage(const QAmqpMessage &other); + QAmqpMessage &operator=(const QAmqpMessage &other); + ~QAmqpMessage(); + + inline void swap(QAmqpMessage &other) { qSwap(d, other.d); } + + bool operator==(const QAmqpMessage &message) const; + inline bool operator!=(const QAmqpMessage &message) const { return !(operator==(message)); } + + enum Property { + ContentType = AMQP_BASIC_CONTENT_TYPE_FLAG, + ContentEncoding = AMQP_BASIC_CONTENT_ENCODING_FLAG, + Headers = AMQP_BASIC_HEADERS_FLAG, + DeliveryMode = AMQP_BASIC_DELIVERY_MODE_FLAG, + Priority = AMQP_BASIC_PRIORITY_FLAG, + CorrelationId = AMQP_BASIC_CORRELATION_ID_FLAG, + ReplyTo = AMQP_BASIC_REPLY_TO_FLAG, + Expiration = AMQP_BASIC_EXPIRATION_FLAG, + MessageId = AMQP_BASIC_MESSAGE_ID_FLAG, + Timestamp = AMQP_BASIC_TIMESTAMP_FLAG, + Type = AMQP_BASIC_TYPE_FLAG, + UserId = AMQP_BASIC_USER_ID_FLAG, + AppId = AMQP_BASIC_APP_ID_FLAG, + ClusterID = AMQP_BASIC_CLUSTER_ID_FLAG + }; + Q_DECLARE_FLAGS(Properties, Property) + typedef QHash PropertyHash; + + bool hasProperty(Property property) const; + void setProperty(Property property, const QVariant &value); + QVariant property(Property property, const QVariant &defaultValue = QVariant()) const; + + bool hasHeader(const QString &header) const; + void setHeader(const QString &header, const QVariant &value); + QVariant header(const QString &header, const QVariant &defaultValue = QVariant()) const; + QHash headers() const; + + bool isValid() const; + bool isRedelivered() const; + qlonglong deliveryTag() const; + QString exchangeName() const; + QString routingKey() const; + QByteArray payload() const; + +private: + QSharedDataPointer d; + friend class QAmqpQueuePrivate; + friend class QAmqpQueue; +}; + +Q_DECLARE_METATYPE(QAmqpMessage::PropertyHash) +Q_DECLARE_SHARED(QAmqpMessage) + +// NOTE: needed only for MSVC support, don't depend on this hash +QAMQP_EXPORT uint qHash(const QAmqpMessage &key, uint seed = 0); + +#endif // QAMQPMESSAGE_H diff --git a/app/external/qamqp/qamqpmessage_p.h b/app/external/qamqp/qamqpmessage_p.h new file mode 100644 index 0000000..cd4e8de --- /dev/null +++ b/app/external/qamqp/qamqpmessage_p.h @@ -0,0 +1,26 @@ +#ifndef QAMQPMESSAGE_P_H +#define QAMQPMESSAGE_P_H + +#include +#include + +#include "qamqpframe_p.h" +#include "qamqpmessage.h" + +class QAmqpMessagePrivate : public QSharedData +{ +public: + QAmqpMessagePrivate(); + + qlonglong deliveryTag; + bool redelivered; + QString exchangeName; + QString routingKey; + QByteArray payload; + QHash properties; + QHash headers; + int leftSize; + +}; + +#endif // QAMQPMESSAGE_P_H diff --git a/app/external/qamqp/qamqpqueue.h b/app/external/qamqp/qamqpqueue.h new file mode 100644 index 0000000..c0d53b2 --- /dev/null +++ b/app/external/qamqp/qamqpqueue.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPQUEUE_H +#define QAMQPQUEUE_H + +#include + +#include "qamqpchannel.h" +#include "qamqpmessage.h" +#include "qamqpglobal.h" +#include "qamqptable.h" + +class QAmqpClient; +class QAmqpClientPrivate; +class QAmqpExchange; +class QAmqpQueuePrivate; +class QAMQP_EXPORT QAmqpQueue : public QAmqpChannel, public QQueue +{ + Q_OBJECT + Q_PROPERTY(int options READ options CONSTANT) + Q_PROPERTY(QString consumerTag READ consumerTag WRITE setConsumerTag) + +public: + enum QueueOption { + NoOptions = 0x0, + Passive = 0x01, + Durable = 0x02, + Exclusive = 0x04, + AutoDelete = 0x08, + NoWait = 0x10 + }; + Q_DECLARE_FLAGS(QueueOptions, QueueOption) + Q_ENUM(QueueOption) + Q_ENUM(QueueOptions) + int options() const; + + enum ConsumeOption { + coNoLocal = 0x01, + coNoAck = 0x02, + coExclusive = 0x04, + coNoWait = 0x08 + }; + Q_DECLARE_FLAGS(ConsumeOptions, ConsumeOption) + Q_ENUM(ConsumeOption) + + enum RemoveOption { + roForce = 0x0, + roIfUnused = 0x01, + roIfEmpty = 0x02, + roNoWait = 0x04 + }; + Q_DECLARE_FLAGS(RemoveOptions, RemoveOption) + Q_ENUM(RemoveOption) + + ~QAmqpQueue(); + + bool isConsuming() const; + bool isDeclared() const; + + void setConsumerTag(const QString &consumerTag); + QString consumerTag() const; + + qint32 messageCount() const; + qint32 consumerCount() const; + +Q_SIGNALS: + void declared(); + void bound(); + void unbound(); + void removed(); + void purged(int messageCount); + + void messageReceived(); + void empty(); + void consuming(const QString &consumerTag); + void cancelled(const QString &consumerTag); + +public Q_SLOTS: + // AMQP Queue + void declare(int options = Durable|AutoDelete, const QAmqpTable &arguments = QAmqpTable()); + void bind(const QString &exchangeName, const QString &key); + void bind(QAmqpExchange *exchange, const QString &key); + void unbind(const QString &exchangeName, const QString &key); + void unbind(QAmqpExchange *exchange, const QString &key); + void purge(); + void remove(int options = roIfUnused|roIfEmpty|roNoWait); + + // AMQP Basic + bool consume(int options = NoOptions); + void get(bool noAck = true); + bool cancel(bool noWait = false); + void ack(const QAmqpMessage &message); + void ack(qlonglong deliveryTag, bool multiple); + void reject(const QAmqpMessage &message, bool requeue); + void reject(qlonglong deliveryTag, bool requeue); + +protected: + // reimp Channel + virtual void channelOpened(); + virtual void channelClosed(); + +private: + explicit QAmqpQueue(int channelNumber = -1, QAmqpClient *parent = 0); + + Q_DISABLE_COPY(QAmqpQueue) + Q_DECLARE_PRIVATE(QAmqpQueue) + friend class QAmqpClient; + friend class QAmqpClientPrivate; + +}; + +#endif // QAMQPQUEUE_H diff --git a/app/external/qamqp/qamqpqueue_p.h b/app/external/qamqp/qamqpqueue_p.h new file mode 100644 index 0000000..a80beb4 --- /dev/null +++ b/app/external/qamqp/qamqpqueue_p.h @@ -0,0 +1,64 @@ +#ifndef QAMQPQUEUE_P_H +#define QAMQPQUEUE_P_H + +#include +#include + +#include "qamqpchannel_p.h" + +class QAmqpQueuePrivate: public QAmqpChannelPrivate, + public QAmqpContentFrameHandler, + public QAmqpContentBodyFrameHandler +{ +public: + enum MethodId { + METHOD_ID_ENUM(miDeclare, 10), + METHOD_ID_ENUM(miBind, 20), + METHOD_ID_ENUM(miUnbind, 50), + METHOD_ID_ENUM(miPurge, 30), + METHOD_ID_ENUM(miDelete, 40) + }; + + QAmqpQueuePrivate(QAmqpQueue *q); + ~QAmqpQueuePrivate(); + + virtual void resetInternalState(); + + void declare(); + virtual bool _q_method(const QAmqpMethodFrame &frame); + + // AMQP Queue method handlers + void declareOk(const QAmqpMethodFrame &frame); + void deleteOk(const QAmqpMethodFrame &frame); + void purgeOk(const QAmqpMethodFrame &frame); + void bindOk(const QAmqpMethodFrame &frame); + void unbindOk(const QAmqpMethodFrame &frame); + void consumeOk(const QAmqpMethodFrame &frame); + + // AMQP Basic method handlers + virtual void _q_content(const QAmqpContentFrame &frame); + virtual void _q_body(const QAmqpContentBodyFrame &frame); + void deliver(const QAmqpMethodFrame &frame); + void getOk(const QAmqpMethodFrame &frame); + void cancelOk(const QAmqpMethodFrame &frame); + + QString type; + int options; + bool delayedDeclare; + bool declared; + QQueue > delayedBindings; + + QString consumerTag; + bool recievingMessage; + QAmqpMessage currentMessage; + bool consuming; + bool consumeRequested; + + qint32 messageCount; + qint32 consumerCount; + + Q_DECLARE_PUBLIC(QAmqpQueue) + +}; + +#endif // QAMQPQUEUE_P_H diff --git a/app/external/qamqp/qamqptable.h b/app/external/qamqp/qamqptable.h new file mode 100644 index 0000000..454ee19 --- /dev/null +++ b/app/external/qamqp/qamqptable.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2012-2014 Alexey Shcherbakov + * Copyright (C) 2014-2015 Matt Broadstone + * Contact: https://github.com/mbroadst/qamqp + * + * This file is part of the QAMQP Library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ +#ifndef QAMQPTABLE_H +#define QAMQPTABLE_H + +#include + +#include "qamqpglobal.h" + +class QAMQP_EXPORT QAmqpTable : public QVariantHash +{ +public: + QAmqpTable() {} + inline QAmqpTable(const QVariantHash &variantHash) + : QVariantHash(variantHash) + { + } + + static void writeFieldValue(QDataStream &stream, const QVariant &value); + static void writeFieldValue(QDataStream &stream, QAmqpMetaType::ValueType type, const QVariant &value); + static QVariant readFieldValue(QDataStream &stream, QAmqpMetaType::ValueType type); +}; + +QAMQP_EXPORT QDataStream &operator<<(QDataStream &, const QAmqpTable &table); +QAMQP_EXPORT QDataStream &operator>>(QDataStream &, QAmqpTable &table); +Q_DECLARE_METATYPE(QAmqpTable) + +#endif // QAMQPTABLE_H diff --git a/app/main.cpp b/app/main.cpp index 4e80351..da372d1 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -1,4 +1,5 @@ #include +#include #include "HxTaskDispatch.h" @@ -9,13 +10,20 @@ int main(int argc, char *argv[]) /* 需要设置的运行时默认工作路径 */ QDir::setCurrent(QCoreApplication::applicationDirPath()); + /* 记录日志 */ + HxLog::append("application", "startup"); + + /* 设置最大线程个数 */ + QThreadPool::globalInstance()->setMaxThreadCount(100); + /* 数据库模块初始化 */ - DataBase::initialization(); + HxDataBase::initialization(); - TaskDispatch::initialization(); + HxTaskDispatch::initialization(); - TaskDispatch::listern(9031); - TaskDispatch::connect_to_host("192.168.10.10", 9031); + HxTaskDispatch::listern(9031); + // HxTaskDispatch::listern(9032); + HxTaskDispatch::connect_to_host("192.168.10.10", 9031); return a.exec(); }