Full Code of yanhua133/mediasoup-sfu-cpp for AI

main 7d209732907a cached
25774 files
214.9 MB
27.7M tokens
154725 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (110,531K chars total). Download the full file to get everything.
Repository: yanhua133/mediasoup-sfu-cpp
Branch: main
Commit: 7d209732907a
Files: 25774
Total size: 214.9 MB

Directory structure:
gitextract_pi_byr9p/

├── .gitignore
├── CMakeLists.txt
├── LICENSE
├── README.cn.md
├── README.md
├── build.sh
├── builddeps.sh
├── cmake/
│   └── llvm.toolchain.cmake
├── demo/
│   ├── AppComponent.hpp
│   ├── CMakeLists.txt
│   ├── Config.cpp
│   ├── Config.hpp
│   ├── PeerOld.cpp
│   ├── PeerOld.hpp
│   ├── RoomOld.cpp
│   ├── RoomOld.hpp
│   ├── Server.cpp
│   ├── Server.hpp
│   ├── Transfmt.cpp
│   ├── Transfmt.hpp
│   ├── config.json
│   ├── controller/
│   │   ├── RoomsController.hpp
│   │   └── StatisticsController.hpp
│   ├── dto/
│   │   ├── ConfigDto.hpp
│   │   └── DTOs.hpp
│   ├── main.cpp
│   ├── rooms/
│   │   ├── Lobby.cpp
│   │   ├── Lobby.hpp
│   │   ├── Message.cpp
│   │   ├── Message.h
│   │   ├── Peer.cpp
│   │   ├── Peer.hpp
│   │   ├── Room.cpp
│   │   └── Room.hpp
│   └── utils/
│       ├── Nickname.cpp
│       ├── Nickname.hpp
│       ├── Statistics.cpp
│       ├── Statistics.hpp
│       ├── util.cpp
│       └── util.h
├── deps/
│   ├── boost/
│   │   ├── build.bat
│   │   ├── build.sh
│   │   └── include/
│   │       └── boost/
│   │           ├── accumulators/
│   │           │   ├── accumulators.hpp
│   │           │   ├── accumulators_fwd.hpp
│   │           │   ├── framework/
│   │           │   │   ├── accumulator_base.hpp
│   │           │   │   ├── accumulator_concept.hpp
│   │           │   │   ├── accumulator_set.hpp
│   │           │   │   ├── accumulators/
│   │           │   │   │   ├── droppable_accumulator.hpp
│   │           │   │   │   ├── external_accumulator.hpp
│   │           │   │   │   ├── reference_accumulator.hpp
│   │           │   │   │   └── value_accumulator.hpp
│   │           │   │   ├── depends_on.hpp
│   │           │   │   ├── external.hpp
│   │           │   │   ├── extractor.hpp
│   │           │   │   ├── features.hpp
│   │           │   │   └── parameters/
│   │           │   │       ├── accumulator.hpp
│   │           │   │       ├── sample.hpp
│   │           │   │       ├── weight.hpp
│   │           │   │       └── weights.hpp
│   │           │   ├── numeric/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── function1.hpp
│   │           │   │   │   ├── function2.hpp
│   │           │   │   │   ├── function3.hpp
│   │           │   │   │   ├── function4.hpp
│   │           │   │   │   ├── function_n.hpp
│   │           │   │   │   └── pod_singleton.hpp
│   │           │   │   ├── functional/
│   │           │   │   │   ├── complex.hpp
│   │           │   │   │   ├── valarray.hpp
│   │           │   │   │   └── vector.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   └── functional_fwd.hpp
│   │           │   ├── statistics/
│   │           │   │   ├── count.hpp
│   │           │   │   ├── covariance.hpp
│   │           │   │   ├── density.hpp
│   │           │   │   ├── error_of.hpp
│   │           │   │   ├── error_of_mean.hpp
│   │           │   │   ├── extended_p_square.hpp
│   │           │   │   ├── extended_p_square_quantile.hpp
│   │           │   │   ├── kurtosis.hpp
│   │           │   │   ├── max.hpp
│   │           │   │   ├── mean.hpp
│   │           │   │   ├── median.hpp
│   │           │   │   ├── min.hpp
│   │           │   │   ├── moment.hpp
│   │           │   │   ├── p_square_cumul_dist.hpp
│   │           │   │   ├── p_square_cumulative_distribution.hpp
│   │           │   │   ├── p_square_quantile.hpp
│   │           │   │   ├── parameters/
│   │           │   │   │   └── quantile_probability.hpp
│   │           │   │   ├── peaks_over_threshold.hpp
│   │           │   │   ├── pot_quantile.hpp
│   │           │   │   ├── pot_tail_mean.hpp
│   │           │   │   ├── rolling_count.hpp
│   │           │   │   ├── rolling_mean.hpp
│   │           │   │   ├── rolling_moment.hpp
│   │           │   │   ├── rolling_sum.hpp
│   │           │   │   ├── rolling_variance.hpp
│   │           │   │   ├── rolling_window.hpp
│   │           │   │   ├── skewness.hpp
│   │           │   │   ├── stats.hpp
│   │           │   │   ├── sum.hpp
│   │           │   │   ├── sum_kahan.hpp
│   │           │   │   ├── tail.hpp
│   │           │   │   ├── tail_mean.hpp
│   │           │   │   ├── tail_quantile.hpp
│   │           │   │   ├── tail_variate.hpp
│   │           │   │   ├── tail_variate_means.hpp
│   │           │   │   ├── times2_iterator.hpp
│   │           │   │   ├── variance.hpp
│   │           │   │   ├── variates/
│   │           │   │   │   └── covariate.hpp
│   │           │   │   ├── weighted_covariance.hpp
│   │           │   │   ├── weighted_density.hpp
│   │           │   │   ├── weighted_extended_p_square.hpp
│   │           │   │   ├── weighted_kurtosis.hpp
│   │           │   │   ├── weighted_mean.hpp
│   │           │   │   ├── weighted_median.hpp
│   │           │   │   ├── weighted_moment.hpp
│   │           │   │   ├── weighted_p_square_cumul_dist.hpp
│   │           │   │   ├── weighted_p_square_cumulative_distribution.hpp
│   │           │   │   ├── weighted_p_square_quantile.hpp
│   │           │   │   ├── weighted_peaks_over_threshold.hpp
│   │           │   │   ├── weighted_skewness.hpp
│   │           │   │   ├── weighted_sum.hpp
│   │           │   │   ├── weighted_sum_kahan.hpp
│   │           │   │   ├── weighted_tail_mean.hpp
│   │           │   │   ├── weighted_tail_quantile.hpp
│   │           │   │   ├── weighted_tail_variate_means.hpp
│   │           │   │   ├── weighted_variance.hpp
│   │           │   │   └── with_error.hpp
│   │           │   ├── statistics.hpp
│   │           │   └── statistics_fwd.hpp
│   │           ├── algorithm/
│   │           │   ├── algorithm.hpp
│   │           │   ├── apply_permutation.hpp
│   │           │   ├── clamp.hpp
│   │           │   ├── cxx11/
│   │           │   │   ├── all_of.hpp
│   │           │   │   ├── any_of.hpp
│   │           │   │   ├── copy_if.hpp
│   │           │   │   ├── copy_n.hpp
│   │           │   │   ├── find_if_not.hpp
│   │           │   │   ├── iota.hpp
│   │           │   │   ├── is_partitioned.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── none_of.hpp
│   │           │   │   ├── one_of.hpp
│   │           │   │   ├── partition_copy.hpp
│   │           │   │   └── partition_point.hpp
│   │           │   ├── cxx14/
│   │           │   │   ├── equal.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   └── mismatch.hpp
│   │           │   ├── cxx17/
│   │           │   │   ├── exclusive_scan.hpp
│   │           │   │   ├── for_each_n.hpp
│   │           │   │   ├── inclusive_scan.hpp
│   │           │   │   ├── reduce.hpp
│   │           │   │   ├── transform_exclusive_scan.hpp
│   │           │   │   ├── transform_inclusive_scan.hpp
│   │           │   │   └── transform_reduce.hpp
│   │           │   ├── find_backward.hpp
│   │           │   ├── find_not.hpp
│   │           │   ├── gather.hpp
│   │           │   ├── hex.hpp
│   │           │   ├── is_palindrome.hpp
│   │           │   ├── is_partitioned_until.hpp
│   │           │   ├── minmax.hpp
│   │           │   ├── minmax_element.hpp
│   │           │   ├── searching/
│   │           │   │   ├── boyer_moore.hpp
│   │           │   │   ├── boyer_moore_horspool.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── bm_traits.hpp
│   │           │   │   │   └── debugging.hpp
│   │           │   │   └── knuth_morris_pratt.hpp
│   │           │   ├── sort_subrange.hpp
│   │           │   ├── string/
│   │           │   │   ├── case_conv.hpp
│   │           │   │   ├── classification.hpp
│   │           │   │   ├── compare.hpp
│   │           │   │   ├── concept.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── constants.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── case_conv.hpp
│   │           │   │   │   ├── classification.hpp
│   │           │   │   │   ├── find_format.hpp
│   │           │   │   │   ├── find_format_all.hpp
│   │           │   │   │   ├── find_format_store.hpp
│   │           │   │   │   ├── find_iterator.hpp
│   │           │   │   │   ├── finder.hpp
│   │           │   │   │   ├── finder_regex.hpp
│   │           │   │   │   ├── formatter.hpp
│   │           │   │   │   ├── formatter_regex.hpp
│   │           │   │   │   ├── predicate.hpp
│   │           │   │   │   ├── replace_storage.hpp
│   │           │   │   │   ├── sequence.hpp
│   │           │   │   │   ├── trim.hpp
│   │           │   │   │   └── util.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_format.hpp
│   │           │   │   ├── find_iterator.hpp
│   │           │   │   ├── finder.hpp
│   │           │   │   ├── formatter.hpp
│   │           │   │   ├── iter_find.hpp
│   │           │   │   ├── join.hpp
│   │           │   │   ├── predicate.hpp
│   │           │   │   ├── predicate_facade.hpp
│   │           │   │   ├── regex.hpp
│   │           │   │   ├── regex_find_format.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── sequence_traits.hpp
│   │           │   │   ├── split.hpp
│   │           │   │   ├── std/
│   │           │   │   │   ├── list_traits.hpp
│   │           │   │   │   ├── rope_traits.hpp
│   │           │   │   │   ├── slist_traits.hpp
│   │           │   │   │   └── string_traits.hpp
│   │           │   │   ├── std_containers_traits.hpp
│   │           │   │   ├── trim.hpp
│   │           │   │   ├── trim_all.hpp
│   │           │   │   └── yes_no_type.hpp
│   │           │   ├── string.hpp
│   │           │   └── string_regex.hpp
│   │           ├── align/
│   │           │   ├── align.hpp
│   │           │   ├── align_down.hpp
│   │           │   ├── align_up.hpp
│   │           │   ├── aligned_alloc.hpp
│   │           │   ├── aligned_allocator.hpp
│   │           │   ├── aligned_allocator_adaptor.hpp
│   │           │   ├── aligned_allocator_adaptor_forward.hpp
│   │           │   ├── aligned_allocator_forward.hpp
│   │           │   ├── aligned_delete.hpp
│   │           │   ├── aligned_delete_forward.hpp
│   │           │   ├── alignment_of.hpp
│   │           │   ├── alignment_of_forward.hpp
│   │           │   ├── assume_aligned.hpp
│   │           │   ├── detail/
│   │           │   │   ├── add_reference.hpp
│   │           │   │   ├── align.hpp
│   │           │   │   ├── align_cxx11.hpp
│   │           │   │   ├── align_down.hpp
│   │           │   │   ├── align_up.hpp
│   │           │   │   ├── aligned_alloc.hpp
│   │           │   │   ├── aligned_alloc_android.hpp
│   │           │   │   ├── aligned_alloc_macos.hpp
│   │           │   │   ├── aligned_alloc_mingw.hpp
│   │           │   │   ├── aligned_alloc_msvc.hpp
│   │           │   │   ├── aligned_alloc_new.hpp
│   │           │   │   ├── aligned_alloc_posix.hpp
│   │           │   │   ├── aligned_alloc_sunos.hpp
│   │           │   │   ├── alignment_of.hpp
│   │           │   │   ├── alignment_of_clang.hpp
│   │           │   │   ├── alignment_of_codegear.hpp
│   │           │   │   ├── alignment_of_cxx11.hpp
│   │           │   │   ├── alignment_of_gcc.hpp
│   │           │   │   ├── alignment_of_msvc.hpp
│   │           │   │   ├── assume_aligned.hpp
│   │           │   │   ├── assume_aligned_clang.hpp
│   │           │   │   ├── assume_aligned_gcc.hpp
│   │           │   │   ├── assume_aligned_intel.hpp
│   │           │   │   ├── assume_aligned_msvc.hpp
│   │           │   │   ├── element_type.hpp
│   │           │   │   ├── integral_constant.hpp
│   │           │   │   ├── is_aligned.hpp
│   │           │   │   ├── is_alignment.hpp
│   │           │   │   ├── is_alignment_constant.hpp
│   │           │   │   ├── max_align.hpp
│   │           │   │   ├── max_objects.hpp
│   │           │   │   ├── max_size.hpp
│   │           │   │   ├── min_size.hpp
│   │           │   │   ├── not_pointer.hpp
│   │           │   │   └── throw_exception.hpp
│   │           │   └── is_aligned.hpp
│   │           ├── align.hpp
│   │           ├── aligned_storage.hpp
│   │           ├── any.hpp
│   │           ├── archive/
│   │           │   ├── archive_exception.hpp
│   │           │   ├── basic_archive.hpp
│   │           │   ├── basic_binary_iarchive.hpp
│   │           │   ├── basic_binary_iprimitive.hpp
│   │           │   ├── basic_binary_oarchive.hpp
│   │           │   ├── basic_binary_oprimitive.hpp
│   │           │   ├── basic_streambuf_locale_saver.hpp
│   │           │   ├── basic_text_iarchive.hpp
│   │           │   ├── basic_text_iprimitive.hpp
│   │           │   ├── basic_text_oarchive.hpp
│   │           │   ├── basic_text_oprimitive.hpp
│   │           │   ├── basic_xml_archive.hpp
│   │           │   ├── basic_xml_iarchive.hpp
│   │           │   ├── basic_xml_oarchive.hpp
│   │           │   ├── binary_iarchive.hpp
│   │           │   ├── binary_iarchive_impl.hpp
│   │           │   ├── binary_oarchive.hpp
│   │           │   ├── binary_oarchive_impl.hpp
│   │           │   ├── binary_wiarchive.hpp
│   │           │   ├── binary_woarchive.hpp
│   │           │   ├── codecvt_null.hpp
│   │           │   ├── detail/
│   │           │   │   ├── abi_prefix.hpp
│   │           │   │   ├── abi_suffix.hpp
│   │           │   │   ├── archive_serializer_map.hpp
│   │           │   │   ├── auto_link_archive.hpp
│   │           │   │   ├── auto_link_warchive.hpp
│   │           │   │   ├── basic_iarchive.hpp
│   │           │   │   ├── basic_iserializer.hpp
│   │           │   │   ├── basic_oarchive.hpp
│   │           │   │   ├── basic_oserializer.hpp
│   │           │   │   ├── basic_pointer_iserializer.hpp
│   │           │   │   ├── basic_pointer_oserializer.hpp
│   │           │   │   ├── basic_serializer.hpp
│   │           │   │   ├── basic_serializer_map.hpp
│   │           │   │   ├── check.hpp
│   │           │   │   ├── common_iarchive.hpp
│   │           │   │   ├── common_oarchive.hpp
│   │           │   │   ├── decl.hpp
│   │           │   │   ├── helper_collection.hpp
│   │           │   │   ├── interface_iarchive.hpp
│   │           │   │   ├── interface_oarchive.hpp
│   │           │   │   ├── iserializer.hpp
│   │           │   │   ├── oserializer.hpp
│   │           │   │   ├── polymorphic_iarchive_route.hpp
│   │           │   │   ├── polymorphic_oarchive_route.hpp
│   │           │   │   ├── register_archive.hpp
│   │           │   │   └── utf8_codecvt_facet.hpp
│   │           │   ├── dinkumware.hpp
│   │           │   ├── impl/
│   │           │   │   ├── archive_serializer_map.ipp
│   │           │   │   ├── basic_binary_iarchive.ipp
│   │           │   │   ├── basic_binary_iprimitive.ipp
│   │           │   │   ├── basic_binary_oarchive.ipp
│   │           │   │   ├── basic_binary_oprimitive.ipp
│   │           │   │   ├── basic_text_iarchive.ipp
│   │           │   │   ├── basic_text_iprimitive.ipp
│   │           │   │   ├── basic_text_oarchive.ipp
│   │           │   │   ├── basic_text_oprimitive.ipp
│   │           │   │   ├── basic_xml_grammar.hpp
│   │           │   │   ├── basic_xml_iarchive.ipp
│   │           │   │   ├── basic_xml_oarchive.ipp
│   │           │   │   ├── text_iarchive_impl.ipp
│   │           │   │   ├── text_oarchive_impl.ipp
│   │           │   │   ├── text_wiarchive_impl.ipp
│   │           │   │   ├── text_woarchive_impl.ipp
│   │           │   │   ├── xml_iarchive_impl.ipp
│   │           │   │   ├── xml_oarchive_impl.ipp
│   │           │   │   ├── xml_wiarchive_impl.ipp
│   │           │   │   └── xml_woarchive_impl.ipp
│   │           │   ├── iterators/
│   │           │   │   ├── base64_exception.hpp
│   │           │   │   ├── base64_from_binary.hpp
│   │           │   │   ├── binary_from_base64.hpp
│   │           │   │   ├── dataflow.hpp
│   │           │   │   ├── dataflow_exception.hpp
│   │           │   │   ├── escape.hpp
│   │           │   │   ├── insert_linebreaks.hpp
│   │           │   │   ├── istream_iterator.hpp
│   │           │   │   ├── mb_from_wchar.hpp
│   │           │   │   ├── ostream_iterator.hpp
│   │           │   │   ├── remove_whitespace.hpp
│   │           │   │   ├── transform_width.hpp
│   │           │   │   ├── unescape.hpp
│   │           │   │   ├── wchar_from_mb.hpp
│   │           │   │   ├── xml_escape.hpp
│   │           │   │   ├── xml_unescape.hpp
│   │           │   │   └── xml_unescape_exception.hpp
│   │           │   ├── polymorphic_binary_iarchive.hpp
│   │           │   ├── polymorphic_binary_oarchive.hpp
│   │           │   ├── polymorphic_iarchive.hpp
│   │           │   ├── polymorphic_oarchive.hpp
│   │           │   ├── polymorphic_text_iarchive.hpp
│   │           │   ├── polymorphic_text_oarchive.hpp
│   │           │   ├── polymorphic_text_wiarchive.hpp
│   │           │   ├── polymorphic_text_woarchive.hpp
│   │           │   ├── polymorphic_xml_iarchive.hpp
│   │           │   ├── polymorphic_xml_oarchive.hpp
│   │           │   ├── polymorphic_xml_wiarchive.hpp
│   │           │   ├── polymorphic_xml_woarchive.hpp
│   │           │   ├── text_iarchive.hpp
│   │           │   ├── text_oarchive.hpp
│   │           │   ├── text_wiarchive.hpp
│   │           │   ├── text_woarchive.hpp
│   │           │   ├── tmpdir.hpp
│   │           │   ├── wcslen.hpp
│   │           │   ├── xml_archive_exception.hpp
│   │           │   ├── xml_iarchive.hpp
│   │           │   ├── xml_oarchive.hpp
│   │           │   ├── xml_wiarchive.hpp
│   │           │   └── xml_woarchive.hpp
│   │           ├── array.hpp
│   │           ├── asio/
│   │           │   ├── any_io_executor.hpp
│   │           │   ├── associated_allocator.hpp
│   │           │   ├── associated_executor.hpp
│   │           │   ├── async_result.hpp
│   │           │   ├── awaitable.hpp
│   │           │   ├── basic_datagram_socket.hpp
│   │           │   ├── basic_deadline_timer.hpp
│   │           │   ├── basic_io_object.hpp
│   │           │   ├── basic_raw_socket.hpp
│   │           │   ├── basic_seq_packet_socket.hpp
│   │           │   ├── basic_serial_port.hpp
│   │           │   ├── basic_signal_set.hpp
│   │           │   ├── basic_socket.hpp
│   │           │   ├── basic_socket_acceptor.hpp
│   │           │   ├── basic_socket_iostream.hpp
│   │           │   ├── basic_socket_streambuf.hpp
│   │           │   ├── basic_stream_socket.hpp
│   │           │   ├── basic_streambuf.hpp
│   │           │   ├── basic_streambuf_fwd.hpp
│   │           │   ├── basic_waitable_timer.hpp
│   │           │   ├── bind_executor.hpp
│   │           │   ├── buffer.hpp
│   │           │   ├── buffered_read_stream.hpp
│   │           │   ├── buffered_read_stream_fwd.hpp
│   │           │   ├── buffered_stream.hpp
│   │           │   ├── buffered_stream_fwd.hpp
│   │           │   ├── buffered_write_stream.hpp
│   │           │   ├── buffered_write_stream_fwd.hpp
│   │           │   ├── buffers_iterator.hpp
│   │           │   ├── co_spawn.hpp
│   │           │   ├── completion_condition.hpp
│   │           │   ├── compose.hpp
│   │           │   ├── connect.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── deadline_timer.hpp
│   │           │   ├── defer.hpp
│   │           │   ├── detached.hpp
│   │           │   ├── detail/
│   │           │   │   ├── array.hpp
│   │           │   │   ├── array_fwd.hpp
│   │           │   │   ├── assert.hpp
│   │           │   │   ├── atomic_count.hpp
│   │           │   │   ├── base_from_completion_cond.hpp
│   │           │   │   ├── bind_handler.hpp
│   │           │   │   ├── blocking_executor_op.hpp
│   │           │   │   ├── buffer_resize_guard.hpp
│   │           │   │   ├── buffer_sequence_adapter.hpp
│   │           │   │   ├── buffered_stream_storage.hpp
│   │           │   │   ├── bulk_executor_op.hpp
│   │           │   │   ├── call_stack.hpp
│   │           │   │   ├── chrono.hpp
│   │           │   │   ├── chrono_time_traits.hpp
│   │           │   │   ├── completion_handler.hpp
│   │           │   │   ├── concurrency_hint.hpp
│   │           │   │   ├── conditionally_enabled_event.hpp
│   │           │   │   ├── conditionally_enabled_mutex.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── consuming_buffers.hpp
│   │           │   │   ├── cstddef.hpp
│   │           │   │   ├── cstdint.hpp
│   │           │   │   ├── date_time_fwd.hpp
│   │           │   │   ├── deadline_timer_service.hpp
│   │           │   │   ├── dependent_type.hpp
│   │           │   │   ├── descriptor_ops.hpp
│   │           │   │   ├── descriptor_read_op.hpp
│   │           │   │   ├── descriptor_write_op.hpp
│   │           │   │   ├── dev_poll_reactor.hpp
│   │           │   │   ├── epoll_reactor.hpp
│   │           │   │   ├── event.hpp
│   │           │   │   ├── eventfd_select_interrupter.hpp
│   │           │   │   ├── executor_function.hpp
│   │           │   │   ├── executor_op.hpp
│   │           │   │   ├── fd_set_adapter.hpp
│   │           │   │   ├── fenced_block.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── future.hpp
│   │           │   │   ├── gcc_arm_fenced_block.hpp
│   │           │   │   ├── gcc_hppa_fenced_block.hpp
│   │           │   │   ├── gcc_sync_fenced_block.hpp
│   │           │   │   ├── gcc_x86_fenced_block.hpp
│   │           │   │   ├── global.hpp
│   │           │   │   ├── handler_alloc_helpers.hpp
│   │           │   │   ├── handler_cont_helpers.hpp
│   │           │   │   ├── handler_invoke_helpers.hpp
│   │           │   │   ├── handler_tracking.hpp
│   │           │   │   ├── handler_type_requirements.hpp
│   │           │   │   ├── handler_work.hpp
│   │           │   │   ├── hash_map.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── buffer_sequence_adapter.ipp
│   │           │   │   │   ├── descriptor_ops.ipp
│   │           │   │   │   ├── dev_poll_reactor.hpp
│   │           │   │   │   ├── dev_poll_reactor.ipp
│   │           │   │   │   ├── epoll_reactor.hpp
│   │           │   │   │   ├── epoll_reactor.ipp
│   │           │   │   │   ├── eventfd_select_interrupter.ipp
│   │           │   │   │   ├── handler_tracking.ipp
│   │           │   │   │   ├── kqueue_reactor.hpp
│   │           │   │   │   ├── kqueue_reactor.ipp
│   │           │   │   │   ├── null_event.ipp
│   │           │   │   │   ├── pipe_select_interrupter.ipp
│   │           │   │   │   ├── posix_event.ipp
│   │           │   │   │   ├── posix_mutex.ipp
│   │           │   │   │   ├── posix_thread.ipp
│   │           │   │   │   ├── posix_tss_ptr.ipp
│   │           │   │   │   ├── reactive_descriptor_service.ipp
│   │           │   │   │   ├── reactive_serial_port_service.ipp
│   │           │   │   │   ├── reactive_socket_service_base.ipp
│   │           │   │   │   ├── resolver_service_base.ipp
│   │           │   │   │   ├── scheduler.ipp
│   │           │   │   │   ├── select_reactor.hpp
│   │           │   │   │   ├── select_reactor.ipp
│   │           │   │   │   ├── service_registry.hpp
│   │           │   │   │   ├── service_registry.ipp
│   │           │   │   │   ├── signal_set_service.ipp
│   │           │   │   │   ├── socket_ops.ipp
│   │           │   │   │   ├── socket_select_interrupter.ipp
│   │           │   │   │   ├── strand_executor_service.hpp
│   │           │   │   │   ├── strand_executor_service.ipp
│   │           │   │   │   ├── strand_service.hpp
│   │           │   │   │   ├── strand_service.ipp
│   │           │   │   │   ├── throw_error.ipp
│   │           │   │   │   ├── timer_queue_ptime.ipp
│   │           │   │   │   ├── timer_queue_set.ipp
│   │           │   │   │   ├── win_event.ipp
│   │           │   │   │   ├── win_iocp_handle_service.ipp
│   │           │   │   │   ├── win_iocp_io_context.hpp
│   │           │   │   │   ├── win_iocp_io_context.ipp
│   │           │   │   │   ├── win_iocp_serial_port_service.ipp
│   │           │   │   │   ├── win_iocp_socket_service_base.ipp
│   │           │   │   │   ├── win_mutex.ipp
│   │           │   │   │   ├── win_object_handle_service.ipp
│   │           │   │   │   ├── win_static_mutex.ipp
│   │           │   │   │   ├── win_thread.ipp
│   │           │   │   │   ├── win_tss_ptr.ipp
│   │           │   │   │   ├── winrt_ssocket_service_base.ipp
│   │           │   │   │   ├── winrt_timer_scheduler.hpp
│   │           │   │   │   ├── winrt_timer_scheduler.ipp
│   │           │   │   │   └── winsock_init.ipp
│   │           │   │   ├── io_control.hpp
│   │           │   │   ├── io_object_impl.hpp
│   │           │   │   ├── is_buffer_sequence.hpp
│   │           │   │   ├── is_executor.hpp
│   │           │   │   ├── keyword_tss_ptr.hpp
│   │           │   │   ├── kqueue_reactor.hpp
│   │           │   │   ├── limits.hpp
│   │           │   │   ├── local_free_on_block_exit.hpp
│   │           │   │   ├── macos_fenced_block.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── non_const_lvalue.hpp
│   │           │   │   ├── noncopyable.hpp
│   │           │   │   ├── null_event.hpp
│   │           │   │   ├── null_fenced_block.hpp
│   │           │   │   ├── null_global.hpp
│   │           │   │   ├── null_mutex.hpp
│   │           │   │   ├── null_reactor.hpp
│   │           │   │   ├── null_signal_blocker.hpp
│   │           │   │   ├── null_socket_service.hpp
│   │           │   │   ├── null_static_mutex.hpp
│   │           │   │   ├── null_thread.hpp
│   │           │   │   ├── null_tss_ptr.hpp
│   │           │   │   ├── object_pool.hpp
│   │           │   │   ├── old_win_sdk_compat.hpp
│   │           │   │   ├── op_queue.hpp
│   │           │   │   ├── operation.hpp
│   │           │   │   ├── pipe_select_interrupter.hpp
│   │           │   │   ├── pop_options.hpp
│   │           │   │   ├── posix_event.hpp
│   │           │   │   ├── posix_fd_set_adapter.hpp
│   │           │   │   ├── posix_global.hpp
│   │           │   │   ├── posix_mutex.hpp
│   │           │   │   ├── posix_signal_blocker.hpp
│   │           │   │   ├── posix_static_mutex.hpp
│   │           │   │   ├── posix_thread.hpp
│   │           │   │   ├── posix_tss_ptr.hpp
│   │           │   │   ├── push_options.hpp
│   │           │   │   ├── reactive_descriptor_service.hpp
│   │           │   │   ├── reactive_null_buffers_op.hpp
│   │           │   │   ├── reactive_serial_port_service.hpp
│   │           │   │   ├── reactive_socket_accept_op.hpp
│   │           │   │   ├── reactive_socket_connect_op.hpp
│   │           │   │   ├── reactive_socket_recv_op.hpp
│   │           │   │   ├── reactive_socket_recvfrom_op.hpp
│   │           │   │   ├── reactive_socket_recvmsg_op.hpp
│   │           │   │   ├── reactive_socket_send_op.hpp
│   │           │   │   ├── reactive_socket_sendto_op.hpp
│   │           │   │   ├── reactive_socket_service.hpp
│   │           │   │   ├── reactive_socket_service_base.hpp
│   │           │   │   ├── reactive_wait_op.hpp
│   │           │   │   ├── reactor.hpp
│   │           │   │   ├── reactor_fwd.hpp
│   │           │   │   ├── reactor_op.hpp
│   │           │   │   ├── reactor_op_queue.hpp
│   │           │   │   ├── recycling_allocator.hpp
│   │           │   │   ├── regex_fwd.hpp
│   │           │   │   ├── resolve_endpoint_op.hpp
│   │           │   │   ├── resolve_op.hpp
│   │           │   │   ├── resolve_query_op.hpp
│   │           │   │   ├── resolver_service.hpp
│   │           │   │   ├── resolver_service_base.hpp
│   │           │   │   ├── scheduler.hpp
│   │           │   │   ├── scheduler_operation.hpp
│   │           │   │   ├── scheduler_thread_info.hpp
│   │           │   │   ├── scoped_lock.hpp
│   │           │   │   ├── scoped_ptr.hpp
│   │           │   │   ├── select_interrupter.hpp
│   │           │   │   ├── select_reactor.hpp
│   │           │   │   ├── service_registry.hpp
│   │           │   │   ├── signal_blocker.hpp
│   │           │   │   ├── signal_handler.hpp
│   │           │   │   ├── signal_init.hpp
│   │           │   │   ├── signal_op.hpp
│   │           │   │   ├── signal_set_service.hpp
│   │           │   │   ├── socket_holder.hpp
│   │           │   │   ├── socket_ops.hpp
│   │           │   │   ├── socket_option.hpp
│   │           │   │   ├── socket_select_interrupter.hpp
│   │           │   │   ├── socket_types.hpp
│   │           │   │   ├── solaris_fenced_block.hpp
│   │           │   │   ├── source_location.hpp
│   │           │   │   ├── static_mutex.hpp
│   │           │   │   ├── std_event.hpp
│   │           │   │   ├── std_fenced_block.hpp
│   │           │   │   ├── std_global.hpp
│   │           │   │   ├── std_mutex.hpp
│   │           │   │   ├── std_static_mutex.hpp
│   │           │   │   ├── std_thread.hpp
│   │           │   │   ├── strand_executor_service.hpp
│   │           │   │   ├── strand_service.hpp
│   │           │   │   ├── string_view.hpp
│   │           │   │   ├── thread.hpp
│   │           │   │   ├── thread_context.hpp
│   │           │   │   ├── thread_group.hpp
│   │           │   │   ├── thread_info_base.hpp
│   │           │   │   ├── throw_error.hpp
│   │           │   │   ├── throw_exception.hpp
│   │           │   │   ├── timer_queue.hpp
│   │           │   │   ├── timer_queue_base.hpp
│   │           │   │   ├── timer_queue_ptime.hpp
│   │           │   │   ├── timer_queue_set.hpp
│   │           │   │   ├── timer_scheduler.hpp
│   │           │   │   ├── timer_scheduler_fwd.hpp
│   │           │   │   ├── tss_ptr.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── variadic_templates.hpp
│   │           │   │   ├── wait_handler.hpp
│   │           │   │   ├── wait_op.hpp
│   │           │   │   ├── win_event.hpp
│   │           │   │   ├── win_fd_set_adapter.hpp
│   │           │   │   ├── win_fenced_block.hpp
│   │           │   │   ├── win_global.hpp
│   │           │   │   ├── win_iocp_handle_read_op.hpp
│   │           │   │   ├── win_iocp_handle_service.hpp
│   │           │   │   ├── win_iocp_handle_write_op.hpp
│   │           │   │   ├── win_iocp_io_context.hpp
│   │           │   │   ├── win_iocp_null_buffers_op.hpp
│   │           │   │   ├── win_iocp_operation.hpp
│   │           │   │   ├── win_iocp_overlapped_op.hpp
│   │           │   │   ├── win_iocp_overlapped_ptr.hpp
│   │           │   │   ├── win_iocp_serial_port_service.hpp
│   │           │   │   ├── win_iocp_socket_accept_op.hpp
│   │           │   │   ├── win_iocp_socket_connect_op.hpp
│   │           │   │   ├── win_iocp_socket_recv_op.hpp
│   │           │   │   ├── win_iocp_socket_recvfrom_op.hpp
│   │           │   │   ├── win_iocp_socket_recvmsg_op.hpp
│   │           │   │   ├── win_iocp_socket_send_op.hpp
│   │           │   │   ├── win_iocp_socket_service.hpp
│   │           │   │   ├── win_iocp_socket_service_base.hpp
│   │           │   │   ├── win_iocp_thread_info.hpp
│   │           │   │   ├── win_iocp_wait_op.hpp
│   │           │   │   ├── win_mutex.hpp
│   │           │   │   ├── win_object_handle_service.hpp
│   │           │   │   ├── win_static_mutex.hpp
│   │           │   │   ├── win_thread.hpp
│   │           │   │   ├── win_tss_ptr.hpp
│   │           │   │   ├── winapp_thread.hpp
│   │           │   │   ├── wince_thread.hpp
│   │           │   │   ├── winrt_async_manager.hpp
│   │           │   │   ├── winrt_async_op.hpp
│   │           │   │   ├── winrt_resolve_op.hpp
│   │           │   │   ├── winrt_resolver_service.hpp
│   │           │   │   ├── winrt_socket_connect_op.hpp
│   │           │   │   ├── winrt_socket_recv_op.hpp
│   │           │   │   ├── winrt_socket_send_op.hpp
│   │           │   │   ├── winrt_ssocket_service.hpp
│   │           │   │   ├── winrt_ssocket_service_base.hpp
│   │           │   │   ├── winrt_timer_scheduler.hpp
│   │           │   │   ├── winrt_utils.hpp
│   │           │   │   ├── winsock_init.hpp
│   │           │   │   ├── work_dispatcher.hpp
│   │           │   │   └── wrapped_handler.hpp
│   │           │   ├── dispatch.hpp
│   │           │   ├── error.hpp
│   │           │   ├── execution/
│   │           │   │   ├── allocator.hpp
│   │           │   │   ├── any_executor.hpp
│   │           │   │   ├── bad_executor.hpp
│   │           │   │   ├── blocking.hpp
│   │           │   │   ├── blocking_adaptation.hpp
│   │           │   │   ├── bulk_execute.hpp
│   │           │   │   ├── bulk_guarantee.hpp
│   │           │   │   ├── connect.hpp
│   │           │   │   ├── context.hpp
│   │           │   │   ├── context_as.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── as_invocable.hpp
│   │           │   │   │   ├── as_operation.hpp
│   │           │   │   │   ├── as_receiver.hpp
│   │           │   │   │   ├── bulk_sender.hpp
│   │           │   │   │   ├── submit_receiver.hpp
│   │           │   │   │   └── void_receiver.hpp
│   │           │   │   ├── execute.hpp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── bad_executor.ipp
│   │           │   │   │   └── receiver_invocation_error.ipp
│   │           │   │   ├── invocable_archetype.hpp
│   │           │   │   ├── mapping.hpp
│   │           │   │   ├── occupancy.hpp
│   │           │   │   ├── operation_state.hpp
│   │           │   │   ├── outstanding_work.hpp
│   │           │   │   ├── prefer_only.hpp
│   │           │   │   ├── receiver.hpp
│   │           │   │   ├── receiver_invocation_error.hpp
│   │           │   │   ├── relationship.hpp
│   │           │   │   ├── schedule.hpp
│   │           │   │   ├── scheduler.hpp
│   │           │   │   ├── sender.hpp
│   │           │   │   ├── set_done.hpp
│   │           │   │   ├── set_error.hpp
│   │           │   │   ├── set_value.hpp
│   │           │   │   ├── start.hpp
│   │           │   │   └── submit.hpp
│   │           │   ├── execution.hpp
│   │           │   ├── execution_context.hpp
│   │           │   ├── executor.hpp
│   │           │   ├── executor_work_guard.hpp
│   │           │   ├── generic/
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── datagram_protocol.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── endpoint.ipp
│   │           │   │   ├── raw_protocol.hpp
│   │           │   │   ├── seq_packet_protocol.hpp
│   │           │   │   └── stream_protocol.hpp
│   │           │   ├── handler_alloc_hook.hpp
│   │           │   ├── handler_continuation_hook.hpp
│   │           │   ├── handler_invoke_hook.hpp
│   │           │   ├── high_resolution_timer.hpp
│   │           │   ├── impl/
│   │           │   │   ├── awaitable.hpp
│   │           │   │   ├── buffered_read_stream.hpp
│   │           │   │   ├── buffered_write_stream.hpp
│   │           │   │   ├── co_spawn.hpp
│   │           │   │   ├── compose.hpp
│   │           │   │   ├── connect.hpp
│   │           │   │   ├── defer.hpp
│   │           │   │   ├── detached.hpp
│   │           │   │   ├── dispatch.hpp
│   │           │   │   ├── error.ipp
│   │           │   │   ├── execution_context.hpp
│   │           │   │   ├── execution_context.ipp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── executor.ipp
│   │           │   │   ├── handler_alloc_hook.ipp
│   │           │   │   ├── io_context.hpp
│   │           │   │   ├── io_context.ipp
│   │           │   │   ├── multiple_exceptions.ipp
│   │           │   │   ├── post.hpp
│   │           │   │   ├── read.hpp
│   │           │   │   ├── read_at.hpp
│   │           │   │   ├── read_until.hpp
│   │           │   │   ├── redirect_error.hpp
│   │           │   │   ├── serial_port_base.hpp
│   │           │   │   ├── serial_port_base.ipp
│   │           │   │   ├── spawn.hpp
│   │           │   │   ├── src.cpp
│   │           │   │   ├── src.hpp
│   │           │   │   ├── system_context.hpp
│   │           │   │   ├── system_context.ipp
│   │           │   │   ├── system_executor.hpp
│   │           │   │   ├── thread_pool.hpp
│   │           │   │   ├── thread_pool.ipp
│   │           │   │   ├── use_awaitable.hpp
│   │           │   │   ├── use_future.hpp
│   │           │   │   ├── write.hpp
│   │           │   │   └── write_at.hpp
│   │           │   ├── io_context.hpp
│   │           │   ├── io_context_strand.hpp
│   │           │   ├── io_service.hpp
│   │           │   ├── io_service_strand.hpp
│   │           │   ├── ip/
│   │           │   │   ├── address.hpp
│   │           │   │   ├── address_v4.hpp
│   │           │   │   ├── address_v4_iterator.hpp
│   │           │   │   ├── address_v4_range.hpp
│   │           │   │   ├── address_v6.hpp
│   │           │   │   ├── address_v6_iterator.hpp
│   │           │   │   ├── address_v6_range.hpp
│   │           │   │   ├── bad_address_cast.hpp
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── basic_resolver.hpp
│   │           │   │   ├── basic_resolver_entry.hpp
│   │           │   │   ├── basic_resolver_iterator.hpp
│   │           │   │   ├── basic_resolver_query.hpp
│   │           │   │   ├── basic_resolver_results.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   └── endpoint.ipp
│   │           │   │   │   └── socket_option.hpp
│   │           │   │   ├── host_name.hpp
│   │           │   │   ├── icmp.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── address.hpp
│   │           │   │   │   ├── address.ipp
│   │           │   │   │   ├── address_v4.hpp
│   │           │   │   │   ├── address_v4.ipp
│   │           │   │   │   ├── address_v6.hpp
│   │           │   │   │   ├── address_v6.ipp
│   │           │   │   │   ├── basic_endpoint.hpp
│   │           │   │   │   ├── host_name.ipp
│   │           │   │   │   ├── network_v4.hpp
│   │           │   │   │   ├── network_v4.ipp
│   │           │   │   │   ├── network_v6.hpp
│   │           │   │   │   └── network_v6.ipp
│   │           │   │   ├── multicast.hpp
│   │           │   │   ├── network_v4.hpp
│   │           │   │   ├── network_v6.hpp
│   │           │   │   ├── resolver_base.hpp
│   │           │   │   ├── resolver_query_base.hpp
│   │           │   │   ├── tcp.hpp
│   │           │   │   ├── udp.hpp
│   │           │   │   ├── unicast.hpp
│   │           │   │   └── v6_only.hpp
│   │           │   ├── is_applicable_property.hpp
│   │           │   ├── is_executor.hpp
│   │           │   ├── is_read_buffered.hpp
│   │           │   ├── is_write_buffered.hpp
│   │           │   ├── local/
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── connect_pair.hpp
│   │           │   │   ├── datagram_protocol.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── endpoint.ipp
│   │           │   │   └── stream_protocol.hpp
│   │           │   ├── multiple_exceptions.hpp
│   │           │   ├── packaged_task.hpp
│   │           │   ├── placeholders.hpp
│   │           │   ├── posix/
│   │           │   │   ├── basic_descriptor.hpp
│   │           │   │   ├── basic_stream_descriptor.hpp
│   │           │   │   ├── descriptor.hpp
│   │           │   │   ├── descriptor_base.hpp
│   │           │   │   └── stream_descriptor.hpp
│   │           │   ├── post.hpp
│   │           │   ├── prefer.hpp
│   │           │   ├── query.hpp
│   │           │   ├── read.hpp
│   │           │   ├── read_at.hpp
│   │           │   ├── read_until.hpp
│   │           │   ├── redirect_error.hpp
│   │           │   ├── require.hpp
│   │           │   ├── require_concept.hpp
│   │           │   ├── serial_port.hpp
│   │           │   ├── serial_port_base.hpp
│   │           │   ├── signal_set.hpp
│   │           │   ├── socket_base.hpp
│   │           │   ├── spawn.hpp
│   │           │   ├── ssl/
│   │           │   │   ├── context.hpp
│   │           │   │   ├── context_base.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── buffered_handshake_op.hpp
│   │           │   │   │   ├── engine.hpp
│   │           │   │   │   ├── handshake_op.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── engine.ipp
│   │           │   │   │   │   └── openssl_init.ipp
│   │           │   │   │   ├── io.hpp
│   │           │   │   │   ├── openssl_init.hpp
│   │           │   │   │   ├── openssl_types.hpp
│   │           │   │   │   ├── password_callback.hpp
│   │           │   │   │   ├── read_op.hpp
│   │           │   │   │   ├── shutdown_op.hpp
│   │           │   │   │   ├── stream_core.hpp
│   │           │   │   │   ├── verify_callback.hpp
│   │           │   │   │   └── write_op.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── host_name_verification.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── context.hpp
│   │           │   │   │   ├── context.ipp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── host_name_verification.ipp
│   │           │   │   │   ├── rfc2818_verification.ipp
│   │           │   │   │   └── src.hpp
│   │           │   │   ├── rfc2818_verification.hpp
│   │           │   │   ├── stream.hpp
│   │           │   │   ├── stream_base.hpp
│   │           │   │   ├── verify_context.hpp
│   │           │   │   └── verify_mode.hpp
│   │           │   ├── ssl.hpp
│   │           │   ├── static_thread_pool.hpp
│   │           │   ├── steady_timer.hpp
│   │           │   ├── strand.hpp
│   │           │   ├── streambuf.hpp
│   │           │   ├── system_context.hpp
│   │           │   ├── system_executor.hpp
│   │           │   ├── system_timer.hpp
│   │           │   ├── this_coro.hpp
│   │           │   ├── thread_pool.hpp
│   │           │   ├── time_traits.hpp
│   │           │   ├── traits/
│   │           │   │   ├── bulk_execute_free.hpp
│   │           │   │   ├── bulk_execute_member.hpp
│   │           │   │   ├── connect_free.hpp
│   │           │   │   ├── connect_member.hpp
│   │           │   │   ├── equality_comparable.hpp
│   │           │   │   ├── execute_free.hpp
│   │           │   │   ├── execute_member.hpp
│   │           │   │   ├── prefer_free.hpp
│   │           │   │   ├── prefer_member.hpp
│   │           │   │   ├── query_free.hpp
│   │           │   │   ├── query_member.hpp
│   │           │   │   ├── query_static_constexpr_member.hpp
│   │           │   │   ├── require_concept_free.hpp
│   │           │   │   ├── require_concept_member.hpp
│   │           │   │   ├── require_free.hpp
│   │           │   │   ├── require_member.hpp
│   │           │   │   ├── schedule_free.hpp
│   │           │   │   ├── schedule_member.hpp
│   │           │   │   ├── set_done_free.hpp
│   │           │   │   ├── set_done_member.hpp
│   │           │   │   ├── set_error_free.hpp
│   │           │   │   ├── set_error_member.hpp
│   │           │   │   ├── set_value_free.hpp
│   │           │   │   ├── set_value_member.hpp
│   │           │   │   ├── start_free.hpp
│   │           │   │   ├── start_member.hpp
│   │           │   │   ├── static_query.hpp
│   │           │   │   ├── static_require.hpp
│   │           │   │   ├── static_require_concept.hpp
│   │           │   │   ├── submit_free.hpp
│   │           │   │   └── submit_member.hpp
│   │           │   ├── ts/
│   │           │   │   ├── buffer.hpp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── internet.hpp
│   │           │   │   ├── io_context.hpp
│   │           │   │   ├── net.hpp
│   │           │   │   ├── netfwd.hpp
│   │           │   │   ├── socket.hpp
│   │           │   │   └── timer.hpp
│   │           │   ├── unyield.hpp
│   │           │   ├── use_awaitable.hpp
│   │           │   ├── use_future.hpp
│   │           │   ├── uses_executor.hpp
│   │           │   ├── version.hpp
│   │           │   ├── wait_traits.hpp
│   │           │   ├── windows/
│   │           │   │   ├── basic_object_handle.hpp
│   │           │   │   ├── basic_overlapped_handle.hpp
│   │           │   │   ├── basic_random_access_handle.hpp
│   │           │   │   ├── basic_stream_handle.hpp
│   │           │   │   ├── object_handle.hpp
│   │           │   │   ├── overlapped_handle.hpp
│   │           │   │   ├── overlapped_ptr.hpp
│   │           │   │   ├── random_access_handle.hpp
│   │           │   │   └── stream_handle.hpp
│   │           │   ├── write.hpp
│   │           │   ├── write_at.hpp
│   │           │   └── yield.hpp
│   │           ├── asio.hpp
│   │           ├── assert/
│   │           │   └── source_location.hpp
│   │           ├── assert.hpp
│   │           ├── assign/
│   │           │   ├── assignment_exception.hpp
│   │           │   ├── list_inserter.hpp
│   │           │   ├── list_of.hpp
│   │           │   ├── ptr_list_inserter.hpp
│   │           │   ├── ptr_list_of.hpp
│   │           │   ├── ptr_map_inserter.hpp
│   │           │   ├── std/
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── queue.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── slist.hpp
│   │           │   │   ├── stack.hpp
│   │           │   │   └── vector.hpp
│   │           │   └── std.hpp
│   │           ├── assign.hpp
│   │           ├── atomic/
│   │           │   ├── atomic.hpp
│   │           │   ├── atomic_flag.hpp
│   │           │   ├── atomic_ref.hpp
│   │           │   ├── capabilities.hpp
│   │           │   ├── detail/
│   │           │   │   ├── addressof.hpp
│   │           │   │   ├── aligned_variable.hpp
│   │           │   │   ├── atomic_flag_impl.hpp
│   │           │   │   ├── atomic_impl.hpp
│   │           │   │   ├── atomic_ref_impl.hpp
│   │           │   │   ├── bitwise_cast.hpp
│   │           │   │   ├── bitwise_fp_cast.hpp
│   │           │   │   ├── capabilities.hpp
│   │           │   │   ├── caps_arch_gcc_aarch32.hpp
│   │           │   │   ├── caps_arch_gcc_aarch64.hpp
│   │           │   │   ├── caps_arch_gcc_alpha.hpp
│   │           │   │   ├── caps_arch_gcc_arm.hpp
│   │           │   │   ├── caps_arch_gcc_ppc.hpp
│   │           │   │   ├── caps_arch_gcc_sparc.hpp
│   │           │   │   ├── caps_arch_gcc_x86.hpp
│   │           │   │   ├── caps_arch_msvc_arm.hpp
│   │           │   │   ├── caps_arch_msvc_x86.hpp
│   │           │   │   ├── caps_gcc_atomic.hpp
│   │           │   │   ├── caps_gcc_sync.hpp
│   │           │   │   ├── caps_linux_arm.hpp
│   │           │   │   ├── caps_windows.hpp
│   │           │   │   ├── cas_based_exchange.hpp
│   │           │   │   ├── classify.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── core_arch_operations.hpp
│   │           │   │   ├── core_arch_operations_fwd.hpp
│   │           │   │   ├── core_arch_ops_gcc_aarch32.hpp
│   │           │   │   ├── core_arch_ops_gcc_aarch64.hpp
│   │           │   │   ├── core_arch_ops_gcc_alpha.hpp
│   │           │   │   ├── core_arch_ops_gcc_arm.hpp
│   │           │   │   ├── core_arch_ops_gcc_ppc.hpp
│   │           │   │   ├── core_arch_ops_gcc_sparc.hpp
│   │           │   │   ├── core_arch_ops_gcc_x86.hpp
│   │           │   │   ├── core_arch_ops_msvc_arm.hpp
│   │           │   │   ├── core_arch_ops_msvc_x86.hpp
│   │           │   │   ├── core_operations.hpp
│   │           │   │   ├── core_operations_emulated.hpp
│   │           │   │   ├── core_operations_emulated_fwd.hpp
│   │           │   │   ├── core_operations_fwd.hpp
│   │           │   │   ├── core_ops_cas_based.hpp
│   │           │   │   ├── core_ops_gcc_atomic.hpp
│   │           │   │   ├── core_ops_gcc_sync.hpp
│   │           │   │   ├── core_ops_linux_arm.hpp
│   │           │   │   ├── core_ops_windows.hpp
│   │           │   │   ├── extending_cas_based_arithmetic.hpp
│   │           │   │   ├── extra_fp_operations.hpp
│   │           │   │   ├── extra_fp_operations_fwd.hpp
│   │           │   │   ├── extra_fp_ops_emulated.hpp
│   │           │   │   ├── extra_fp_ops_generic.hpp
│   │           │   │   ├── extra_operations.hpp
│   │           │   │   ├── extra_operations_fwd.hpp
│   │           │   │   ├── extra_ops_emulated.hpp
│   │           │   │   ├── extra_ops_gcc_aarch32.hpp
│   │           │   │   ├── extra_ops_gcc_aarch64.hpp
│   │           │   │   ├── extra_ops_gcc_arm.hpp
│   │           │   │   ├── extra_ops_gcc_ppc.hpp
│   │           │   │   ├── extra_ops_gcc_x86.hpp
│   │           │   │   ├── extra_ops_generic.hpp
│   │           │   │   ├── extra_ops_msvc_arm.hpp
│   │           │   │   ├── extra_ops_msvc_x86.hpp
│   │           │   │   ├── fence_arch_operations.hpp
│   │           │   │   ├── fence_arch_ops_gcc_aarch32.hpp
│   │           │   │   ├── fence_arch_ops_gcc_aarch64.hpp
│   │           │   │   ├── fence_arch_ops_gcc_alpha.hpp
│   │           │   │   ├── fence_arch_ops_gcc_arm.hpp
│   │           │   │   ├── fence_arch_ops_gcc_ppc.hpp
│   │           │   │   ├── fence_arch_ops_gcc_sparc.hpp
│   │           │   │   ├── fence_arch_ops_gcc_x86.hpp
│   │           │   │   ├── fence_arch_ops_msvc_arm.hpp
│   │           │   │   ├── fence_arch_ops_msvc_x86.hpp
│   │           │   │   ├── fence_operations.hpp
│   │           │   │   ├── fence_operations_emulated.hpp
│   │           │   │   ├── fence_ops_gcc_atomic.hpp
│   │           │   │   ├── fence_ops_gcc_sync.hpp
│   │           │   │   ├── fence_ops_linux_arm.hpp
│   │           │   │   ├── fence_ops_windows.hpp
│   │           │   │   ├── float_sizes.hpp
│   │           │   │   ├── footer.hpp
│   │           │   │   ├── fp_operations.hpp
│   │           │   │   ├── fp_operations_fwd.hpp
│   │           │   │   ├── fp_ops_emulated.hpp
│   │           │   │   ├── fp_ops_generic.hpp
│   │           │   │   ├── futex.hpp
│   │           │   │   ├── gcc_arm_asm_common.hpp
│   │           │   │   ├── gcc_atomic_memory_order_utils.hpp
│   │           │   │   ├── header.hpp
│   │           │   │   ├── int_sizes.hpp
│   │           │   │   ├── integral_conversions.hpp
│   │           │   │   ├── interlocked.hpp
│   │           │   │   ├── intptr.hpp
│   │           │   │   ├── link.hpp
│   │           │   │   ├── lock_pool.hpp
│   │           │   │   ├── memory_order_utils.hpp
│   │           │   │   ├── once_flag.hpp
│   │           │   │   ├── ops_gcc_aarch32_common.hpp
│   │           │   │   ├── ops_gcc_aarch64_common.hpp
│   │           │   │   ├── ops_gcc_arm_common.hpp
│   │           │   │   ├── ops_gcc_ppc_common.hpp
│   │           │   │   ├── ops_msvc_common.hpp
│   │           │   │   ├── pause.hpp
│   │           │   │   ├── platform.hpp
│   │           │   │   ├── storage_traits.hpp
│   │           │   │   ├── string_ops.hpp
│   │           │   │   ├── type_traits/
│   │           │   │   │   ├── alignment_of.hpp
│   │           │   │   │   ├── conditional.hpp
│   │           │   │   │   ├── integral_constant.hpp
│   │           │   │   │   ├── is_floating_point.hpp
│   │           │   │   │   ├── is_function.hpp
│   │           │   │   │   ├── is_iec559.hpp
│   │           │   │   │   ├── is_integral.hpp
│   │           │   │   │   ├── is_signed.hpp
│   │           │   │   │   ├── is_trivially_copyable.hpp
│   │           │   │   │   ├── is_trivially_default_constructible.hpp
│   │           │   │   │   ├── make_signed.hpp
│   │           │   │   │   └── make_unsigned.hpp
│   │           │   │   ├── wait_capabilities.hpp
│   │           │   │   ├── wait_caps_dragonfly_umtx.hpp
│   │           │   │   ├── wait_caps_freebsd_umtx.hpp
│   │           │   │   ├── wait_caps_futex.hpp
│   │           │   │   ├── wait_caps_windows.hpp
│   │           │   │   ├── wait_operations.hpp
│   │           │   │   ├── wait_operations_fwd.hpp
│   │           │   │   ├── wait_ops_dragonfly_umtx.hpp
│   │           │   │   ├── wait_ops_emulated.hpp
│   │           │   │   ├── wait_ops_freebsd_umtx.hpp
│   │           │   │   ├── wait_ops_futex.hpp
│   │           │   │   ├── wait_ops_generic.hpp
│   │           │   │   └── wait_ops_windows.hpp
│   │           │   ├── fences.hpp
│   │           │   ├── ipc_atomic.hpp
│   │           │   ├── ipc_atomic_flag.hpp
│   │           │   └── ipc_atomic_ref.hpp
│   │           ├── atomic.hpp
│   │           ├── beast/
│   │           │   ├── _experimental/
│   │           │   │   ├── http/
│   │           │   │   │   ├── icy_stream.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── icy_stream.hpp
│   │           │   │   ├── test/
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── fail_count.hpp
│   │           │   │   │   ├── handler.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── error.hpp
│   │           │   │   │   │   ├── error.ipp
│   │           │   │   │   │   ├── fail_count.ipp
│   │           │   │   │   │   ├── stream.hpp
│   │           │   │   │   │   └── stream.ipp
│   │           │   │   │   ├── stream.hpp
│   │           │   │   │   └── tcp.hpp
│   │           │   │   └── unit_test/
│   │           │   │       ├── amount.hpp
│   │           │   │       ├── detail/
│   │           │   │       │   └── const_container.hpp
│   │           │   │       ├── dstream.hpp
│   │           │   │       ├── global_suites.hpp
│   │           │   │       ├── main.ipp
│   │           │   │       ├── match.hpp
│   │           │   │       ├── recorder.hpp
│   │           │   │       ├── reporter.hpp
│   │           │   │       ├── results.hpp
│   │           │   │       ├── runner.hpp
│   │           │   │       ├── suite.hpp
│   │           │   │       ├── suite_info.hpp
│   │           │   │       └── suite_list.hpp
│   │           │   ├── core/
│   │           │   │   ├── async_base.hpp
│   │           │   │   ├── basic_stream.hpp
│   │           │   │   ├── bind_handler.hpp
│   │           │   │   ├── buffer_traits.hpp
│   │           │   │   ├── buffered_read_stream.hpp
│   │           │   │   ├── buffers_adaptor.hpp
│   │           │   │   ├── buffers_cat.hpp
│   │           │   │   ├── buffers_prefix.hpp
│   │           │   │   ├── buffers_range.hpp
│   │           │   │   ├── buffers_suffix.hpp
│   │           │   │   ├── buffers_to_string.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── allocator.hpp
│   │           │   │   │   ├── async_base.hpp
│   │           │   │   │   ├── base64.hpp
│   │           │   │   │   ├── base64.ipp
│   │           │   │   │   ├── bind_continuation.hpp
│   │           │   │   │   ├── bind_default_executor.hpp
│   │           │   │   │   ├── bind_handler.hpp
│   │           │   │   │   ├── buffer.hpp
│   │           │   │   │   ├── buffer_traits.hpp
│   │           │   │   │   ├── buffers_pair.hpp
│   │           │   │   │   ├── buffers_range_adaptor.hpp
│   │           │   │   │   ├── buffers_ref.hpp
│   │           │   │   │   ├── chacha.hpp
│   │           │   │   │   ├── char_buffer.hpp
│   │           │   │   │   ├── clamp.hpp
│   │           │   │   │   ├── config.hpp
│   │           │   │   │   ├── cpu_info.hpp
│   │           │   │   │   ├── flat_stream.hpp
│   │           │   │   │   ├── get_io_context.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── read.hpp
│   │           │   │   │   │   └── temporary_buffer.ipp
│   │           │   │   │   ├── is_invocable.hpp
│   │           │   │   │   ├── ostream.hpp
│   │           │   │   │   ├── pcg.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── remap_post_to_defer.hpp
│   │           │   │   │   ├── service_base.hpp
│   │           │   │   │   ├── sha1.hpp
│   │           │   │   │   ├── sha1.ipp
│   │           │   │   │   ├── static_const.hpp
│   │           │   │   │   ├── static_ostream.hpp
│   │           │   │   │   ├── static_string.hpp
│   │           │   │   │   ├── stream_base.hpp
│   │           │   │   │   ├── stream_traits.hpp
│   │           │   │   │   ├── string.hpp
│   │           │   │   │   ├── temporary_buffer.hpp
│   │           │   │   │   ├── tuple.hpp
│   │           │   │   │   ├── type_traits.hpp
│   │           │   │   │   ├── variant.hpp
│   │           │   │   │   ├── varint.hpp
│   │           │   │   │   ├── win32_unicode_path.hpp
│   │           │   │   │   └── work_guard.hpp
│   │           │   │   ├── detect_ssl.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── file.hpp
│   │           │   │   ├── file_base.hpp
│   │           │   │   ├── file_posix.hpp
│   │           │   │   ├── file_stdio.hpp
│   │           │   │   ├── file_win32.hpp
│   │           │   │   ├── flat_buffer.hpp
│   │           │   │   ├── flat_static_buffer.hpp
│   │           │   │   ├── flat_stream.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── async_base.hpp
│   │           │   │   │   ├── basic_stream.hpp
│   │           │   │   │   ├── buffered_read_stream.hpp
│   │           │   │   │   ├── buffers_adaptor.hpp
│   │           │   │   │   ├── buffers_cat.hpp
│   │           │   │   │   ├── buffers_prefix.hpp
│   │           │   │   │   ├── buffers_suffix.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── file_posix.ipp
│   │           │   │   │   ├── file_stdio.ipp
│   │           │   │   │   ├── file_win32.ipp
│   │           │   │   │   ├── flat_buffer.hpp
│   │           │   │   │   ├── flat_static_buffer.hpp
│   │           │   │   │   ├── flat_static_buffer.ipp
│   │           │   │   │   ├── flat_stream.hpp
│   │           │   │   │   ├── multi_buffer.hpp
│   │           │   │   │   ├── read_size.hpp
│   │           │   │   │   ├── saved_handler.hpp
│   │           │   │   │   ├── saved_handler.ipp
│   │           │   │   │   ├── static_buffer.hpp
│   │           │   │   │   ├── static_buffer.ipp
│   │           │   │   │   ├── static_string.hpp
│   │           │   │   │   ├── string.ipp
│   │           │   │   │   └── string_param.hpp
│   │           │   │   ├── make_printable.hpp
│   │           │   │   ├── multi_buffer.hpp
│   │           │   │   ├── ostream.hpp
│   │           │   │   ├── rate_policy.hpp
│   │           │   │   ├── read_size.hpp
│   │           │   │   ├── role.hpp
│   │           │   │   ├── saved_handler.hpp
│   │           │   │   ├── span.hpp
│   │           │   │   ├── static_buffer.hpp
│   │           │   │   ├── static_string.hpp
│   │           │   │   ├── stream_traits.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── string_param.hpp
│   │           │   │   ├── string_type.hpp
│   │           │   │   └── tcp_stream.hpp
│   │           │   ├── core.hpp
│   │           │   ├── http/
│   │           │   │   ├── basic_dynamic_body.hpp
│   │           │   │   ├── basic_file_body.hpp
│   │           │   │   ├── basic_parser.hpp
│   │           │   │   ├── buffer_body.hpp
│   │           │   │   ├── chunk_encode.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── basic_parsed_list.hpp
│   │           │   │   │   ├── basic_parser.hpp
│   │           │   │   │   ├── basic_parser.ipp
│   │           │   │   │   ├── chunk_encode.hpp
│   │           │   │   │   ├── rfc7230.hpp
│   │           │   │   │   ├── rfc7230.ipp
│   │           │   │   │   └── type_traits.hpp
│   │           │   │   ├── dynamic_body.hpp
│   │           │   │   ├── empty_body.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── field.hpp
│   │           │   │   ├── fields.hpp
│   │           │   │   ├── file_body.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── basic_parser.hpp
│   │           │   │   │   ├── basic_parser.ipp
│   │           │   │   │   ├── chunk_encode.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── field.ipp
│   │           │   │   │   ├── fields.hpp
│   │           │   │   │   ├── fields.ipp
│   │           │   │   │   ├── file_body_win32.hpp
│   │           │   │   │   ├── message.hpp
│   │           │   │   │   ├── parser.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── rfc7230.hpp
│   │           │   │   │   ├── rfc7230.ipp
│   │           │   │   │   ├── serializer.hpp
│   │           │   │   │   ├── status.ipp
│   │           │   │   │   ├── verb.ipp
│   │           │   │   │   └── write.hpp
│   │           │   │   ├── message.hpp
│   │           │   │   ├── parser.hpp
│   │           │   │   ├── read.hpp
│   │           │   │   ├── rfc7230.hpp
│   │           │   │   ├── serializer.hpp
│   │           │   │   ├── span_body.hpp
│   │           │   │   ├── status.hpp
│   │           │   │   ├── string_body.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── vector_body.hpp
│   │           │   │   ├── verb.hpp
│   │           │   │   └── write.hpp
│   │           │   ├── http.hpp
│   │           │   ├── src.hpp
│   │           │   ├── ssl/
│   │           │   │   └── ssl_stream.hpp
│   │           │   ├── ssl.hpp
│   │           │   ├── version.hpp
│   │           │   ├── websocket/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── decorator.hpp
│   │           │   │   │   ├── frame.hpp
│   │           │   │   │   ├── hybi13.hpp
│   │           │   │   │   ├── hybi13.ipp
│   │           │   │   │   ├── impl_base.hpp
│   │           │   │   │   ├── mask.hpp
│   │           │   │   │   ├── mask.ipp
│   │           │   │   │   ├── pmd_extension.hpp
│   │           │   │   │   ├── pmd_extension.ipp
│   │           │   │   │   ├── prng.hpp
│   │           │   │   │   ├── prng.ipp
│   │           │   │   │   ├── service.hpp
│   │           │   │   │   ├── service.ipp
│   │           │   │   │   ├── soft_mutex.hpp
│   │           │   │   │   ├── type_traits.hpp
│   │           │   │   │   ├── utf8_checker.hpp
│   │           │   │   │   └── utf8_checker.ipp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── accept.hpp
│   │           │   │   │   ├── close.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── handshake.hpp
│   │           │   │   │   ├── ping.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── rfc6455.hpp
│   │           │   │   │   ├── ssl.hpp
│   │           │   │   │   ├── stream.hpp
│   │           │   │   │   ├── stream_impl.hpp
│   │           │   │   │   ├── teardown.hpp
│   │           │   │   │   └── write.hpp
│   │           │   │   ├── option.hpp
│   │           │   │   ├── rfc6455.hpp
│   │           │   │   ├── ssl.hpp
│   │           │   │   ├── stream.hpp
│   │           │   │   ├── stream_base.hpp
│   │           │   │   ├── stream_fwd.hpp
│   │           │   │   └── teardown.hpp
│   │           │   ├── websocket.hpp
│   │           │   ├── zlib/
│   │           │   │   ├── deflate_stream.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── bitstream.hpp
│   │           │   │   │   ├── deflate_stream.hpp
│   │           │   │   │   ├── deflate_stream.ipp
│   │           │   │   │   ├── inflate_stream.hpp
│   │           │   │   │   ├── inflate_stream.ipp
│   │           │   │   │   ├── ranges.hpp
│   │           │   │   │   └── window.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   └── error.ipp
│   │           │   │   ├── inflate_stream.hpp
│   │           │   │   └── zlib.hpp
│   │           │   └── zlib.hpp
│   │           ├── beast.hpp
│   │           ├── bimap/
│   │           │   ├── bimap.hpp
│   │           │   ├── container_adaptor/
│   │           │   │   ├── associative_container_adaptor.hpp
│   │           │   │   ├── container_adaptor.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── comparison_adaptor.hpp
│   │           │   │   │   ├── functor_bag.hpp
│   │           │   │   │   ├── identity_converters.hpp
│   │           │   │   │   ├── key_extractor.hpp
│   │           │   │   │   └── non_unique_container_helper.hpp
│   │           │   │   ├── list_adaptor.hpp
│   │           │   │   ├── list_map_adaptor.hpp
│   │           │   │   ├── map_adaptor.hpp
│   │           │   │   ├── multimap_adaptor.hpp
│   │           │   │   ├── multiset_adaptor.hpp
│   │           │   │   ├── ordered_associative_container_adaptor.hpp
│   │           │   │   ├── sequence_container_adaptor.hpp
│   │           │   │   ├── set_adaptor.hpp
│   │           │   │   ├── support/
│   │           │   │   │   └── iterator_facade_converters.hpp
│   │           │   │   ├── unordered_associative_container_adaptor.hpp
│   │           │   │   ├── unordered_map_adaptor.hpp
│   │           │   │   ├── unordered_multimap_adaptor.hpp
│   │           │   │   ├── unordered_multiset_adaptor.hpp
│   │           │   │   ├── unordered_set_adaptor.hpp
│   │           │   │   ├── vector_adaptor.hpp
│   │           │   │   └── vector_map_adaptor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── bimap_core.hpp
│   │           │   │   ├── concept_tags.hpp
│   │           │   │   ├── debug/
│   │           │   │   │   └── static_error.hpp
│   │           │   │   ├── generate_index_binder.hpp
│   │           │   │   ├── generate_relation_binder.hpp
│   │           │   │   ├── generate_view_binder.hpp
│   │           │   │   ├── is_set_type_of.hpp
│   │           │   │   ├── manage_additional_parameters.hpp
│   │           │   │   ├── manage_bimap_key.hpp
│   │           │   │   ├── map_view_base.hpp
│   │           │   │   ├── map_view_iterator.hpp
│   │           │   │   ├── modifier_adaptor.hpp
│   │           │   │   ├── non_unique_views_helper.hpp
│   │           │   │   ├── set_view_base.hpp
│   │           │   │   ├── set_view_iterator.hpp
│   │           │   │   ├── test/
│   │           │   │   │   └── check_metadata.hpp
│   │           │   │   └── user_interface_config.hpp
│   │           │   ├── list_of.hpp
│   │           │   ├── multiset_of.hpp
│   │           │   ├── property_map/
│   │           │   │   ├── set_support.hpp
│   │           │   │   └── unordered_set_support.hpp
│   │           │   ├── relation/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── access_builder.hpp
│   │           │   │   │   ├── metadata_access_builder.hpp
│   │           │   │   │   ├── mutant.hpp
│   │           │   │   │   ├── static_access_builder.hpp
│   │           │   │   │   └── to_mutable_relation_functor.hpp
│   │           │   │   ├── member_at.hpp
│   │           │   │   ├── mutant_relation.hpp
│   │           │   │   ├── pair_layout.hpp
│   │           │   │   ├── structured_pair.hpp
│   │           │   │   ├── support/
│   │           │   │   │   ├── data_extractor.hpp
│   │           │   │   │   ├── get.hpp
│   │           │   │   │   ├── get_pair_functor.hpp
│   │           │   │   │   ├── is_tag_of_member_at.hpp
│   │           │   │   │   ├── member_with_tag.hpp
│   │           │   │   │   ├── opposite_tag.hpp
│   │           │   │   │   ├── pair_by.hpp
│   │           │   │   │   ├── pair_type_by.hpp
│   │           │   │   │   └── value_type_of.hpp
│   │           │   │   └── symmetrical_base.hpp
│   │           │   ├── set_of.hpp
│   │           │   ├── support/
│   │           │   │   ├── data_type_by.hpp
│   │           │   │   ├── iterator_type_by.hpp
│   │           │   │   ├── key_type_by.hpp
│   │           │   │   ├── lambda.hpp
│   │           │   │   ├── map_by.hpp
│   │           │   │   ├── map_type_by.hpp
│   │           │   │   └── value_type_by.hpp
│   │           │   ├── tags/
│   │           │   │   ├── support/
│   │           │   │   │   ├── apply_to_value_type.hpp
│   │           │   │   │   ├── default_tagged.hpp
│   │           │   │   │   ├── is_tagged.hpp
│   │           │   │   │   ├── overwrite_tagged.hpp
│   │           │   │   │   ├── tag_of.hpp
│   │           │   │   │   └── value_type_of.hpp
│   │           │   │   └── tagged.hpp
│   │           │   ├── unconstrained_set_of.hpp
│   │           │   ├── unordered_multiset_of.hpp
│   │           │   ├── unordered_set_of.hpp
│   │           │   ├── vector_of.hpp
│   │           │   └── views/
│   │           │       ├── list_map_view.hpp
│   │           │       ├── list_set_view.hpp
│   │           │       ├── map_view.hpp
│   │           │       ├── multimap_view.hpp
│   │           │       ├── multiset_view.hpp
│   │           │       ├── set_view.hpp
│   │           │       ├── unconstrained_map_view.hpp
│   │           │       ├── unconstrained_set_view.hpp
│   │           │       ├── unordered_map_view.hpp
│   │           │       ├── unordered_multimap_view.hpp
│   │           │       ├── unordered_multiset_view.hpp
│   │           │       ├── unordered_set_view.hpp
│   │           │       ├── vector_map_view.hpp
│   │           │       └── vector_set_view.hpp
│   │           ├── bimap.hpp
│   │           ├── bind/
│   │           │   ├── apply.hpp
│   │           │   ├── arg.hpp
│   │           │   ├── bind.hpp
│   │           │   ├── bind_cc.hpp
│   │           │   ├── bind_mf2_cc.hpp
│   │           │   ├── bind_mf_cc.hpp
│   │           │   ├── bind_template.hpp
│   │           │   ├── make_adaptable.hpp
│   │           │   ├── mem_fn.hpp
│   │           │   ├── mem_fn_cc.hpp
│   │           │   ├── mem_fn_template.hpp
│   │           │   ├── mem_fn_vw.hpp
│   │           │   ├── placeholders.hpp
│   │           │   ├── protect.hpp
│   │           │   └── storage.hpp
│   │           ├── bind.hpp
│   │           ├── blank.hpp
│   │           ├── blank_fwd.hpp
│   │           ├── call_traits.hpp
│   │           ├── callable_traits/
│   │           │   ├── add_member_const.hpp
│   │           │   ├── add_member_cv.hpp
│   │           │   ├── add_member_lvalue_reference.hpp
│   │           │   ├── add_member_rvalue_reference.hpp
│   │           │   ├── add_member_volatile.hpp
│   │           │   ├── add_noexcept.hpp
│   │           │   ├── add_transaction_safe.hpp
│   │           │   ├── add_varargs.hpp
│   │           │   ├── apply_member_pointer.hpp
│   │           │   ├── apply_return.hpp
│   │           │   ├── args.hpp
│   │           │   ├── class_of.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── core.hpp
│   │           │   │   ├── default_callable_traits.hpp
│   │           │   │   ├── forward_declarations.hpp
│   │           │   │   ├── function.hpp
│   │           │   │   ├── function_object.hpp
│   │           │   │   ├── is_invocable_impl.hpp
│   │           │   │   ├── parameter_index_helper.hpp
│   │           │   │   ├── pmd.hpp
│   │           │   │   ├── pmf.hpp
│   │           │   │   ├── polyfills/
│   │           │   │   │   ├── disjunction.hpp
│   │           │   │   │   └── make_index_sequence.hpp
│   │           │   │   ├── qualifier_flags.hpp
│   │           │   │   ├── set_function_qualifiers.hpp
│   │           │   │   ├── sfinae_errors.hpp
│   │           │   │   ├── traits.hpp
│   │           │   │   ├── unguarded/
│   │           │   │   │   ├── function.hpp
│   │           │   │   │   ├── function_2.hpp
│   │           │   │   │   ├── function_3.hpp
│   │           │   │   │   ├── function_ptr.hpp
│   │           │   │   │   ├── function_ptr_2.hpp
│   │           │   │   │   ├── function_ptr_3.hpp
│   │           │   │   │   ├── function_ptr_varargs.hpp
│   │           │   │   │   ├── function_ptr_varargs_2.hpp
│   │           │   │   │   ├── function_ptr_varargs_3.hpp
│   │           │   │   │   ├── pmf.hpp
│   │           │   │   │   ├── pmf_2.hpp
│   │           │   │   │   ├── pmf_3.hpp
│   │           │   │   │   ├── pmf_4.hpp
│   │           │   │   │   ├── pmf_varargs.hpp
│   │           │   │   │   ├── pmf_varargs_2.hpp
│   │           │   │   │   ├── pmf_varargs_3.hpp
│   │           │   │   │   └── pmf_varargs_4.hpp
│   │           │   │   └── utility.hpp
│   │           │   ├── function_type.hpp
│   │           │   ├── has_member_qualifiers.hpp
│   │           │   ├── has_varargs.hpp
│   │           │   ├── has_void_return.hpp
│   │           │   ├── is_const_member.hpp
│   │           │   ├── is_cv_member.hpp
│   │           │   ├── is_invocable.hpp
│   │           │   ├── is_lvalue_reference_member.hpp
│   │           │   ├── is_noexcept.hpp
│   │           │   ├── is_reference_member.hpp
│   │           │   ├── is_rvalue_reference_member.hpp
│   │           │   ├── is_transaction_safe.hpp
│   │           │   ├── is_volatile_member.hpp
│   │           │   ├── qualified_class_of.hpp
│   │           │   ├── remove_member_const.hpp
│   │           │   ├── remove_member_cv.hpp
│   │           │   ├── remove_member_reference.hpp
│   │           │   ├── remove_member_volatile.hpp
│   │           │   ├── remove_noexcept.hpp
│   │           │   ├── remove_transaction_safe.hpp
│   │           │   ├── remove_varargs.hpp
│   │           │   └── return_type.hpp
│   │           ├── callable_traits.hpp
│   │           ├── cast.hpp
│   │           ├── cerrno.hpp
│   │           ├── checked_delete.hpp
│   │           ├── chrono/
│   │           │   ├── ceil.hpp
│   │           │   ├── chrono.hpp
│   │           │   ├── chrono_io.hpp
│   │           │   ├── clock_string.hpp
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── inlined/
│   │           │   │   │   ├── chrono.hpp
│   │           │   │   │   ├── mac/
│   │           │   │   │   │   ├── chrono.hpp
│   │           │   │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   │   └── thread_clock.hpp
│   │           │   │   │   ├── posix/
│   │           │   │   │   │   ├── chrono.hpp
│   │           │   │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   │   └── thread_clock.hpp
│   │           │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   ├── thread_clock.hpp
│   │           │   │   │   └── win/
│   │           │   │   │       ├── chrono.hpp
│   │           │   │   │       ├── process_cpu_clocks.hpp
│   │           │   │   │       └── thread_clock.hpp
│   │           │   │   ├── is_evenly_divisible_by.hpp
│   │           │   │   ├── no_warning/
│   │           │   │   │   └── signed_unsigned_cmp.hpp
│   │           │   │   ├── scan_keyword.hpp
│   │           │   │   ├── static_assert.hpp
│   │           │   │   └── system.hpp
│   │           │   ├── duration.hpp
│   │           │   ├── floor.hpp
│   │           │   ├── include.hpp
│   │           │   ├── io/
│   │           │   │   ├── duration_get.hpp
│   │           │   │   ├── duration_io.hpp
│   │           │   │   ├── duration_put.hpp
│   │           │   │   ├── duration_style.hpp
│   │           │   │   ├── duration_units.hpp
│   │           │   │   ├── ios_base_state.hpp
│   │           │   │   ├── time_point_get.hpp
│   │           │   │   ├── time_point_io.hpp
│   │           │   │   ├── time_point_put.hpp
│   │           │   │   ├── time_point_units.hpp
│   │           │   │   ├── timezone.hpp
│   │           │   │   └── utility/
│   │           │   │       ├── ios_base_state_ptr.hpp
│   │           │   │       ├── manip_base.hpp
│   │           │   │       └── to_string.hpp
│   │           │   ├── io_v1/
│   │           │   │   └── chrono_io.hpp
│   │           │   ├── process_cpu_clocks.hpp
│   │           │   ├── round.hpp
│   │           │   ├── system_clocks.hpp
│   │           │   ├── thread_clock.hpp
│   │           │   ├── time_point.hpp
│   │           │   └── typeof/
│   │           │       └── boost/
│   │           │           ├── chrono/
│   │           │           │   └── chrono.hpp
│   │           │           └── ratio.hpp
│   │           ├── chrono.hpp
│   │           ├── circular_buffer/
│   │           │   ├── base.hpp
│   │           │   ├── debug.hpp
│   │           │   ├── details.hpp
│   │           │   └── space_optimized.hpp
│   │           ├── circular_buffer.hpp
│   │           ├── circular_buffer_fwd.hpp
│   │           ├── compatibility/
│   │           │   └── cpp_c_headers/
│   │           │       ├── cassert
│   │           │       ├── cctype
│   │           │       ├── cerrno
│   │           │       ├── cfloat
│   │           │       ├── climits
│   │           │       ├── clocale
│   │           │       ├── cmath
│   │           │       ├── csetjmp
│   │           │       ├── csignal
│   │           │       ├── cstdarg
│   │           │       ├── cstddef
│   │           │       ├── cstdio
│   │           │       ├── cstdlib
│   │           │       ├── cstring
│   │           │       ├── ctime
│   │           │       ├── cwchar
│   │           │       └── cwctype
│   │           ├── compressed_pair.hpp
│   │           ├── compute/
│   │           │   ├── algorithm/
│   │           │   │   ├── accumulate.hpp
│   │           │   │   ├── adjacent_difference.hpp
│   │           │   │   ├── adjacent_find.hpp
│   │           │   │   ├── all_of.hpp
│   │           │   │   ├── any_of.hpp
│   │           │   │   ├── binary_search.hpp
│   │           │   │   ├── copy.hpp
│   │           │   │   ├── copy_if.hpp
│   │           │   │   ├── copy_n.hpp
│   │           │   │   ├── count.hpp
│   │           │   │   ├── count_if.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── balanced_path.hpp
│   │           │   │   │   ├── binary_find.hpp
│   │           │   │   │   ├── compact.hpp
│   │           │   │   │   ├── copy_on_device.hpp
│   │           │   │   │   ├── copy_to_device.hpp
│   │           │   │   │   ├── copy_to_host.hpp
│   │           │   │   │   ├── count_if_with_ballot.hpp
│   │           │   │   │   ├── count_if_with_reduce.hpp
│   │           │   │   │   ├── count_if_with_threads.hpp
│   │           │   │   │   ├── find_extrema.hpp
│   │           │   │   │   ├── find_extrema_on_cpu.hpp
│   │           │   │   │   ├── find_extrema_with_atomics.hpp
│   │           │   │   │   ├── find_extrema_with_reduce.hpp
│   │           │   │   │   ├── find_if_with_atomics.hpp
│   │           │   │   │   ├── inplace_reduce.hpp
│   │           │   │   │   ├── insertion_sort.hpp
│   │           │   │   │   ├── merge_path.hpp
│   │           │   │   │   ├── merge_sort_on_cpu.hpp
│   │           │   │   │   ├── merge_sort_on_gpu.hpp
│   │           │   │   │   ├── merge_with_merge_path.hpp
│   │           │   │   │   ├── radix_sort.hpp
│   │           │   │   │   ├── random_fill.hpp
│   │           │   │   │   ├── reduce_by_key.hpp
│   │           │   │   │   ├── reduce_by_key_with_scan.hpp
│   │           │   │   │   ├── reduce_on_cpu.hpp
│   │           │   │   │   ├── reduce_on_gpu.hpp
│   │           │   │   │   ├── scan.hpp
│   │           │   │   │   ├── scan_on_cpu.hpp
│   │           │   │   │   ├── scan_on_gpu.hpp
│   │           │   │   │   ├── search_all.hpp
│   │           │   │   │   ├── serial_accumulate.hpp
│   │           │   │   │   ├── serial_count_if.hpp
│   │           │   │   │   ├── serial_find_extrema.hpp
│   │           │   │   │   ├── serial_merge.hpp
│   │           │   │   │   ├── serial_reduce.hpp
│   │           │   │   │   ├── serial_reduce_by_key.hpp
│   │           │   │   │   └── serial_scan.hpp
│   │           │   │   ├── equal.hpp
│   │           │   │   ├── equal_range.hpp
│   │           │   │   ├── exclusive_scan.hpp
│   │           │   │   ├── fill.hpp
│   │           │   │   ├── fill_n.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_end.hpp
│   │           │   │   ├── find_if.hpp
│   │           │   │   ├── find_if_not.hpp
│   │           │   │   ├── for_each.hpp
│   │           │   │   ├── for_each_n.hpp
│   │           │   │   ├── gather.hpp
│   │           │   │   ├── generate.hpp
│   │           │   │   ├── generate_n.hpp
│   │           │   │   ├── includes.hpp
│   │           │   │   ├── inclusive_scan.hpp
│   │           │   │   ├── inner_product.hpp
│   │           │   │   ├── inplace_merge.hpp
│   │           │   │   ├── iota.hpp
│   │           │   │   ├── is_partitioned.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── lexicographical_compare.hpp
│   │           │   │   ├── lower_bound.hpp
│   │           │   │   ├── max_element.hpp
│   │           │   │   ├── merge.hpp
│   │           │   │   ├── min_element.hpp
│   │           │   │   ├── minmax_element.hpp
│   │           │   │   ├── mismatch.hpp
│   │           │   │   ├── next_permutation.hpp
│   │           │   │   ├── none_of.hpp
│   │           │   │   ├── nth_element.hpp
│   │           │   │   ├── partial_sum.hpp
│   │           │   │   ├── partition.hpp
│   │           │   │   ├── partition_copy.hpp
│   │           │   │   ├── partition_point.hpp
│   │           │   │   ├── prev_permutation.hpp
│   │           │   │   ├── random_shuffle.hpp
│   │           │   │   ├── reduce.hpp
│   │           │   │   ├── reduce_by_key.hpp
│   │           │   │   ├── remove.hpp
│   │           │   │   ├── remove_if.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── replace_copy.hpp
│   │           │   │   ├── reverse.hpp
│   │           │   │   ├── reverse_copy.hpp
│   │           │   │   ├── rotate.hpp
│   │           │   │   ├── rotate_copy.hpp
│   │           │   │   ├── scatter.hpp
│   │           │   │   ├── scatter_if.hpp
│   │           │   │   ├── search.hpp
│   │           │   │   ├── search_n.hpp
│   │           │   │   ├── set_difference.hpp
│   │           │   │   ├── set_intersection.hpp
│   │           │   │   ├── set_symmetric_difference.hpp
│   │           │   │   ├── set_union.hpp
│   │           │   │   ├── sort.hpp
│   │           │   │   ├── sort_by_key.hpp
│   │           │   │   ├── stable_partition.hpp
│   │           │   │   ├── stable_sort.hpp
│   │           │   │   ├── stable_sort_by_key.hpp
│   │           │   │   ├── swap_ranges.hpp
│   │           │   │   ├── transform.hpp
│   │           │   │   ├── transform_if.hpp
│   │           │   │   ├── transform_reduce.hpp
│   │           │   │   ├── unique.hpp
│   │           │   │   ├── unique_copy.hpp
│   │           │   │   └── upper_bound.hpp
│   │           │   ├── algorithm.hpp
│   │           │   ├── allocator/
│   │           │   │   ├── buffer_allocator.hpp
│   │           │   │   └── pinned_allocator.hpp
│   │           │   ├── allocator.hpp
│   │           │   ├── async/
│   │           │   │   ├── future.hpp
│   │           │   │   ├── wait.hpp
│   │           │   │   └── wait_guard.hpp
│   │           │   ├── async.hpp
│   │           │   ├── buffer.hpp
│   │           │   ├── cl.hpp
│   │           │   ├── cl_ext.hpp
│   │           │   ├── closure.hpp
│   │           │   ├── command_queue.hpp
│   │           │   ├── config.hpp
│   │           │   ├── container/
│   │           │   │   ├── array.hpp
│   │           │   │   ├── basic_string.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── scalar.hpp
│   │           │   │   ├── dynamic_bitset.hpp
│   │           │   │   ├── flat_map.hpp
│   │           │   │   ├── flat_set.hpp
│   │           │   │   ├── mapped_view.hpp
│   │           │   │   ├── stack.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── valarray.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── container.hpp
│   │           │   ├── context.hpp
│   │           │   ├── core.hpp
│   │           │   ├── detail/
│   │           │   │   ├── assert_cl_success.hpp
│   │           │   │   ├── buffer_value.hpp
│   │           │   │   ├── cl_versions.hpp
│   │           │   │   ├── device_ptr.hpp
│   │           │   │   ├── diagnostic.hpp
│   │           │   │   ├── duration.hpp
│   │           │   │   ├── get_object_info.hpp
│   │           │   │   ├── getenv.hpp
│   │           │   │   ├── global_static.hpp
│   │           │   │   ├── is_buffer_iterator.hpp
│   │           │   │   ├── is_contiguous_iterator.hpp
│   │           │   │   ├── iterator_plus_distance.hpp
│   │           │   │   ├── iterator_range_size.hpp
│   │           │   │   ├── iterator_traits.hpp
│   │           │   │   ├── literal.hpp
│   │           │   │   ├── lru_cache.hpp
│   │           │   │   ├── meta_kernel.hpp
│   │           │   │   ├── mpl_vector_to_tuple.hpp
│   │           │   │   ├── nvidia_compute_capability.hpp
│   │           │   │   ├── parameter_cache.hpp
│   │           │   │   ├── path.hpp
│   │           │   │   ├── print_range.hpp
│   │           │   │   ├── read_write_single_value.hpp
│   │           │   │   ├── sha1.hpp
│   │           │   │   ├── variadic_macros.hpp
│   │           │   │   ├── vendor.hpp
│   │           │   │   └── work_size.hpp
│   │           │   ├── device.hpp
│   │           │   ├── event.hpp
│   │           │   ├── exception/
│   │           │   │   ├── context_error.hpp
│   │           │   │   ├── no_device_found.hpp
│   │           │   │   ├── opencl_error.hpp
│   │           │   │   ├── program_build_failure.hpp
│   │           │   │   └── unsupported_extension_error.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── experimental/
│   │           │   │   ├── clamp_range.hpp
│   │           │   │   ├── malloc.hpp
│   │           │   │   ├── sort_by_transform.hpp
│   │           │   │   └── tabulate.hpp
│   │           │   ├── function.hpp
│   │           │   ├── functional/
│   │           │   │   ├── as.hpp
│   │           │   │   ├── atomic.hpp
│   │           │   │   ├── bind.hpp
│   │           │   │   ├── common.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── macros.hpp
│   │           │   │   │   ├── nvidia_ballot.hpp
│   │           │   │   │   ├── nvidia_popcount.hpp
│   │           │   │   │   └── unpack.hpp
│   │           │   │   ├── field.hpp
│   │           │   │   ├── geometry.hpp
│   │           │   │   ├── get.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── identity.hpp
│   │           │   │   ├── integer.hpp
│   │           │   │   ├── logical.hpp
│   │           │   │   ├── math.hpp
│   │           │   │   ├── operator.hpp
│   │           │   │   ├── popcount.hpp
│   │           │   │   └── relational.hpp
│   │           │   ├── functional.hpp
│   │           │   ├── image/
│   │           │   │   ├── image1d.hpp
│   │           │   │   ├── image2d.hpp
│   │           │   │   ├── image3d.hpp
│   │           │   │   ├── image_format.hpp
│   │           │   │   ├── image_object.hpp
│   │           │   │   └── image_sampler.hpp
│   │           │   ├── image.hpp
│   │           │   ├── image2d.hpp
│   │           │   ├── image3d.hpp
│   │           │   ├── image_format.hpp
│   │           │   ├── image_sampler.hpp
│   │           │   ├── interop/
│   │           │   │   ├── eigen/
│   │           │   │   │   └── core.hpp
│   │           │   │   ├── eigen.hpp
│   │           │   │   ├── opencv/
│   │           │   │   │   ├── core.hpp
│   │           │   │   │   ├── highgui.hpp
│   │           │   │   │   └── ocl.hpp
│   │           │   │   ├── opencv.hpp
│   │           │   │   ├── opengl/
│   │           │   │   │   ├── acquire.hpp
│   │           │   │   │   ├── cl_gl.hpp
│   │           │   │   │   ├── cl_gl_ext.hpp
│   │           │   │   │   ├── context.hpp
│   │           │   │   │   ├── gl.hpp
│   │           │   │   │   ├── opengl_buffer.hpp
│   │           │   │   │   ├── opengl_renderbuffer.hpp
│   │           │   │   │   └── opengl_texture.hpp
│   │           │   │   ├── opengl.hpp
│   │           │   │   ├── qt/
│   │           │   │   │   ├── qimage.hpp
│   │           │   │   │   ├── qpoint.hpp
│   │           │   │   │   ├── qpointf.hpp
│   │           │   │   │   ├── qtcore.hpp
│   │           │   │   │   ├── qtgui.hpp
│   │           │   │   │   └── qvector.hpp
│   │           │   │   ├── qt.hpp
│   │           │   │   ├── vtk/
│   │           │   │   │   ├── bounds.hpp
│   │           │   │   │   ├── data_array.hpp
│   │           │   │   │   ├── matrix4x4.hpp
│   │           │   │   │   └── points.hpp
│   │           │   │   └── vtk.hpp
│   │           │   ├── iterator/
│   │           │   │   ├── buffer_iterator.hpp
│   │           │   │   ├── constant_buffer_iterator.hpp
│   │           │   │   ├── constant_iterator.hpp
│   │           │   │   ├── counting_iterator.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── get_base_iterator_buffer.hpp
│   │           │   │   │   └── swizzle_iterator.hpp
│   │           │   │   ├── discard_iterator.hpp
│   │           │   │   ├── function_input_iterator.hpp
│   │           │   │   ├── permutation_iterator.hpp
│   │           │   │   ├── strided_iterator.hpp
│   │           │   │   ├── transform_iterator.hpp
│   │           │   │   └── zip_iterator.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── kernel.hpp
│   │           │   ├── lambda/
│   │           │   │   ├── context.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── get.hpp
│   │           │   │   ├── make_pair.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── placeholder.hpp
│   │           │   │   ├── placeholders.hpp
│   │           │   │   └── result_of.hpp
│   │           │   ├── lambda.hpp
│   │           │   ├── memory/
│   │           │   │   ├── local_buffer.hpp
│   │           │   │   └── svm_ptr.hpp
│   │           │   ├── memory.hpp
│   │           │   ├── memory_object.hpp
│   │           │   ├── pipe.hpp
│   │           │   ├── platform.hpp
│   │           │   ├── program.hpp
│   │           │   ├── random/
│   │           │   │   ├── bernoulli_distribution.hpp
│   │           │   │   ├── default_random_engine.hpp
│   │           │   │   ├── discrete_distribution.hpp
│   │           │   │   ├── linear_congruential_engine.hpp
│   │           │   │   ├── mersenne_twister_engine.hpp
│   │           │   │   ├── normal_distribution.hpp
│   │           │   │   ├── threefry_engine.hpp
│   │           │   │   ├── uniform_int_distribution.hpp
│   │           │   │   └── uniform_real_distribution.hpp
│   │           │   ├── random.hpp
│   │           │   ├── source.hpp
│   │           │   ├── svm.hpp
│   │           │   ├── system.hpp
│   │           │   ├── type_traits/
│   │           │   │   ├── common_type.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── capture_traits.hpp
│   │           │   │   ├── is_device_iterator.hpp
│   │           │   │   ├── is_fundamental.hpp
│   │           │   │   ├── is_vector_type.hpp
│   │           │   │   ├── make_vector_type.hpp
│   │           │   │   ├── result_of.hpp
│   │           │   │   ├── scalar_type.hpp
│   │           │   │   ├── type_definition.hpp
│   │           │   │   ├── type_name.hpp
│   │           │   │   └── vector_size.hpp
│   │           │   ├── type_traits.hpp
│   │           │   ├── types/
│   │           │   │   ├── builtin.hpp
│   │           │   │   ├── complex.hpp
│   │           │   │   ├── fundamental.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── size_t.hpp
│   │           │   │   ├── struct.hpp
│   │           │   │   └── tuple.hpp
│   │           │   ├── types.hpp
│   │           │   ├── user_event.hpp
│   │           │   ├── utility/
│   │           │   │   ├── dim.hpp
│   │           │   │   ├── extents.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── program_cache.hpp
│   │           │   │   ├── source.hpp
│   │           │   │   └── wait_list.hpp
│   │           │   ├── utility.hpp
│   │           │   ├── version.hpp
│   │           │   └── wait_list.hpp
│   │           ├── compute.hpp
│   │           ├── concept/
│   │           │   ├── assert.hpp
│   │           │   ├── detail/
│   │           │   │   ├── backward_compatibility.hpp
│   │           │   │   ├── borland.hpp
│   │           │   │   ├── concept_def.hpp
│   │           │   │   ├── concept_undef.hpp
│   │           │   │   ├── general.hpp
│   │           │   │   ├── has_constraints.hpp
│   │           │   │   └── msvc.hpp
│   │           │   ├── requires.hpp
│   │           │   └── usage.hpp
│   │           ├── concept_archetype.hpp
│   │           ├── concept_check/
│   │           │   ├── borland.hpp
│   │           │   ├── general.hpp
│   │           │   ├── has_constraints.hpp
│   │           │   └── msvc.hpp
│   │           ├── concept_check.hpp
│   │           ├── config/
│   │           │   ├── abi/
│   │           │   │   ├── borland_prefix.hpp
│   │           │   │   ├── borland_suffix.hpp
│   │           │   │   ├── msvc_prefix.hpp
│   │           │   │   └── msvc_suffix.hpp
│   │           │   ├── abi_prefix.hpp
│   │           │   ├── abi_suffix.hpp
│   │           │   ├── auto_link.hpp
│   │           │   ├── compiler/
│   │           │   │   ├── borland.hpp
│   │           │   │   ├── clang.hpp
│   │           │   │   ├── codegear.hpp
│   │           │   │   ├── comeau.hpp
│   │           │   │   ├── common_edg.hpp
│   │           │   │   ├── compaq_cxx.hpp
│   │           │   │   ├── cray.hpp
│   │           │   │   ├── diab.hpp
│   │           │   │   ├── digitalmars.hpp
│   │           │   │   ├── gcc.hpp
│   │           │   │   ├── gcc_xml.hpp
│   │           │   │   ├── greenhills.hpp
│   │           │   │   ├── hp_acc.hpp
│   │           │   │   ├── intel.hpp
│   │           │   │   ├── kai.hpp
│   │           │   │   ├── metrowerks.hpp
│   │           │   │   ├── mpw.hpp
│   │           │   │   ├── nvcc.hpp
│   │           │   │   ├── pathscale.hpp
│   │           │   │   ├── pgi.hpp
│   │           │   │   ├── sgi_mipspro.hpp
│   │           │   │   ├── sunpro_cc.hpp
│   │           │   │   ├── vacpp.hpp
│   │           │   │   ├── visualc.hpp
│   │           │   │   ├── xlcpp.hpp
│   │           │   │   └── xlcpp_zos.hpp
│   │           │   ├── detail/
│   │           │   │   ├── posix_features.hpp
│   │           │   │   ├── select_compiler_config.hpp
│   │           │   │   ├── select_platform_config.hpp
│   │           │   │   ├── select_stdlib_config.hpp
│   │           │   │   └── suffix.hpp
│   │           │   ├── header_deprecated.hpp
│   │           │   ├── helper_macros.hpp
│   │           │   ├── no_tr1/
│   │           │   │   ├── cmath.hpp
│   │           │   │   ├── complex.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   └── utility.hpp
│   │           │   ├── platform/
│   │           │   │   ├── aix.hpp
│   │           │   │   ├── amigaos.hpp
│   │           │   │   ├── beos.hpp
│   │           │   │   ├── bsd.hpp
│   │           │   │   ├── cloudabi.hpp
│   │           │   │   ├── cray.hpp
│   │           │   │   ├── cygwin.hpp
│   │           │   │   ├── haiku.hpp
│   │           │   │   ├── hpux.hpp
│   │           │   │   ├── irix.hpp
│   │           │   │   ├── linux.hpp
│   │           │   │   ├── macos.hpp
│   │           │   │   ├── qnxnto.hpp
│   │           │   │   ├── solaris.hpp
│   │           │   │   ├── symbian.hpp
│   │           │   │   ├── vms.hpp
│   │           │   │   ├── vxworks.hpp
│   │           │   │   ├── win32.hpp
│   │           │   │   └── zos.hpp
│   │           │   ├── pragma_message.hpp
│   │           │   ├── requires_threads.hpp
│   │           │   ├── stdlib/
│   │           │   │   ├── dinkumware.hpp
│   │           │   │   ├── libcomo.hpp
│   │           │   │   ├── libcpp.hpp
│   │           │   │   ├── libstdcpp3.hpp
│   │           │   │   ├── modena.hpp
│   │           │   │   ├── msl.hpp
│   │           │   │   ├── roguewave.hpp
│   │           │   │   ├── sgi.hpp
│   │           │   │   ├── stlport.hpp
│   │           │   │   ├── vacpp.hpp
│   │           │   │   └── xlcpp_zos.hpp
│   │           │   ├── user.hpp
│   │           │   ├── warning_disable.hpp
│   │           │   └── workaround.hpp
│   │           ├── config.hpp
│   │           ├── container/
│   │           │   ├── adaptive_pool.hpp
│   │           │   ├── allocator.hpp
│   │           │   ├── allocator_traits.hpp
│   │           │   ├── container_fwd.hpp
│   │           │   ├── deque.hpp
│   │           │   ├── detail/
│   │           │   │   ├── adaptive_node_pool.hpp
│   │           │   │   ├── adaptive_node_pool_impl.hpp
│   │           │   │   ├── addressof.hpp
│   │           │   │   ├── advanced_insert_int.hpp
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── alloc_helpers.hpp
│   │           │   │   ├── alloc_lib.h
│   │           │   │   ├── allocation_type.hpp
│   │           │   │   ├── allocator_version_traits.hpp
│   │           │   │   ├── auto_link.hpp
│   │           │   │   ├── block_list.hpp
│   │           │   │   ├── block_slist.hpp
│   │           │   │   ├── compare_functors.hpp
│   │           │   │   ├── config_begin.hpp
│   │           │   │   ├── config_end.hpp
│   │           │   │   ├── construct_in_place.hpp
│   │           │   │   ├── container_or_allocator_rebind.hpp
│   │           │   │   ├── container_rebind.hpp
│   │           │   │   ├── copy_move_algo.hpp
│   │           │   │   ├── destroyers.hpp
│   │           │   │   ├── dispatch_uses_allocator.hpp
│   │           │   │   ├── dlmalloc.hpp
│   │           │   │   ├── flat_tree.hpp
│   │           │   │   ├── function_detector.hpp
│   │           │   │   ├── is_container.hpp
│   │           │   │   ├── is_contiguous_container.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── iterator.hpp
│   │           │   │   ├── iterator_to_raw_pointer.hpp
│   │           │   │   ├── iterators.hpp
│   │           │   │   ├── math_functions.hpp
│   │           │   │   ├── min_max.hpp
│   │           │   │   ├── minimal_char_traits_header.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── multiallocation_chain.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── next_capacity.hpp
│   │           │   │   ├── node_alloc_holder.hpp
│   │           │   │   ├── node_pool.hpp
│   │           │   │   ├── node_pool_impl.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── pair_key_mapped_of_value.hpp
│   │           │   │   ├── placement_new.hpp
│   │           │   │   ├── pool_common.hpp
│   │           │   │   ├── pool_common_alloc.hpp
│   │           │   │   ├── pool_resource.hpp
│   │           │   │   ├── singleton.hpp
│   │           │   │   ├── std_fwd.hpp
│   │           │   │   ├── thread_mutex.hpp
│   │           │   │   ├── transform_iterator.hpp
│   │           │   │   ├── tree.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── value_functors.hpp
│   │           │   │   ├── value_init.hpp
│   │           │   │   ├── variadic_templates_tools.hpp
│   │           │   │   ├── version_type.hpp
│   │           │   │   └── workaround.hpp
│   │           │   ├── flat_map.hpp
│   │           │   ├── flat_set.hpp
│   │           │   ├── list.hpp
│   │           │   ├── map.hpp
│   │           │   ├── new_allocator.hpp
│   │           │   ├── node_allocator.hpp
│   │           │   ├── node_handle.hpp
│   │           │   ├── options.hpp
│   │           │   ├── pmr/
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── flat_map.hpp
│   │           │   │   ├── flat_set.hpp
│   │           │   │   ├── global_resource.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── memory_resource.hpp
│   │           │   │   ├── monotonic_buffer_resource.hpp
│   │           │   │   ├── polymorphic_allocator.hpp
│   │           │   │   ├── pool_options.hpp
│   │           │   │   ├── resource_adaptor.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── slist.hpp
│   │           │   │   ├── small_vector.hpp
│   │           │   │   ├── stable_vector.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── synchronized_pool_resource.hpp
│   │           │   │   ├── unsynchronized_pool_resource.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── scoped_allocator.hpp
│   │           │   ├── scoped_allocator_fwd.hpp
│   │           │   ├── set.hpp
│   │           │   ├── slist.hpp
│   │           │   ├── small_vector.hpp
│   │           │   ├── stable_vector.hpp
│   │           │   ├── static_vector.hpp
│   │           │   ├── string.hpp
│   │           │   ├── throw_exception.hpp
│   │           │   ├── uses_allocator.hpp
│   │           │   ├── uses_allocator_fwd.hpp
│   │           │   └── vector.hpp
│   │           ├── container_hash/
│   │           │   ├── detail/
│   │           │   │   ├── float_functions.hpp
│   │           │   │   ├── hash_float.hpp
│   │           │   │   └── limits.hpp
│   │           │   ├── extensions.hpp
│   │           │   ├── hash.hpp
│   │           │   └── hash_fwd.hpp
│   │           ├── context/
│   │           │   ├── all.hpp
│   │           │   ├── continuation.hpp
│   │           │   ├── continuation_fcontext.hpp
│   │           │   ├── continuation_ucontext.hpp
│   │           │   ├── continuation_winfib.hpp
│   │           │   ├── detail/
│   │           │   │   ├── apply.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── exchange.hpp
│   │           │   │   ├── externc.hpp
│   │           │   │   ├── fcontext.hpp
│   │           │   │   ├── index_sequence.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── prefetch.hpp
│   │           │   │   └── tuple.hpp
│   │           │   ├── fiber.hpp
│   │           │   ├── fiber_fcontext.hpp
│   │           │   ├── fiber_ucontext.hpp
│   │           │   ├── fiber_winfib.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── flags.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── posix/
│   │           │   │   ├── protected_fixedsize_stack.hpp
│   │           │   │   └── segmented_stack.hpp
│   │           │   ├── preallocated.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   ├── segmented_stack.hpp
│   │           │   ├── stack_context.hpp
│   │           │   ├── stack_traits.hpp
│   │           │   └── windows/
│   │           │       └── protected_fixedsize_stack.hpp
│   │           ├── contract/
│   │           │   ├── assert.hpp
│   │           │   ├── base_types.hpp
│   │           │   ├── call_if.hpp
│   │           │   ├── check.hpp
│   │           │   ├── constructor.hpp
│   │           │   ├── core/
│   │           │   │   ├── access.hpp
│   │           │   │   ├── check_macro.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── constructor_precondition.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── specify.hpp
│   │           │   │   └── virtual.hpp
│   │           │   ├── destructor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── assert.hpp
│   │           │   │   ├── auto_ptr.hpp
│   │           │   │   ├── check.hpp
│   │           │   │   ├── checking.hpp
│   │           │   │   ├── condition/
│   │           │   │   │   ├── cond_base.hpp
│   │           │   │   │   ├── cond_inv.hpp
│   │           │   │   │   ├── cond_post.hpp
│   │           │   │   │   └── cond_subcontracting.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── debug.hpp
│   │           │   │   ├── decl.hpp
│   │           │   │   ├── declspec.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── inlined/
│   │           │   │   │   ├── core/
│   │           │   │   │   │   └── exception.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── checking.hpp
│   │           │   │   │   └── old.hpp
│   │           │   │   ├── inlined.hpp
│   │           │   │   ├── name.hpp
│   │           │   │   ├── none.hpp
│   │           │   │   ├── noop.hpp
│   │           │   │   ├── operation/
│   │           │   │   │   ├── constructor.hpp
│   │           │   │   │   ├── destructor.hpp
│   │           │   │   │   ├── function.hpp
│   │           │   │   │   ├── public_function.hpp
│   │           │   │   │   └── static_public_function.hpp
│   │           │   │   ├── operator_safe_bool.hpp
│   │           │   │   ├── preprocessor/
│   │           │   │   │   └── keyword/
│   │           │   │   │       ├── private.hpp
│   │           │   │   │       ├── protected.hpp
│   │           │   │   │       ├── public.hpp
│   │           │   │   │       ├── utility/
│   │           │   │   │       │   └── is.hpp
│   │           │   │   │       └── virtual.hpp
│   │           │   │   ├── static_local_var.hpp
│   │           │   │   ├── tvariadic.hpp
│   │           │   │   └── type_traits/
│   │           │   │       ├── member_function_types.hpp
│   │           │   │       ├── mirror.hpp
│   │           │   │       └── optional.hpp
│   │           │   ├── function.hpp
│   │           │   ├── old.hpp
│   │           │   ├── override.hpp
│   │           │   └── public_function.hpp
│   │           ├── contract.hpp
│   │           ├── contract_macro.hpp
│   │           ├── convert/
│   │           │   ├── base.hpp
│   │           │   ├── detail/
│   │           │   │   ├── char.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── has_member.hpp
│   │           │   │   ├── is_callable.hpp
│   │           │   │   ├── is_converter.hpp
│   │           │   │   ├── is_fun.hpp
│   │           │   │   ├── is_string.hpp
│   │           │   │   └── range.hpp
│   │           │   ├── lexical_cast.hpp
│   │           │   ├── parameters.hpp
│   │           │   ├── printf.hpp
│   │           │   ├── spirit.hpp
│   │           │   ├── stream.hpp
│   │           │   └── strtol.hpp
│   │           ├── convert.hpp
│   │           ├── core/
│   │           │   ├── addressof.hpp
│   │           │   ├── alloc_construct.hpp
│   │           │   ├── allocator_access.hpp
│   │           │   ├── checked_delete.hpp
│   │           │   ├── default_allocator.hpp
│   │           │   ├── demangle.hpp
│   │           │   ├── empty_value.hpp
│   │           │   ├── enable_if.hpp
│   │           │   ├── exchange.hpp
│   │           │   ├── explicit_operator_bool.hpp
│   │           │   ├── first_scalar.hpp
│   │           │   ├── ignore_unused.hpp
│   │           │   ├── is_same.hpp
│   │           │   ├── lightweight_test.hpp
│   │           │   ├── lightweight_test_trait.hpp
│   │           │   ├── no_exceptions_support.hpp
│   │           │   ├── noinit_adaptor.hpp
│   │           │   ├── noncopyable.hpp
│   │           │   ├── null_deleter.hpp
│   │           │   ├── nvp.hpp
│   │           │   ├── pointer_traits.hpp
│   │           │   ├── quick_exit.hpp
│   │           │   ├── ref.hpp
│   │           │   ├── scoped_enum.hpp
│   │           │   ├── swap.hpp
│   │           │   ├── typeinfo.hpp
│   │           │   ├── uncaught_exceptions.hpp
│   │           │   ├── underlying_type.hpp
│   │           │   └── use_default.hpp
│   │           ├── coroutine/
│   │           │   ├── all.hpp
│   │           │   ├── asymmetric_coroutine.hpp
│   │           │   ├── attributes.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── coroutine_context.hpp
│   │           │   │   ├── data.hpp
│   │           │   │   ├── flags.hpp
│   │           │   │   ├── parameters.hpp
│   │           │   │   ├── preallocated.hpp
│   │           │   │   ├── pull_coroutine_impl.hpp
│   │           │   │   ├── pull_coroutine_object.hpp
│   │           │   │   ├── pull_coroutine_synthesized.hpp
│   │           │   │   ├── push_coroutine_impl.hpp
│   │           │   │   ├── push_coroutine_object.hpp
│   │           │   │   ├── push_coroutine_synthesized.hpp
│   │           │   │   ├── setup.hpp
│   │           │   │   ├── symmetric_coroutine_call.hpp
│   │           │   │   ├── symmetric_coroutine_impl.hpp
│   │           │   │   ├── symmetric_coroutine_object.hpp
│   │           │   │   ├── symmetric_coroutine_yield.hpp
│   │           │   │   ├── trampoline.hpp
│   │           │   │   ├── trampoline_pull.hpp
│   │           │   │   └── trampoline_push.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── flags.hpp
│   │           │   ├── posix/
│   │           │   │   ├── protected_stack_allocator.hpp
│   │           │   │   └── segmented_stack_allocator.hpp
│   │           │   ├── protected_stack_allocator.hpp
│   │           │   ├── segmented_stack_allocator.hpp
│   │           │   ├── stack_allocator.hpp
│   │           │   ├── stack_context.hpp
│   │           │   ├── stack_traits.hpp
│   │           │   ├── standard_stack_allocator.hpp
│   │           │   ├── symmetric_coroutine.hpp
│   │           │   └── windows/
│   │           │       └── protected_stack_allocator.hpp
│   │           ├── coroutine2/
│   │           │   ├── all.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── coroutine.hpp
│   │           │   │   ├── create_control_block.ipp
│   │           │   │   ├── decay_copy.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── pull_control_block_cc.hpp
│   │           │   │   ├── pull_control_block_cc.ipp
│   │           │   │   ├── pull_coroutine.hpp
│   │           │   │   ├── pull_coroutine.ipp
│   │           │   │   ├── push_control_block_cc.hpp
│   │           │   │   ├── push_control_block_cc.ipp
│   │           │   │   ├── push_coroutine.hpp
│   │           │   │   ├── push_coroutine.ipp
│   │           │   │   ├── state.hpp
│   │           │   │   └── wrap.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   └── segmented_stack.hpp
│   │           ├── crc.hpp
│   │           ├── cregex.hpp
│   │           ├── cstdfloat.hpp
│   │           ├── cstdint.hpp
│   │           ├── cstdlib.hpp
│   │           ├── current_function.hpp
│   │           ├── cxx11_char_types.hpp
│   │           ├── date_time/
│   │           │   ├── adjust_functors.hpp
│   │           │   ├── c_local_time_adjustor.hpp
│   │           │   ├── c_time.hpp
│   │           │   ├── compiler_config.hpp
│   │           │   ├── constrained_value.hpp
│   │           │   ├── date.hpp
│   │           │   ├── date_clock_device.hpp
│   │           │   ├── date_defs.hpp
│   │           │   ├── date_duration.hpp
│   │           │   ├── date_duration_types.hpp
│   │           │   ├── date_facet.hpp
│   │           │   ├── date_format_simple.hpp
│   │           │   ├── date_formatting.hpp
│   │           │   ├── date_formatting_limited.hpp
│   │           │   ├── date_formatting_locales.hpp
│   │           │   ├── date_generator_formatter.hpp
│   │           │   ├── date_generator_parser.hpp
│   │           │   ├── date_generators.hpp
│   │           │   ├── date_iterator.hpp
│   │           │   ├── date_names_put.hpp
│   │           │   ├── date_parsing.hpp
│   │           │   ├── dst_rules.hpp
│   │           │   ├── dst_transition_generators.hpp
│   │           │   ├── filetime_functions.hpp
│   │           │   ├── find_match.hpp
│   │           │   ├── format_date_parser.hpp
│   │           │   ├── gregorian/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── formatters.hpp
│   │           │   │   ├── formatters_limited.hpp
│   │           │   │   ├── greg_calendar.hpp
│   │           │   │   ├── greg_date.hpp
│   │           │   │   ├── greg_day.hpp
│   │           │   │   ├── greg_day_of_year.hpp
│   │           │   │   ├── greg_duration.hpp
│   │           │   │   ├── greg_duration_types.hpp
│   │           │   │   ├── greg_facet.hpp
│   │           │   │   ├── greg_month.hpp
│   │           │   │   ├── greg_serialize.hpp
│   │           │   │   ├── greg_weekday.hpp
│   │           │   │   ├── greg_year.hpp
│   │           │   │   ├── greg_ymd.hpp
│   │           │   │   ├── gregorian.hpp
│   │           │   │   ├── gregorian_io.hpp
│   │           │   │   ├── gregorian_types.hpp
│   │           │   │   └── parsers.hpp
│   │           │   ├── gregorian_calendar.hpp
│   │           │   ├── gregorian_calendar.ipp
│   │           │   ├── int_adapter.hpp
│   │           │   ├── iso_format.hpp
│   │           │   ├── local_time/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── custom_time_zone.hpp
│   │           │   │   ├── date_duration_operators.hpp
│   │           │   │   ├── dst_transition_day_rules.hpp
│   │           │   │   ├── local_date_time.hpp
│   │           │   │   ├── local_time.hpp
│   │           │   │   ├── local_time_io.hpp
│   │           │   │   ├── local_time_types.hpp
│   │           │   │   ├── posix_time_zone.hpp
│   │           │   │   └── tz_database.hpp
│   │           │   ├── local_time_adjustor.hpp
│   │           │   ├── local_timezone_defs.hpp
│   │           │   ├── locale_config.hpp
│   │           │   ├── microsec_time_clock.hpp
│   │           │   ├── parse_format_base.hpp
│   │           │   ├── period.hpp
│   │           │   ├── period_formatter.hpp
│   │           │   ├── period_parser.hpp
│   │           │   ├── posix_time/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── date_duration_operators.hpp
│   │           │   │   ├── posix_time.hpp
│   │           │   │   ├── posix_time_config.hpp
│   │           │   │   ├── posix_time_duration.hpp
│   │           │   │   ├── posix_time_io.hpp
│   │           │   │   ├── posix_time_legacy_io.hpp
│   │           │   │   ├── posix_time_system.hpp
│   │           │   │   ├── posix_time_types.hpp
│   │           │   │   ├── ptime.hpp
│   │           │   │   ├── time_formatters.hpp
│   │           │   │   ├── time_formatters_limited.hpp
│   │           │   │   ├── time_parsers.hpp
│   │           │   │   ├── time_period.hpp
│   │           │   │   └── time_serialize.hpp
│   │           │   ├── special_defs.hpp
│   │           │   ├── special_values_formatter.hpp
│   │           │   ├── special_values_parser.hpp
│   │           │   ├── string_convert.hpp
│   │           │   ├── string_parse_tree.hpp
│   │           │   ├── strings_from_facet.hpp
│   │           │   ├── time.hpp
│   │           │   ├── time_clock.hpp
│   │           │   ├── time_defs.hpp
│   │           │   ├── time_duration.hpp
│   │           │   ├── time_facet.hpp
│   │           │   ├── time_formatting_streams.hpp
│   │           │   ├── time_iterator.hpp
│   │           │   ├── time_parsing.hpp
│   │           │   ├── time_resolution_traits.hpp
│   │           │   ├── time_system_counted.hpp
│   │           │   ├── time_system_split.hpp
│   │           │   ├── time_zone_base.hpp
│   │           │   ├── time_zone_names.hpp
│   │           │   ├── tz_db_base.hpp
│   │           │   ├── wrapping_int.hpp
│   │           │   └── year_month_day.hpp
│   │           ├── date_time.hpp
│   │           ├── detail/
│   │           │   ├── algorithm.hpp
│   │           │   ├── allocator_utilities.hpp
│   │           │   ├── atomic_count.hpp
│   │           │   ├── basic_pointerbuf.hpp
│   │           │   ├── binary_search.hpp
│   │           │   ├── bitmask.hpp
│   │           │   ├── call_traits.hpp
│   │           │   ├── catch_exceptions.hpp
│   │           │   ├── compressed_pair.hpp
│   │           │   ├── container_fwd.hpp
│   │           │   ├── fenv.hpp
│   │           │   ├── has_default_constructor.hpp
│   │           │   ├── identifier.hpp
│   │           │   ├── indirect_traits.hpp
│   │           │   ├── interlocked.hpp
│   │           │   ├── is_incrementable.hpp
│   │           │   ├── is_sorted.hpp
│   │           │   ├── is_xxx.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── lcast_precision.hpp
│   │           │   ├── lightweight_main.hpp
│   │           │   ├── lightweight_mutex.hpp
│   │           │   ├── lightweight_test.hpp
│   │           │   ├── lightweight_test_report.hpp
│   │           │   ├── lightweight_thread.hpp
│   │           │   ├── named_template_params.hpp
│   │           │   ├── no_exceptions_support.hpp
│   │           │   ├── numeric_traits.hpp
│   │           │   ├── ob_compressed_pair.hpp
│   │           │   ├── quick_allocator.hpp
│   │           │   ├── reference_content.hpp
│   │           │   ├── scoped_enum_emulation.hpp
│   │           │   ├── select_type.hpp
│   │           │   ├── sp_typeinfo.hpp
│   │           │   ├── templated_streams.hpp
│   │           │   ├── utf8_codecvt_facet.hpp
│   │           │   ├── utf8_codecvt_facet.ipp
│   │           │   ├── winapi/
│   │           │   │   ├── access_rights.hpp
│   │           │   │   ├── apc.hpp
│   │           │   │   ├── basic_types.hpp
│   │           │   │   ├── bcrypt.hpp
│   │           │   │   ├── character_code_conversion.hpp
│   │           │   │   ├── condition_variable.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── critical_section.hpp
│   │           │   │   ├── crypt.hpp
│   │           │   │   ├── dbghelp.hpp
│   │           │   │   ├── debugapi.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── deprecated_namespace.hpp
│   │           │   │   ├── directory_management.hpp
│   │           │   │   ├── dll.hpp
│   │           │   │   ├── environment.hpp
│   │           │   │   ├── error_codes.hpp
│   │           │   │   ├── error_handling.hpp
│   │           │   │   ├── event.hpp
│   │           │   │   ├── file_management.hpp
│   │           │   │   ├── file_mapping.hpp
│   │           │   │   ├── get_current_process.hpp
│   │           │   │   ├── get_current_process_id.hpp
│   │           │   │   ├── get_current_thread.hpp
│   │           │   │   ├── get_current_thread_id.hpp
│   │           │   │   ├── get_last_error.hpp
│   │           │   │   ├── get_process_times.hpp
│   │           │   │   ├── get_system_directory.hpp
│   │           │   │   ├── get_thread_times.hpp
│   │           │   │   ├── handle_info.hpp
│   │           │   │   ├── handles.hpp
│   │           │   │   ├── heap_memory.hpp
│   │           │   │   ├── init_once.hpp
│   │           │   │   ├── jobs.hpp
│   │           │   │   ├── limits.hpp
│   │           │   │   ├── local_memory.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── overlapped.hpp
│   │           │   │   ├── page_protection_flags.hpp
│   │           │   │   ├── pipes.hpp
│   │           │   │   ├── priority_class.hpp
│   │           │   │   ├── process.hpp
│   │           │   │   ├── security.hpp
│   │           │   │   ├── semaphore.hpp
│   │           │   │   ├── shell.hpp
│   │           │   │   ├── show_window.hpp
│   │           │   │   ├── srw_lock.hpp
│   │           │   │   ├── stack_backtrace.hpp
│   │           │   │   ├── synchronization.hpp
│   │           │   │   ├── system.hpp
│   │           │   │   ├── thread.hpp
│   │           │   │   ├── thread_pool.hpp
│   │           │   │   ├── time.hpp
│   │           │   │   ├── timers.hpp
│   │           │   │   ├── tls.hpp
│   │           │   │   ├── wait.hpp
│   │           │   │   └── waitable_timer.hpp
│   │           │   └── workaround.hpp
│   │           ├── dll/
│   │           │   ├── alias.hpp
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── aggressive_ptr_cast.hpp
│   │           │   │   ├── ctor_dtor.hpp
│   │           │   │   ├── demangling/
│   │           │   │   │   ├── demangle_symbol.hpp
│   │           │   │   │   ├── itanium.hpp
│   │           │   │   │   ├── mangled_storage_base.hpp
│   │           │   │   │   └── msvc.hpp
│   │           │   │   ├── elf_info.hpp
│   │           │   │   ├── get_mem_fn_type.hpp
│   │           │   │   ├── import_mangled_helpers.hpp
│   │           │   │   ├── macho_info.hpp
│   │           │   │   ├── pe_info.hpp
│   │           │   │   ├── posix/
│   │           │   │   │   ├── path_from_handle.hpp
│   │           │   │   │   ├── program_location_impl.hpp
│   │           │   │   │   └── shared_library_impl.hpp
│   │           │   │   ├── system_error.hpp
│   │           │   │   ├── type_info.hpp
│   │           │   │   └── windows/
│   │           │   │       ├── path_from_handle.hpp
│   │           │   │       └── shared_library_impl.hpp
│   │           │   ├── import.hpp
│   │           │   ├── import_class.hpp
│   │           │   ├── import_mangled.hpp
│   │           │   ├── library_info.hpp
│   │           │   ├── runtime_symbol_info.hpp
│   │           │   ├── shared_library.hpp
│   │           │   ├── shared_library_load_mode.hpp
│   │           │   └── smart_library.hpp
│   │           ├── dll.hpp
│   │           ├── dynamic_bitset/
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── dynamic_bitset.hpp
│   │           │   │   └── lowest_bit.hpp
│   │           │   ├── dynamic_bitset.hpp
│   │           │   └── serialization.hpp
│   │           ├── dynamic_bitset.hpp
│   │           ├── dynamic_bitset_fwd.hpp
│   │           ├── enable_shared_from_this.hpp
│   │           ├── endian/
│   │           │   ├── arithmetic.hpp
│   │           │   ├── buffers.hpp
│   │           │   ├── conversion.hpp
│   │           │   ├── detail/
│   │           │   │   ├── disable_warnings.hpp
│   │           │   │   ├── disable_warnings_pop.hpp
│   │           │   │   ├── endian_load.hpp
│   │           │   │   ├── endian_reverse.hpp
│   │           │   │   ├── endian_store.hpp
│   │           │   │   ├── integral_by_size.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── is_scoped_enum.hpp
│   │           │   │   ├── is_trivially_copyable.hpp
│   │           │   │   └── order.hpp
│   │           │   └── endian.hpp
│   │           ├── endian.hpp
│   │           ├── exception/
│   │           │   ├── all.hpp
│   │           │   ├── current_exception_cast.hpp
│   │           │   ├── detail/
│   │           │   │   ├── clone_current_exception.hpp
│   │           │   │   ├── error_info_impl.hpp
│   │           │   │   ├── exception_ptr.hpp
│   │           │   │   ├── is_output_streamable.hpp
│   │           │   │   ├── object_hex_dump.hpp
│   │           │   │   ├── shared_ptr.hpp
│   │           │   │   └── type_info.hpp
│   │           │   ├── diagnostic_information.hpp
│   │           │   ├── enable_current_exception.hpp
│   │           │   ├── enable_error_info.hpp
│   │           │   ├── errinfo_api_function.hpp
│   │           │   ├── errinfo_at_line.hpp
│   │           │   ├── errinfo_errno.hpp
│   │           │   ├── errinfo_file_handle.hpp
│   │           │   ├── errinfo_file_name.hpp
│   │           │   ├── errinfo_file_open_mode.hpp
│   │           │   ├── errinfo_nested_exception.hpp
│   │           │   ├── errinfo_type_info_name.hpp
│   │           │   ├── error_info.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── get_error_info.hpp
│   │           │   ├── info.hpp
│   │           │   ├── info_tuple.hpp
│   │           │   ├── to_string.hpp
│   │           │   └── to_string_stub.hpp
│   │           ├── exception_ptr.hpp
│   │           ├── fiber/
│   │           │   ├── algo/
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── round_robin.hpp
│   │           │   │   ├── shared_work.hpp
│   │           │   │   └── work_stealing.hpp
│   │           │   ├── all.hpp
│   │           │   ├── barrier.hpp
│   │           │   ├── buffered_channel.hpp
│   │           │   ├── channel_op_status.hpp
│   │           │   ├── condition_variable.hpp
│   │           │   ├── context.hpp
│   │           │   ├── cuda/
│   │           │   │   └── waitfor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── context_spinlock_queue.hpp
│   │           │   │   ├── context_spmc_queue.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── cpu_relax.hpp
│   │           │   │   ├── data.hpp
│   │           │   │   ├── decay_copy.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── exchange.hpp
│   │           │   │   ├── fss.hpp
│   │           │   │   ├── futex.hpp
│   │           │   │   ├── is_all_same.hpp
│   │           │   │   ├── rtm.hpp
│   │           │   │   ├── spinlock.hpp
│   │           │   │   ├── spinlock_rtm.hpp
│   │           │   │   ├── spinlock_status.hpp
│   │           │   │   ├── spinlock_ttas.hpp
│   │           │   │   ├── spinlock_ttas_adaptive.hpp
│   │           │   │   ├── spinlock_ttas_adaptive_futex.hpp
│   │           │   │   ├── spinlock_ttas_futex.hpp
│   │           │   │   └── thread_barrier.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── fiber.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── fss.hpp
│   │           │   ├── future/
│   │           │   │   ├── async.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── shared_state.hpp
│   │           │   │   │   ├── shared_state_object.hpp
│   │           │   │   │   ├── task_base.hpp
│   │           │   │   │   └── task_object.hpp
│   │           │   │   ├── future.hpp
│   │           │   │   ├── future_status.hpp
│   │           │   │   ├── packaged_task.hpp
│   │           │   │   └── promise.hpp
│   │           │   ├── future.hpp
│   │           │   ├── hip/
│   │           │   │   └── waitfor.hpp
│   │           │   ├── mutex.hpp
│   │           │   ├── numa/
│   │           │   │   ├── algo/
│   │           │   │   │   └── work_stealing.hpp
│   │           │   │   ├── all.hpp
│   │           │   │   ├── pin_thread.hpp
│   │           │   │   └── topology.hpp
│   │           │   ├── operations.hpp
│   │           │   ├── policy.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── properties.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   ├── recursive_mutex.hpp
│   │           │   ├── recursive_timed_mutex.hpp
│   │           │   ├── scheduler.hpp
│   │           │   ├── segmented_stack.hpp
│   │           │   ├── timed_mutex.hpp
│   │           │   ├── type.hpp
│   │           │   └── unbuffered_channel.hpp
│   │           ├── filesystem/
│   │           │   ├── config.hpp
│   │           │   ├── convenience.hpp
│   │           │   ├── detail/
│   │           │   │   ├── macro_value.hpp
│   │           │   │   └── utf8_codecvt_facet.hpp
│   │           │   ├── directory.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── file_status.hpp
│   │           │   ├── fstream.hpp
│   │           │   ├── operations.hpp
│   │           │   ├── path.hpp
│   │           │   ├── path_traits.hpp
│   │           │   └── string_file.hpp
│   │           ├── filesystem.hpp
│   │           ├── flyweight/
│   │           │   ├── assoc_container_factory.hpp
│   │           │   ├── assoc_container_factory_fwd.hpp
│   │           │   ├── detail/
│   │           │   │   ├── archive_constructed.hpp
│   │           │   │   ├── default_value_policy.hpp
│   │           │   │   ├── dyn_perfect_fwd.hpp
│   │           │   │   ├── flyweight_core.hpp
│   │           │   │   ├── is_placeholder_expr.hpp
│   │           │   │   ├── nested_xxx_if_not_ph.hpp
│   │           │   │   ├── not_placeholder_expr.hpp
│   │           │   │   ├── perfect_fwd.hpp
│   │           │   │   ├── pp_perfect_fwd.hpp
│   │           │   │   ├── recursive_lw_mutex.hpp
│   │           │   │   ├── serialization_helper.hpp
│   │           │   │   └── value_tag.hpp
│   │           │   ├── factory_tag.hpp
│   │           │   ├── flyweight.hpp
│   │           │   ├── flyweight_fwd.hpp
│   │           │   ├── hashed_factory.hpp
│   │           │   ├── hashed_factory_fwd.hpp
│   │           │   ├── holder_tag.hpp
│   │           │   ├── intermodule_holder.hpp
│   │           │   ├── intermodule_holder_fwd.hpp
│   │           │   ├── key_value.hpp
│   │           │   ├── key_value_fwd.hpp
│   │           │   ├── locking_tag.hpp
│   │           │   ├── no_locking.hpp
│   │           │   ├── no_locking_fwd.hpp
│   │           │   ├── no_tracking.hpp
│   │           │   ├── no_tracking_fwd.hpp
│   │           │   ├── refcounted.hpp
│   │           │   ├── refcounted_fwd.hpp
│   │           │   ├── serialize.hpp
│   │           │   ├── set_factory.hpp
│   │           │   ├── set_factory_fwd.hpp
│   │           │   ├── simple_locking.hpp
│   │           │   ├── simple_locking_fwd.hpp
│   │           │   ├── static_holder.hpp
│   │           │   ├── static_holder_fwd.hpp
│   │           │   ├── tag.hpp
│   │           │   └── tracking_tag.hpp
│   │           ├── flyweight.hpp
│   │           ├── foreach.hpp
│   │           ├── foreach_fwd.hpp
│   │           ├── format/
│   │           │   ├── alt_sstream.hpp
│   │           │   ├── alt_sstream_impl.hpp
│   │           │   ├── detail/
│   │           │   │   ├── compat_workarounds.hpp
│   │           │   │   ├── config_macros.hpp
│   │           │   │   ├── msvc_disambiguater.hpp
│   │           │   │   ├── unset_macros.hpp
│   │           │   │   ├── workarounds_gcc-2_95.hpp
│   │           │   │   └── workarounds_stlport.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── feed_args.hpp
│   │           │   ├── format_class.hpp
│   │           │   ├── format_fwd.hpp
│   │           │   ├── format_implementation.hpp
│   │           │   ├── free_funcs.hpp
│   │           │   ├── group.hpp
│   │           │   ├── internals.hpp
│   │           │   ├── internals_fwd.hpp
│   │           │   └── parsing.hpp
│   │           ├── format.hpp
│   │           ├── function/
│   │           │   ├── detail/
│   │           │   │   ├── function_iterate.hpp
│   │           │   │   ├── gen_maybe_include.pl
│   │           │   │   ├── maybe_include.hpp
│   │           │   │   └── prologue.hpp
│   │           │   ├── function0.hpp
│   │           │   ├── function1.hpp
│   │           │   ├── function10.hpp
│   │           │   ├── function2.hpp
│   │           │   ├── function3.hpp
│   │           │   ├── function4.hpp
│   │           │   ├── function5.hpp
│   │           │   ├── function6.hpp
│   │           │   ├── function7.hpp
│   │           │   ├── function8.hpp
│   │           │   ├── function9.hpp
│   │           │   ├── function_base.hpp
│   │           │   ├── function_fwd.hpp
│   │           │   ├── function_template.hpp
│   │           │   ├── function_typeof.hpp
│   │           │   └── gen_function_N.pl
│   │           ├── function.hpp
│   │           ├── function_equal.hpp
│   │           ├── function_output_iterator.hpp
│   │           ├── function_types/
│   │           │   ├── components.hpp
│   │           │   ├── config/
│   │           │   │   ├── cc_names.hpp
│   │           │   │   ├── compiler.hpp
│   │           │   │   └── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── class_transform.hpp
│   │           │   │   ├── classifier.hpp
│   │           │   │   ├── classifier_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   ├── components_as_mpl_sequence.hpp
│   │           │   │   ├── components_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   ├── cv_traits.hpp
│   │           │   │   ├── encoding/
│   │           │   │   │   ├── aliases_def.hpp
│   │           │   │   │   ├── aliases_undef.hpp
│   │           │   │   │   ├── def.hpp
│   │           │   │   │   └── undef.hpp
│   │           │   │   ├── pp_arity_loop.hpp
│   │           │   │   ├── pp_cc_loop/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_loop.hpp
│   │           │   │   ├── pp_retag_default_cc/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_tags/
│   │           │   │   │   ├── cc_tag.hpp
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_variate_loop/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── retag_default_cc.hpp
│   │           │   │   ├── synthesize.hpp
│   │           │   │   ├── synthesize_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   └── to_sequence.hpp
│   │           │   ├── function_arity.hpp
│   │           │   ├── function_pointer.hpp
│   │           │   ├── function_reference.hpp
│   │           │   ├── function_type.hpp
│   │           │   ├── is_callable_builtin.hpp
│   │           │   ├── is_function.hpp
│   │           │   ├── is_function_pointer.hpp
│   │           │   ├── is_function_reference.hpp
│   │           │   ├── is_member_function_pointer.hpp
│   │           │   ├── is_member_object_pointer.hpp
│   │           │   ├── is_member_pointer.hpp
│   │           │   ├── is_nonmember_callable_builtin.hpp
│   │           │   ├── member_function_pointer.hpp
│   │           │   ├── member_object_pointer.hpp
│   │           │   ├── parameter_types.hpp
│   │           │   ├── property_tags.hpp
│   │           │   └── result_type.hpp
│   │           ├── functional/
│   │           │   ├── factory.hpp
│   │           │   ├── forward_adapter.hpp
│   │           │   ├── hash/
│   │           │   │   ├── extensions.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   └── hash_fwd.hpp
│   │           │   ├── hash.hpp
│   │           │   ├── hash_fwd.hpp
│   │           │   ├── lightweight_forward_adapter.hpp
│   │           │   ├── overloaded_function/
│   │           │   │   ├── config.hpp
│   │           │   │   └── detail/
│   │           │   │       ├── base.hpp
│   │           │   │       └── function_type.hpp
│   │           │   ├── overloaded_function.hpp
│   │           │   └── value_factory.hpp
│   │           ├── functional.hpp
│   │           ├── fusion/
│   │           │   ├── adapted/
│   │           │   │   ├── adt/
│   │           │   │   │   ├── adapt_adt.hpp
│   │           │   │   │   ├── adapt_adt_named.hpp
│   │           │   │   │   ├── adapt_assoc_adt.hpp
│   │           │   │   │   ├── adapt_assoc_adt_named.hpp
│   │           │   │   │   └── detail/
│   │           │   │   │       ├── adapt_base.hpp
│   │           │   │   │       ├── adapt_base_assoc_attr_filler.hpp
│   │           │   │   │       ├── adapt_base_attr_filler.hpp
│   │           │   │   │       └── extension.hpp
│   │           │   │   ├── adt.hpp
│   │           │   │   ├── array/
│   │           │   │   │   ├── at_impl.hpp
│   │           │   │   │   ├── begin_impl.hpp
│   │           │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   ├── deref_impl.hpp
│   │           │   │   │   ├── end_impl.hpp
│   │           │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   ├── size_impl.hpp
│   │           │   │   │   ├── tag_of.hpp
│   │           │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   └── value_of_impl.hpp
│   │           │   │   ├── array.hpp
│   │           │   │   ├── boost_array/
│   │           │   │   │   ├── array_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── boost_array.hpp
│   │           │   │   ├── boost_tuple/
│   │           │   │   │   ├── boost_tuple_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_cons.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── mpl/
│   │           │   │   │   │   └── clear.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── boost_tuple.hpp
│   │           │   │   ├── mpl/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── empty_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── has_key_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── mpl_iterator.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── std_array/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── array_size.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── std_array_iterator.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── std_array.hpp
│   │           │   │   ├── std_pair.hpp
│   │           │   │   ├── std_tuple/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_std_tuple.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── mpl/
│   │           │   │   │   │   └── clear.hpp
│   │           │   │   │   ├── std_tuple_iterator.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── std_tuple.hpp
│   │           │   │   ├── struct/
│   │           │   │   │   ├── adapt_assoc_struct.hpp
│   │           │   │   │   ├── adapt_assoc_struct_named.hpp
│   │           │   │   │   ├── adapt_struct.hpp
│   │           │   │   │   ├── adapt_struct_named.hpp
│   │           │   │   │   ├── define_assoc_struct.hpp
│   │           │   │   │   ├── define_struct.hpp
│   │           │   │   │   ├── define_struct_inline.hpp
│   │           │   │   │   └── detail/
│   │           │   │   │       ├── adapt_auto.hpp
│   │           │   │   │       ├── adapt_base.hpp
│   │           │   │   │       ├── adapt_base_assoc_attr_filler.hpp
│   │           │   │   │       ├── adapt_base_attr_filler.hpp
│   │           │   │   │       ├── adapt_is_tpl.hpp
│   │           │   │   │       ├── at_impl.hpp
│   │           │   │   │       ├── begin_impl.hpp
│   │           │   │   │       ├── category_of_impl.hpp
│   │           │   │   │       ├── define_struct.hpp
│   │           │   │   │       ├── define_struct_inline.hpp
│   │           │   │   │       ├── deref_data_impl.hpp
│   │           │   │   │       ├── deref_impl.hpp
│   │           │   │   │       ├── end_impl.hpp
│   │           │   │   │       ├── extension.hpp
│   │           │   │   │       ├── is_sequence_impl.hpp
│   │           │   │   │       ├── is_view_impl.hpp
│   │           │   │   │       ├── key_of_impl.hpp
│   │           │   │   │       ├── namespace.hpp
│   │           │   │   │       ├── preprocessor/
│   │           │   │   │       │   └── is_seq.hpp
│   │           │   │   │       ├── proxy_type.hpp
│   │           │   │   │       ├── size_impl.hpp
│   │           │   │   │       ├── value_at_impl.hpp
│   │           │   │   │       ├── value_of_data_impl.hpp
│   │           │   │   │       └── value_of_impl.hpp
│   │           │   │   └── struct.hpp
│   │           │   ├── adapted.hpp
│   │           │   ├── algorithm/
│   │           │   │   ├── auxiliary/
│   │           │   │   │   ├── copy.hpp
│   │           │   │   │   └── move.hpp
│   │           │   │   ├── auxiliary.hpp
│   │           │   │   ├── iteration/
│   │           │   │   │   ├── accumulate.hpp
│   │           │   │   │   ├── accumulate_fwd.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── fold.hpp
│   │           │   │   │   │   ├── for_each.hpp
│   │           │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   ├── fold.hpp
│   │           │   │   │   │   │   ├── iter_fold.hpp
│   │           │   │   │   │   │   ├── reverse_fold.hpp
│   │           │   │   │   │   │   └── reverse_iter_fold.hpp
│   │           │   │   │   │   ├── segmented_fold.hpp
│   │           │   │   │   │   └── segmented_for_each.hpp
│   │           │   │   │   ├── fold.hpp
│   │           │   │   │   ├── fold_fwd.hpp
│   │           │   │   │   ├── for_each.hpp
│   │           │   │   │   ├── for_each_fwd.hpp
│   │           │   │   │   ├── iter_fold.hpp
│   │           │   │   │   ├── iter_fold_fwd.hpp
│   │           │   │   │   ├── reverse_fold.hpp
│   │           │   │   │   ├── reverse_fold_fwd.hpp
│   │           │   │   │   ├── reverse_iter_fold.hpp
│   │           │   │   │   └── reverse_iter_fold_fwd.hpp
│   │           │   │   ├── iteration.hpp
│   │           │   │   ├── query/
│   │           │   │   │   ├── all.hpp
│   │           │   │   │   ├── any.hpp
│   │           │   │   │   ├── count.hpp
│   │           │   │   │   ├── count_if.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── all.hpp
│   │           │   │   │   │   ├── any.hpp
│   │           │   │   │   │   ├── count.hpp
│   │           │   │   │   │   ├── count_if.hpp
│   │           │   │   │   │   ├── find_if.hpp
│   │           │   │   │   │   ├── segmented_find.hpp
│   │           │   │   │   │   └── segmented_find_if.hpp
│   │           │   │   │   ├── find.hpp
│   │           │   │   │   ├── find_fwd.hpp
│   │           │   │   │   ├── find_if.hpp
│   │           │   │   │   ├── find_if_fwd.hpp
│   │           │   │   │   └── none.hpp
│   │           │   │   ├── query.hpp
│   │           │   │   ├── transformation/
│   │           │   │   │   ├── clear.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   ├── zip.hpp
│   │           │   │   │   │   │   ├── zip10.hpp
│   │           │   │   │   │   │   ├── zip20.hpp
│   │           │   │   │   │   │   ├── zip30.hpp
│   │           │   │   │   │   │   ├── zip40.hpp
│   │           │   │   │   │   │   └── zip50.hpp
│   │           │   │   │   │   ├── replace.hpp
│   │           │   │   │   │   └── replace_if.hpp
│   │           │   │   │   ├── erase.hpp
│   │           │   │   │   ├── erase_key.hpp
│   │           │   │   │   ├── filter.hpp
│   │           │   │   │   ├── filter_if.hpp
│   │           │   │   │   ├── flatten.hpp
│   │           │   │   │   ├── insert.hpp
│   │           │   │   │   ├── insert_range.hpp
│   │           │   │   │   ├── join.hpp
│   │           │   │   │   ├── pop_back.hpp
│   │           │   │   │   ├── pop_front.hpp
│   │           │   │   │   ├── push_back.hpp
│   │           │   │   │   ├── push_front.hpp
│   │           │   │   │   ├── remove.hpp
│   │           │   │   │   ├── remove_if.hpp
│   │           │   │   │   ├── replace.hpp
│   │           │   │   │   ├── replace_if.hpp
│   │           │   │   │   ├── reverse.hpp
│   │           │   │   │   ├── transform.hpp
│   │           │   │   │   └── zip.hpp
│   │           │   │   └── transformation.hpp
│   │           │   ├── algorithm.hpp
│   │           │   ├── container/
│   │           │   │   ├── deque/
│   │           │   │   │   ├── back_extended_deque.hpp
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── deque.hpp
│   │           │   │   │   ├── deque_fwd.hpp
│   │           │   │   │   ├── deque_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_deque.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_deque.hpp
│   │           │   │   │   │   │   ├── build_deque.hpp
│   │           │   │   │   │   │   ├── deque.hpp
│   │           │   │   │   │   │   ├── deque_forward_ctor.hpp
│   │           │   │   │   │   │   ├── deque_fwd.hpp
│   │           │   │   │   │   │   ├── deque_initial_size.hpp
│   │           │   │   │   │   │   ├── deque_keyed_values.hpp
│   │           │   │   │   │   │   ├── deque_keyed_values_call.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   └── preprocessed/
│   │           │   │   │   │   │       ├── as_deque.hpp
│   │           │   │   │   │   │       ├── as_deque10.hpp
│   │           │   │   │   │   │       ├── as_deque20.hpp
│   │           │   │   │   │   │       ├── as_deque30.hpp
│   │           │   │   │   │   │       ├── as_deque40.hpp
│   │           │   │   │   │   │       ├── as_deque50.hpp
│   │           │   │   │   │   │       ├── deque.hpp
│   │           │   │   │   │   │       ├── deque10.hpp
│   │           │   │   │   │   │       ├── deque10_fwd.hpp
│   │           │   │   │   │   │       ├── deque20.hpp
│   │           │   │   │   │   │       ├── deque20_fwd.hpp
│   │           │   │   │   │   │       ├── deque30.hpp
│   │           │   │   │   │   │       ├── deque30_fwd.hpp
│   │           │   │   │   │   │       ├── deque40.hpp
│   │           │   │   │   │   │       ├── deque40_fwd.hpp
│   │           │   │   │   │   │       ├── deque50.hpp
│   │           │   │   │   │   │       ├── deque50_fwd.hpp
│   │           │   │   │   │   │       ├── deque_fwd.hpp
│   │           │   │   │   │   │       ├── deque_initial_size.hpp
│   │           │   │   │   │   │       ├── deque_initial_size10.hpp
│   │           │   │   │   │   │       ├── deque_initial_size20.hpp
│   │           │   │   │   │   │       ├── deque_initial_size30.hpp
│   │           │   │   │   │   │       ├── deque_initial_size40.hpp
│   │           │   │   │   │   │       ├── deque_initial_size50.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values10.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values20.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values30.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values40.hpp
│   │           │   │   │   │   │       └── deque_keyed_values50.hpp
│   │           │   │   │   │   ├── deque_keyed_values.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── keyed_element.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── front_extended_deque.hpp
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── generation/
│   │           │   │   │   ├── cons_tie.hpp
│   │           │   │   │   ├── deque_tie.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── pp_deque_tie.hpp
│   │           │   │   │   │   ├── pp_list_tie.hpp
│   │           │   │   │   │   ├── pp_make_deque.hpp
│   │           │   │   │   │   ├── pp_make_list.hpp
│   │           │   │   │   │   ├── pp_make_map.hpp
│   │           │   │   │   │   ├── pp_make_set.hpp
│   │           │   │   │   │   ├── pp_make_vector.hpp
│   │           │   │   │   │   ├── pp_map_tie.hpp
│   │           │   │   │   │   ├── pp_vector_tie.hpp
│   │           │   │   │   │   └── preprocessed/
│   │           │   │   │   │       ├── deque_tie.hpp
│   │           │   │   │   │       ├── deque_tie10.hpp
│   │           │   │   │   │       ├── deque_tie20.hpp
│   │           │   │   │   │       ├── deque_tie30.hpp
│   │           │   │   │   │       ├── deque_tie40.hpp
│   │           │   │   │   │       ├── deque_tie50.hpp
│   │           │   │   │   │       ├── list_tie.hpp
│   │           │   │   │   │       ├── list_tie10.hpp
│   │           │   │   │   │       ├── list_tie20.hpp
│   │           │   │   │   │       ├── list_tie30.hpp
│   │           │   │   │   │       ├── list_tie40.hpp
│   │           │   │   │   │       ├── list_tie50.hpp
│   │           │   │   │   │       ├── make_deque.hpp
│   │           │   │   │   │       ├── make_deque10.hpp
│   │           │   │   │   │       ├── make_deque20.hpp
│   │           │   │   │   │       ├── make_deque30.hpp
│   │           │   │   │   │       ├── make_deque40.hpp
│   │           │   │   │   │       ├── make_deque50.hpp
│   │           │   │   │   │       ├── make_list.hpp
│   │           │   │   │   │       ├── make_list10.hpp
│   │           │   │   │   │       ├── make_list20.hpp
│   │           │   │   │   │       ├── make_list30.hpp
│   │           │   │   │   │       ├── make_list40.hpp
│   │           │   │   │   │       ├── make_list50.hpp
│   │           │   │   │   │       ├── make_map.hpp
│   │           │   │   │   │       ├── make_map10.hpp
│   │           │   │   │   │       ├── make_map20.hpp
│   │           │   │   │   │       ├── make_map30.hpp
│   │           │   │   │   │       ├── make_map40.hpp
│   │           │   │   │   │       ├── make_map50.hpp
│   │           │   │   │   │       ├── make_set.hpp
│   │           │   │   │   │       ├── make_set10.hpp
│   │           │   │   │   │       ├── make_set20.hpp
│   │           │   │   │   │       ├── make_set30.hpp
│   │           │   │   │   │       ├── make_set40.hpp
│   │           │   │   │   │       ├── make_set50.hpp
│   │           │   │   │   │       ├── make_vector.hpp
│   │           │   │   │   │       ├── make_vector10.hpp
│   │           │   │   │   │       ├── make_vector20.hpp
│   │           │   │   │   │       ├── make_vector30.hpp
│   │           │   │   │   │       ├── make_vector40.hpp
│   │           │   │   │   │       ├── make_vector50.hpp
│   │           │   │   │   │       ├── map_tie.hpp
│   │           │   │   │   │       ├── map_tie10.hpp
│   │           │   │   │   │       ├── map_tie20.hpp
│   │           │   │   │   │       ├── map_tie30.hpp
│   │           │   │   │   │       ├── map_tie40.hpp
│   │           │   │   │   │       ├── map_tie50.hpp
│   │           │   │   │   │       ├── vector_tie.hpp
│   │           │   │   │   │       ├── vector_tie10.hpp
│   │           │   │   │   │       ├── vector_tie20.hpp
│   │           │   │   │   │       ├── vector_tie30.hpp
│   │           │   │   │   │       ├── vector_tie40.hpp
│   │           │   │   │   │       └── vector_tie50.hpp
│   │           │   │   │   ├── ignore.hpp
│   │           │   │   │   ├── list_tie.hpp
│   │           │   │   │   ├── make_cons.hpp
│   │           │   │   │   ├── make_deque.hpp
│   │           │   │   │   ├── make_list.hpp
│   │           │   │   │   ├── make_map.hpp
│   │           │   │   │   ├── make_set.hpp
│   │           │   │   │   ├── make_vector.hpp
│   │           │   │   │   ├── map_tie.hpp
│   │           │   │   │   ├── pair_tie.hpp
│   │           │   │   │   └── vector_tie.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── list/
│   │           │   │   │   ├── cons.hpp
│   │           │   │   │   ├── cons_fwd.hpp
│   │           │   │   │   ├── cons_iterator.hpp
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_cons.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── list.hpp
│   │           │   │   │   │   │   ├── list_forward_ctor.hpp
│   │           │   │   │   │   │   ├── list_fwd.hpp
│   │           │   │   │   │   │   ├── list_to_cons.hpp
│   │           │   │   │   │   │   ├── list_to_cons_call.hpp
│   │           │   │   │   │   │   └── preprocessed/
│   │           │   │   │   │   │       ├── list.hpp
│   │           │   │   │   │   │       ├── list10.hpp
│   │           │   │   │   │   │       ├── list10_fwd.hpp
│   │           │   │   │   │   │       ├── list20.hpp
│   │           │   │   │   │   │       ├── list20_fwd.hpp
│   │           │   │   │   │   │       ├── list30.hpp
│   │           │   │   │   │   │       ├── list30_fwd.hpp
│   │           │   │   │   │   │       ├── list40.hpp
│   │           │   │   │   │   │       ├── list40_fwd.hpp
│   │           │   │   │   │   │       ├── list50.hpp
│   │           │   │   │   │   │       ├── list50_fwd.hpp
│   │           │   │   │   │   │       ├── list_fwd.hpp
│   │           │   │   │   │   │       ├── list_to_cons.hpp
│   │           │   │   │   │   │       ├── list_to_cons10.hpp
│   │           │   │   │   │   │       ├── list_to_cons20.hpp
│   │           │   │   │   │   │       ├── list_to_cons30.hpp
│   │           │   │   │   │   │       ├── list_to_cons40.hpp
│   │           │   │   │   │   │       └── list_to_cons50.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── empty_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── list_to_cons.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── reverse_cons.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── list.hpp
│   │           │   │   │   ├── list_fwd.hpp
│   │           │   │   │   └── nil.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── at_key_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_map.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_map.hpp
│   │           │   │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   │   ├── convert.hpp
│   │           │   │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── map.hpp
│   │           │   │   │   │   │   ├── map_forward_ctor.hpp
│   │           │   │   │   │   │   ├── map_fwd.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_map.hpp
│   │           │   │   │   │   │   │   ├── as_map10.hpp
│   │           │   │   │   │   │   │   ├── as_map20.hpp
│   │           │   │   │   │   │   │   ├── as_map30.hpp
│   │           │   │   │   │   │   │   ├── as_map40.hpp
│   │           │   │   │   │   │   │   ├── as_map50.hpp
│   │           │   │   │   │   │   │   ├── map.hpp
│   │           │   │   │   │   │   │   ├── map10.hpp
│   │           │   │   │   │   │   │   ├── map10_fwd.hpp
│   │           │   │   │   │   │   │   ├── map20.hpp
│   │           │   │   │   │   │   │   ├── map20_fwd.hpp
│   │           │   │   │   │   │   │   ├── map30.hpp
│   │           │   │   │   │   │   │   ├── map30_fwd.hpp
│   │           │   │   │   │   │   │   ├── map40.hpp
│   │           │   │   │   │   │   │   ├── map40_fwd.hpp
│   │           │   │   │   │   │   │   ├── map50.hpp
│   │           │   │   │   │   │   │   ├── map50_fwd.hpp
│   │           │   │   │   │   │   │   └── map_fwd.hpp
│   │           │   │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── map_impl.hpp
│   │           │   │   │   │   ├── map_index.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_at_key_impl.hpp
│   │           │   │   │   ├── map.hpp
│   │           │   │   │   ├── map_fwd.hpp
│   │           │   │   │   └── map_iterator.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── set/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   │   │   ├── as_set10.hpp
│   │           │   │   │   │   │   │   ├── as_set20.hpp
│   │           │   │   │   │   │   │   ├── as_set30.hpp
│   │           │   │   │   │   │   │   ├── as_set40.hpp
│   │           │   │   │   │   │   │   ├── as_set50.hpp
│   │           │   │   │   │   │   │   ├── set.hpp
│   │           │   │   │   │   │   │   ├── set10.hpp
│   │           │   │   │   │   │   │   ├── set10_fwd.hpp
│   │           │   │   │   │   │   │   ├── set20.hpp
│   │           │   │   │   │   │   │   ├── set20_fwd.hpp
│   │           │   │   │   │   │   │   ├── set30.hpp
│   │           │   │   │   │   │   │   ├── set30_fwd.hpp
│   │           │   │   │   │   │   │   ├── set40.hpp
│   │           │   │   │   │   │   │   ├── set40_fwd.hpp
│   │           │   │   │   │   │   │   ├── set50.hpp
│   │           │   │   │   │   │   │   ├── set50_fwd.hpp
│   │           │   │   │   │   │   │   └── set_fwd.hpp
│   │           │   │   │   │   │   ├── set.hpp
│   │           │   │   │   │   │   ├── set_forward_ctor.hpp
│   │           │   │   │   │   │   └── set_fwd.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── set.hpp
│   │           │   │   │   └── set_fwd.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── vector/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── config.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   │   │   ├── as_vector10.hpp
│   │           │   │   │   │   │   │   ├── as_vector20.hpp
│   │           │   │   │   │   │   │   ├── as_vector30.hpp
│   │           │   │   │   │   │   │   ├── as_vector40.hpp
│   │           │   │   │   │   │   │   ├── as_vector50.hpp
│   │           │   │   │   │   │   │   ├── vector.hpp
│   │           │   │   │   │   │   │   ├── vector10.hpp
│   │           │   │   │   │   │   │   ├── vector10_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector20.hpp
│   │           │   │   │   │   │   │   ├── vector20_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector30.hpp
│   │           │   │   │   │   │   │   ├── vector30_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector40.hpp
│   │           │   │   │   │   │   │   ├── vector40_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector50.hpp
│   │           │   │   │   │   │   │   ├── vector50_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser10.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser20.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser30.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser40.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser50.hpp
│   │           │   │   │   │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector10.hpp
│   │           │   │   │   │   │   │   ├── vvector10_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector20.hpp
│   │           │   │   │   │   │   │   ├── vvector20_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector30.hpp
│   │           │   │   │   │   │   │   ├── vvector30_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector40.hpp
│   │           │   │   │   │   │   │   ├── vvector40_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector50.hpp
│   │           │   │   │   │   │   │   └── vvector50_fwd.hpp
│   │           │   │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   │   ├── vector.hpp
│   │           │   │   │   │   │   ├── vector10.hpp
│   │           │   │   │   │   │   ├── vector10_fwd.hpp
│   │           │   │   │   │   │   ├── vector20.hpp
│   │           │   │   │   │   │   ├── vector20_fwd.hpp
│   │           │   │   │   │   │   ├── vector30.hpp
│   │           │   │   │   │   │   ├── vector30_fwd.hpp
│   │           │   │   │   │   │   ├── vector40.hpp
│   │           │   │   │   │   │   ├── vector40_fwd.hpp
│   │           │   │   │   │   │   ├── vector50.hpp
│   │           │   │   │   │   │   ├── vector50_fwd.hpp
│   │           │   │   │   │   │   ├── vector_forward_ctor.hpp
│   │           │   │   │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   │   │   ├── vector_n.hpp
│   │           │   │   │   │   │   └── vector_n_chooser.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── vector.hpp
│   │           │   │   │   ├── vector10.hpp
│   │           │   │   │   ├── vector20.hpp
│   │           │   │   │   ├── vector30.hpp
│   │           │   │   │   ├── vector40.hpp
│   │           │   │   │   ├── vector50.hpp
│   │           │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   └── vector_iterator.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── container.hpp
│   │           │   ├── functional/
│   │           │   │   ├── adapter/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── access.hpp
│   │           │   │   │   ├── fused.hpp
│   │           │   │   │   ├── fused_function_object.hpp
│   │           │   │   │   ├── fused_procedure.hpp
│   │           │   │   │   ├── limits.hpp
│   │           │   │   │   ├── unfused.hpp
│   │           │   │   │   └── unfused_typed.hpp
│   │           │   │   ├── adapter.hpp
│   │           │   │   ├── generation/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── gen_make_adapter.hpp
│   │           │   │   │   ├── make_fused.hpp
│   │           │   │   │   ├── make_fused_function_object.hpp
│   │           │   │   │   ├── make_fused_procedure.hpp
│   │           │   │   │   └── make_unfused.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── invocation/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── that_ptr.hpp
│   │           │   │   │   ├── invoke.hpp
│   │           │   │   │   ├── invoke_function_object.hpp
│   │           │   │   │   ├── invoke_procedure.hpp
│   │           │   │   │   └── limits.hpp
│   │           │   │   └── invocation.hpp
│   │           │   ├── functional.hpp
│   │           │   ├── include/
│   │           │   │   ├── accumulate.hpp
│   │           │   │   ├── adapt_adt.hpp
│   │           │   │   ├── adapt_adt_named.hpp
│   │           │   │   ├── adapt_assoc_adt.hpp
│   │           │   │   ├── adapt_assoc_adt_named.hpp
│   │           │   │   ├── adapt_assoc_struct.hpp
│   │           │   │   ├── adapt_assoc_struct_named.hpp
│   │           │   │   ├── adapt_struct.hpp
│   │           │   │   ├── adapt_struct_named.hpp
│   │           │   │   ├── adapted.hpp
│   │           │   │   ├── adapter.hpp
│   │           │   │   ├── advance.hpp
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── all.hpp
│   │           │   │   ├── any.hpp
│   │           │   │   ├── array.hpp
│   │           │   │   ├── as_deque.hpp
│   │           │   │   ├── as_list.hpp
│   │           │   │   ├── as_map.hpp
│   │           │   │   ├── as_set.hpp
│   │           │   │   ├── as_vector.hpp
│   │           │   │   ├── at.hpp
│   │           │   │   ├── at_c.hpp
│   │           │   │   ├── at_key.hpp
│   │           │   │   ├── auxiliary.hpp
│   │           │   │   ├── back.hpp
│   │           │   │   ├── begin.hpp
│   │           │   │   ├── boost_array.hpp
│   │           │   │   ├── boost_tuple.hpp
│   │           │   │   ├── category_of.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── comparison.hpp
│   │           │   │   ├── cons.hpp
│   │           │   │   ├── cons_tie.hpp
│   │           │   │   ├── container.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── copy.hpp
│   │           │   │   ├── count.hpp
│   │           │   │   ├── count_if.hpp
│   │           │   │   ├── deduce.hpp
│   │           │   │   ├── deduce_sequence.hpp
│   │           │   │   ├── define_assoc_struct.hpp
│   │           │   │   ├── define_struct.hpp
│   │           │   │   ├── define_struct_inline.hpp
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── deque_fwd.hpp
│   │           │   │   ├── deque_tie.hpp
│   │           │   │   ├── deref.hpp
│   │           │   │   ├── deref_data.hpp
│   │           │   │   ├── distance.hpp
│   │           │   │   ├── empty.hpp
│   │           │   │   ├── end.hpp
│   │           │   │   ├── equal_to.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── erase_key.hpp
│   │           │   │   ├── filter.hpp
│   │           │   │   ├── filter_if.hpp
│   │           │   │   ├── filter_view.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_if.hpp
│   │           │   │   ├── flatten.hpp
│   │           │   │   ├── flatten_view.hpp
│   │           │   │   ├── fold.hpp
│   │           │   │   ├── for_each.hpp
│   │           │   │   ├── front.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── fused.hpp
│   │           │   │   ├── fused_function_object.hpp
│   │           │   │   ├── fused_procedure.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── greater.hpp
│   │           │   │   ├── greater_equal.hpp
│   │           │   │   ├── has_key.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── ignore.hpp
│   │           │   │   ├── in.hpp
│   │           │   │   ├── insert.hpp
│   │           │   │   ├── insert_range.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── invocation.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── invoke_function_object.hpp
│   │           │   │   ├── invoke_procedure.hpp
│   │           │   │   ├── io.hpp
│   │           │   │   ├── is_iterator.hpp
│   │           │   │   ├── is_segmented.hpp
│   │           │   │   ├── is_sequence.hpp
│   │           │   │   ├── is_view.hpp
│   │           │   │   ├── iter_fold.hpp
│   │           │   │   ├── iteration.hpp
│   │           │   │   ├── iterator.hpp
│   │           │   │   ├── iterator_adapter.hpp
│   │           │   │   ├── iterator_base.hpp
│   │           │   │   ├── iterator_facade.hpp
│   │           │   │   ├── iterator_range.hpp
│   │           │   │   ├── join.hpp
│   │           │   │   ├── joint_view.hpp
│   │           │   │   ├── key_of.hpp
│   │           │   │   ├── less.hpp
│   │           │   │   ├── less_equal.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── list_fwd.hpp
│   │           │   │   ├── list_tie.hpp
│   │           │   │   ├── make_cons.hpp
│   │           │   │   ├── make_deque.hpp
│   │           │   │   ├── make_fused.hpp
│   │           │   │   ├── make_fused_function_object.hpp
│   │           │   │   ├── make_fused_procedure.hpp
│   │           │   │   ├── make_list.hpp
│   │           │   │   ├── make_map.hpp
│   │           │   │   ├── make_set.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── make_unfused.hpp
│   │           │   │   ├── make_vector.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── map_fwd.hpp
│   │           │   │   ├── map_tie.hpp
│   │           │   │   ├── move.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── next.hpp
│   │           │   │   ├── nil.hpp
│   │           │   │   ├── none.hpp
│   │           │   │   ├── not_equal_to.hpp
│   │           │   │   ├── nview.hpp
│   │           │   │   ├── out.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── pair_tie.hpp
│   │           │   │   ├── pop_back.hpp
│   │           │   │   ├── pop_front.hpp
│   │           │   │   ├── prior.hpp
│   │           │   │   ├── proxy_type.hpp
│   │           │   │   ├── push_back.hpp
│   │           │   │   ├── push_front.hpp
│   │           │   │   ├── query.hpp
│   │           │   │   ├── remove.hpp
│   │           │   │   ├── remove_if.hpp
│   │           │   │   ├── repetitive_view.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── replace_if.hpp
│   │           │   │   ├── reverse.hpp
│   │           │   │   ├── reverse_fold.hpp
│   │           │   │   ├── reverse_iter_fold.hpp
│   │           │   │   ├── reverse_view.hpp
│   │           │   │   ├── segmented_fold_until.hpp
│   │           │   │   ├── segmented_iterator.hpp
│   │           │   │   ├── segments.hpp
│   │           │   │   ├── sequence.hpp
│   │           │   │   ├── sequence_base.hpp
│   │           │   │   ├── sequence_facade.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── set_fwd.hpp
│   │           │   │   ├── single_view.hpp
│   │           │   │   ├── size.hpp
│   │           │   │   ├── std_array.hpp
│   │           │   │   ├── std_pair.hpp
│   │           │   │   ├── std_tuple.hpp
│   │           │   │   ├── struct.hpp
│   │           │   │   ├── support.hpp
│   │           │   │   ├── swap.hpp
│   │           │   │   ├── tag_of.hpp
│   │           │   │   ├── tag_of_fwd.hpp
│   │           │   │   ├── transform.hpp
│   │           │   │   ├── transform_view.hpp
│   │           │   │   ├── transformation.hpp
│   │           │   │   ├── tuple.hpp
│   │           │   │   ├── tuple_fwd.hpp
│   │           │   │   ├── tuple_tie.hpp
│   │           │   │   ├── unfused.hpp
│   │           │   │   ├── unfused_typed.hpp
│   │           │   │   ├── unused.hpp
│   │           │   │   ├── value_at.hpp
│   │           │   │   ├── value_at_key.hpp
│   │           │   │   ├── value_of.hpp
│   │           │   │   ├── value_of_data.hpp
│   │           │   │   ├── vector.hpp
│   │           │   │   ├── vector10.hpp
│   │           │   │   ├── vector20.hpp
│   │           │   │   ├── vector30.hpp
│   │           │   │   ├── vector40.hpp
│   │           │   │   ├── vector50.hpp
│   │           │   │   ├── vector_fwd.hpp
│   │           │   │   ├── vector_tie.hpp
│   │           │   │   ├── view.hpp
│   │           │   │   ├── void.hpp
│   │           │   │   ├── zip.hpp
│   │           │   │   └── zip_view.hpp
│   │           │   ├── iterator/
│   │           │   │   ├── advance.hpp
│   │           │   │   ├── basic_iterator.hpp
│   │           │   │   ├── deref.hpp
│   │           │   │   ├── deref_data.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── adapt_deref_traits.hpp
│   │           │   │   │   ├── adapt_value_traits.hpp
│   │           │   │   │   ├── advance.hpp
│   │           │   │   │   ├── distance.hpp
│   │           │   │   │   ├── segment_sequence.hpp
│   │           │   │   │   ├── segmented_equal_to.hpp
│   │           │   │   │   ├── segmented_iterator.hpp
│   │           │   │   │   └── segmented_next_impl.hpp
│   │           │   │   ├── distance.hpp
│   │           │   │   ├── equal_to.hpp
│   │           │   │   ├── iterator_adapter.hpp
│   │           │   │   ├── iterator_facade.hpp
│   │           │   │   ├── key_of.hpp
│   │           │   │   ├── mpl/
│   │           │   │   │   ├── convert_iterator.hpp
│   │           │   │   │   └── fusion_iterator.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── next.hpp
│   │           │   │   ├── prior.hpp
│   │           │   │   ├── segmented_iterator.hpp
│   │           │   │   ├── value_of.hpp
│   │           │   │   └── value_of_data.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── mpl/
│   │           │   │   ├── at.hpp
│   │           │   │   ├── back.hpp
│   │           │   │   ├── begin.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── clear.hpp
│   │           │   │   ├── empty.hpp
│   │           │   │   ├── end.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── erase_key.hpp
│   │           │   │   ├── front.hpp
│   │           │   │   ├── has_key.hpp
│   │           │   │   ├── insert.hpp
│   │           │   │   ├── insert_range.hpp
│   │           │   │   ├── pop_back.hpp
│   │           │   │   ├── pop_front.hpp
│   │           │   │   ├── push_back.hpp
│   │           │   │   ├── push_front.hpp
│   │           │   │   └── size.hpp
│   │           │   ├── mpl.hpp
│   │           │   ├── sequence/
│   │           │   │   ├── comparison/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── equal_to.hpp
│   │           │   │   │   │   ├── greater.hpp
│   │           │   │   │   │   ├── greater_equal.hpp
│   │           │   │   │   │   ├── less.hpp
│   │           │   │   │   │   ├── less_equal.hpp
│   │           │   │   │   │   └── not_equal_to.hpp
│   │           │   │   │   ├── enable_comparison.hpp
│   │           │   │   │   ├── equal_to.hpp
│   │           │   │   │   ├── greater.hpp
│   │           │   │   │   ├── greater_equal.hpp
│   │           │   │   │   ├── less.hpp
│   │           │   │   │   ├── less_equal.hpp
│   │           │   │   │   └── not_equal_to.hpp
│   │           │   │   ├── comparison.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── intrinsic/
│   │           │   │   │   ├── at.hpp
│   │           │   │   │   ├── at_c.hpp
│   │           │   │   │   ├── at_key.hpp
│   │           │   │   │   ├── back.hpp
│   │           │   │   │   ├── begin.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── segmented_begin.hpp
│   │           │   │   │   │   ├── segmented_begin_impl.hpp
│   │           │   │   │   │   ├── segmented_end.hpp
│   │           │   │   │   │   ├── segmented_end_impl.hpp
│   │           │   │   │   │   └── segmented_size.hpp
│   │           │   │   │   ├── empty.hpp
│   │           │   │   │   ├── end.hpp
│   │           │   │   │   ├── front.hpp
│   │           │   │   │   ├── has_key.hpp
│   │           │   │   │   ├── segments.hpp
│   │           │   │   │   ├── size.hpp
│   │           │   │   │   ├── swap.hpp
│   │           │   │   │   ├── value_at.hpp
│   │           │   │   │   └── value_at_key.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── intrinsic_fwd.hpp
│   │           │   │   ├── io/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── in.hpp
│   │           │   │   │   │   ├── manip.hpp
│   │           │   │   │   │   └── out.hpp
│   │           │   │   │   ├── in.hpp
│   │           │   │   │   └── out.hpp
│   │           │   │   ├── io.hpp
│   │           │   │   └── sequence_facade.hpp
│   │           │   ├── sequence.hpp
│   │           │   ├── support/
│   │           │   │   ├── as_const.hpp
│   │           │   │   ├── category_of.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── deduce.hpp
│   │           │   │   ├── deduce_sequence.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── access.hpp
│   │           │   │   │   ├── and.hpp
│   │           │   │   │   ├── as_fusion_element.hpp
│   │           │   │   │   ├── enabler.hpp
│   │           │   │   │   ├── index_sequence.hpp
│   │           │   │   │   ├── is_mpl_sequence.hpp
│   │           │   │   │   ├── is_native_fusion_sequence.hpp
│   │           │   │   │   ├── is_same_size.hpp
│   │           │   │   │   ├── mpl_iterator_category.hpp
│   │           │   │   │   ├── pp_round.hpp
│   │           │   │   │   └── segmented_fold_until_impl.hpp
│   │           │   │   ├── is_iterator.hpp
│   │           │   │   ├── is_segmented.hpp
│   │           │   │   ├── is_sequence.hpp
│   │           │   │   ├── is_view.hpp
│   │           │   │   ├── iterator_base.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── segmented_fold_until.hpp
│   │           │   │   ├── sequence_base.hpp
│   │           │   │   ├── tag_of.hpp
│   │           │   │   ├── tag_of_fwd.hpp
│   │           │   │   ├── unused.hpp
│   │           │   │   └── void.hpp
│   │           │   ├── support.hpp
│   │           │   ├── tuple/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── make_tuple.hpp
│   │           │   │   │   ├── preprocessed/
│   │           │   │   │   │   ├── make_tuple.hpp
│   │           │   │   │   │   ├── make_tuple10.hpp
│   │           │   │   │   │   ├── make_tuple20.hpp
│   │           │   │   │   │   ├── make_tuple30.hpp
│   │           │   │   │   │   ├── make_tuple40.hpp
│   │           │   │   │   │   ├── make_tuple50.hpp
│   │           │   │   │   │   ├── tuple.hpp
│   │           │   │   │   │   ├── tuple10.hpp
│   │           │   │   │   │   ├── tuple10_fwd.hpp
│   │           │   │   │   │   ├── tuple20.hpp
│   │           │   │   │   │   ├── tuple20_fwd.hpp
│   │           │   │   │   │   ├── tuple30.hpp
│   │           │   │   │   │   ├── tuple30_fwd.hpp
│   │           │   │   │   │   ├── tuple40.hpp
│   │           │   │   │   │   ├── tuple40_fwd.hpp
│   │           │   │   │   │   ├── tuple50.hpp
│   │           │   │   │   │   ├── tuple50_fwd.hpp
│   │           │   │   │   │   ├── tuple_fwd.hpp
│   │           │   │   │   │   ├── tuple_tie.hpp
│   │           │   │   │   │   ├── tuple_tie10.hpp
│   │           │   │   │   │   ├── tuple_tie20.hpp
│   │           │   │   │   │   ├── tuple_tie30.hpp
│   │           │   │   │   │   ├── tuple_tie40.hpp
│   │           │   │   │   │   └── tuple_tie50.hpp
│   │           │   │   │   ├── tuple.hpp
│   │           │   │   │   ├── tuple_expand.hpp
│   │           │   │   │   ├── tuple_fwd.hpp
│   │           │   │   │   └── tuple_tie.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── tuple.hpp
│   │           │   │   ├── tuple_fwd.hpp
│   │           │   │   └── tuple_tie.hpp
│   │           │   ├── tuple.hpp
│   │           │   ├── view/
│   │           │   │   ├── detail/
│   │           │   │   │   └── strictest_traversal.hpp
│   │           │   │   ├── filter_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── filter_view.hpp
│   │           │   │   │   └── filter_view_iterator.hpp
│   │           │   │   ├── filter_view.hpp
│   │           │   │   ├── flatten_view/
│   │           │   │   │   ├── flatten_view.hpp
│   │           │   │   │   └── flatten_view_iterator.hpp
│   │           │   │   ├── flatten_view.hpp
│   │           │   │   ├── iterator_range/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_segmented_impl.hpp
│   │           │   │   │   │   ├── segmented_iterator_range.hpp
│   │           │   │   │   │   ├── segments_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── iterator_range.hpp
│   │           │   │   ├── iterator_range.hpp
│   │           │   │   ├── joint_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── joint_view.hpp
│   │           │   │   │   ├── joint_view_fwd.hpp
│   │           │   │   │   └── joint_view_iterator.hpp
│   │           │   │   ├── joint_view.hpp
│   │           │   │   ├── nview/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   └── nview_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── nview_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── nview.hpp
│   │           │   │   │   └── nview_iterator.hpp
│   │           │   │   ├── nview.hpp
│   │           │   │   ├── repetitive_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── repetitive_view.hpp
│   │           │   │   │   ├── repetitive_view_fwd.hpp
│   │           │   │   │   └── repetitive_view_iterator.hpp
│   │           │   │   ├── repetitive_view.hpp
│   │           │   │   ├── reverse_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── reverse_view.hpp
│   │           │   │   │   └── reverse_view_iterator.hpp
│   │           │   │   ├── reverse_view.hpp
│   │           │   │   ├── single_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── single_view.hpp
│   │           │   │   │   └── single_view_iterator.hpp
│   │           │   │   ├── single_view.hpp
│   │           │   │   ├── transform_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── transform_view.hpp
│   │           │   │   │   ├── transform_view_fwd.hpp
│   │           │   │   │   └── transform_view_iterator.hpp
│   │           │   │   ├── transform_view.hpp
│   │           │   │   ├── zip_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── zip_view.hpp
│   │           │   │   │   ├── zip_view_iterator.hpp
│   │           │   │   │   └── zip_view_iterator_fwd.hpp
│   │           │   │   └── zip_view.hpp
│   │           │   └── view.hpp
│   │           ├── generator_iterator.hpp
│   │           ├── geometry/
│   │           │   ├── algorithms/
│   │           │   │   ├── append.hpp
│   │           │   │   ├── area.hpp
│   │           │   │   ├── assign.hpp
│   │           │   │   ├── buffer.hpp
│   │           │   │   ├── centroid.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── comparable_distance.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── convex_hull.hpp
│   │           │   │   ├── correct.hpp
│   │           │   │   ├── correct_closure.hpp
│   │           │   │   ├── covered_by.hpp
│   │           │   │   ├── crosses.hpp
│   │           │   │   ├── densify.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── as_range.hpp
│   │           │   │   │   ├── assign_box_corners.hpp
│   │           │   │   │   ├── assign_indexed_point.hpp
│   │           │   │   │   ├── assign_values.hpp
│   │           │   │   │   ├── azimuth.hpp
│   │           │   │   │   ├── buffer/
│   │           │   │   │   │   ├── buffer_box.hpp
│   │           │   │   │   │   ├── buffer_inserter.hpp
│   │           │   │   │   │   ├── buffer_policies.hpp
│   │           │   │   │   │   ├── buffered_piece_collection.hpp
│   │           │   │   │   │   ├── buffered_ring.hpp
│   │           │   │   │   │   ├── get_piece_turns.hpp
│   │           │   │   │   │   ├── line_line_intersection.hpp
│   │           │   │   │   │   ├── piece_border.hpp
│   │           │   │   │   │   ├── turn_in_original_visitor.hpp
│   │           │   │   │   │   └── turn_in_piece_visitor.hpp
│   │           │   │   │   ├── calculate_null.hpp
│   │           │   │   │   ├── calculate_point_order.hpp
│   │           │   │   │   ├── calculate_sum.hpp
│   │           │   │   │   ├── centroid/
│   │           │   │   │   │   └── translating_transformer.hpp
│   │           │   │   │   ├── check_iterator_range.hpp
│   │           │   │   │   ├── closest_feature/
│   │           │   │   │   │   ├── geometry_to_range.hpp
│   │           │   │   │   │   ├── point_to_range.hpp
│   │           │   │   │   │   └── range_to_range.hpp
│   │           │   │   │   ├── comparable_distance/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── convert_indexed_to_indexed.hpp
│   │           │   │   │   ├── convert_point_to_point.hpp
│   │           │   │   │   ├── counting.hpp
│   │           │   │   │   ├── course.hpp
│   │           │   │   │   ├── covered_by/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── direction_code.hpp
│   │           │   │   │   ├── disjoint/
│   │           │   │   │   │   ├── areal_areal.hpp
│   │           │   │   │   │   ├── box_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── linear_areal.hpp
│   │           │   │   │   │   ├── linear_linear.hpp
│   │           │   │   │   │   ├── linear_segment_or_box.hpp
│   │           │   │   │   │   ├── multipoint_geometry.hpp
│   │           │   │   │   │   ├── multirange_geometry.hpp
│   │           │   │   │   │   ├── point_box.hpp
│   │           │   │   │   │   ├── point_geometry.hpp
│   │           │   │   │   │   ├── point_point.hpp
│   │           │   │   │   │   └── segment_box.hpp
│   │           │   │   │   ├── distance/
│   │           │   │   │   │   ├── backward_compatibility.hpp
│   │           │   │   │   │   ├── box_to_box.hpp
│   │           │   │   │   │   ├── default_strategies.hpp
│   │           │   │   │   │   ├── geometry_to_segment_or_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── is_comparable.hpp
│   │           │   │   │   │   ├── iterator_selector.hpp
│   │           │   │   │   │   ├── linear_or_areal_to_areal.hpp
│   │           │   │   │   │   ├── linear_to_box.hpp
│   │           │   │   │   │   ├── linear_to_linear.hpp
│   │           │   │   │   │   ├── multipoint_to_geometry.hpp
│   │           │   │   │   │   ├── point_to_geometry.hpp
│   │           │   │   │   │   ├── range_to_geometry_rtree.hpp
│   │           │   │   │   │   ├── segment_to_box.hpp
│   │           │   │   │   │   └── segment_to_segment.hpp
│   │           │   │   │   ├── envelope/
│   │           │   │   │   │   ├── areal.hpp
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── initialize.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── intersects_antimeridian.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   ├── multipoint.hpp
│   │           │   │   │   │   ├── point.hpp
│   │           │   │   │   │   ├── range.hpp
│   │           │   │   │   │   ├── range_of_boxes.hpp
│   │           │   │   │   │   ├── segment.hpp
│   │           │   │   │   │   └── transform_units.hpp
│   │           │   │   │   ├── equals/
│   │           │   │   │   │   ├── collect_vectors.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   └── point_point.hpp
│   │           │   │   │   ├── expand/
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── indexed.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── point.hpp
│   │           │   │   │   │   └── segment.hpp
│   │           │   │   │   ├── expand_by_epsilon.hpp
│   │           │   │   │   ├── extreme_points.hpp
│   │           │   │   │   ├── for_each_range.hpp
│   │           │   │   │   ├── get_max_size.hpp
│   │           │   │   │   ├── has_self_intersections.hpp
│   │           │   │   │   ├── interior_iterator.hpp
│   │           │   │   │   ├── intersection/
│   │           │   │   │   │   ├── areal_areal.hpp
│   │           │   │   │   │   ├── box_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   └── multi.hpp
│   │           │   │   │   ├── intersects/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── is_simple/
│   │           │   │   │   │   ├── always_simple.hpp
│   │           │   │   │   │   ├── areal.hpp
│   │           │   │   │   │   ├── debug_print_boundary_points.hpp
│   │           │   │   │   │   ├── failure_policy.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   └── multipoint.hpp
│   │           │   │   │   ├── is_valid/
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── complement_graph.hpp
│   │           │   │   │   │   ├── debug_complement_graph.hpp
│   │           │   │   │   │   ├── debug_print_turns.hpp
│   │           │   │   │   │   ├── debug_validity_phase.hpp
│   │           │   │   │   │   ├── has_duplicates.hpp
│   │           │   │   │   │   ├── has_invalid_coordinate.hpp
│   │           │   │   │   │   ├── has_spikes.hpp
│   │           │   │   │   │   ├── has_valid_self_turns.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── is_acceptable_turn.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   ├── multipolygon.hpp
│   │           │   │   │   │   ├── pointlike.hpp
│   │           │   │   │   │   ├── polygon.hpp
│   │           │   │   │   │   ├── ring.hpp
│   │           │   │   │   │   └── segment.hpp
│   │           │   │   │   ├── make/
│   │           │   │   │   │   └── make.hpp
│   │           │   │   │   ├── max_interval_gap.hpp
│   │           │   │   │   ├── multi_modify.hpp
│   │           │   │   │   ├── multi_modify_with_predicate.hpp
│   │           │   │   │   ├── multi_sum.hpp
│   │           │   │   │   ├── normalize.hpp
│   │           │   │   │   ├── not.hpp
│   │           │   │   │   ├── num_distinct_consecutive_points.hpp
│   │           │   │   │   ├── overlaps/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── overlay/
│   │           │   │   │   │   ├── add_rings.hpp
│   │           │   │   │   │   ├── append_no_duplicates.hpp
│   │           │   │   │   │   ├── append_no_dups_or_spikes.hpp
│   │           │   │   │   │   ├── assign_parents.hpp
│   │           │   │   │   │   ├── backtrack_check_si.hpp
│   │           │   │   │   │   ├── check_enrich.hpp
│   │           │   │   │   │   ├── clip_linestring.hpp
│   │           │   │   │   │   ├── cluster_exits.hpp
│   │           │   │   │   │   ├── cluster_info.hpp
│   │           │   │   │   │   ├── convert_ring.hpp
│   │           │   │   │   │   ├── copy_segment_point.hpp
│   │           │   │   │   │   ├── copy_segments.hpp
│   │           │   │   │   │   ├── debug_turn_info.hpp
│   │           │   │   │   │   ├── do_reverse.hpp
│   │           │   │   │   │   ├── enrich_intersection_points.hpp
│   │           │   │   │   │   ├── enrichment_info.hpp
│   │           │   │   │   │   ├── follow.hpp
│   │           │   │   │   │   ├── follow_linear_linear.hpp
│   │           │   │   │   │   ├── get_distance_measure.hpp
│   │           │   │   │   │   ├── get_intersection_points.hpp
│   │           │   │   │   │   ├── get_relative_order.hpp
│   │           │   │   │   │   ├── get_ring.hpp
│   │           │   │   │   │   ├── get_turn_info.hpp
│   │           │   │   │   │   ├── get_turn_info_for_endpoint.hpp
│   │           │   │   │   │   ├── get_turn_info_helpers.hpp
│   │           │   │   │   │   ├── get_turn_info_la.hpp
│   │           │   │   │   │   ├── get_turn_info_ll.hpp
│   │           │   │   │   │   ├── get_turns.hpp
│   │           │   │   │   │   ├── handle_colocations.hpp
│   │           │   │   │   │   ├── handle_self_turns.hpp
│   │           │   │   │   │   ├── inconsistent_turns_exception.hpp
│   │           │   │   │   │   ├── intersection_box

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

================================================
FILE: .gitignore
================================================
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app
lib/boost_1_74_0.tar.gz
build/
deps/boost/boost_1_74_0/
release/
deps/libwebrtc/build/CMakeFiles/CMakeOutput.log
deps/netstring/build/CMakeFiles/CMakeOutput.log
deps/boost/boost_1_74_0.tar.gz
xcode/
vc2019/
.vscode/settings.json
deps/libwebrtc/build/
deps/netstring/build/
deps/openssl/include/openssl/opensslconf.h
deps/openssl/test/rsa_complex
deps/openssl/test/rsa_complex
.DS_Store


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.5)

# Store in CMAKE_DEB_HOST_ARCH var the current build architecture
execute_process(COMMAND
  dpkg-architecture
    -qDEB_HOST_ARCH
  OUTPUT_VARIABLE
    CMAKE_DEB_HOST_ARCH
  OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${CMAKE_DEB_HOST_ARCH} MATCHES "arm64")
	set(CPU_TYPE "arm")
	message(STATUS "CMAKE_DEB_HOST_ARCH:${CMAKE_DEB_HOST_ARCH} CPU_TYPE=${CPU_TYPE}")  

elseif(${CMAKE_DEB_HOST_ARCH} MATCHES "i386")
	set(CPU_TYPE "x86")
	message(STATUS "CMAKE_DEB_HOST_ARCH:${CMAKE_DEB_HOST_ARCH} CPU_TYPE=${CPU_TYPE}") 
	set(CPU_TYPE "x86")
elseif(${CMAKE_DEB_HOST_ARCH} MATCHES "amd64")
	set(CPU_TYPE "x64")
	message(STATUS "CMAKE_DEB_HOST_ARCH:${CMAKE_DEB_HOST_ARCH} CPU_TYPE=${CPU_TYPE}") 	
	
else()
	set(CPU_TYPE "x64")
	message(STATUS "CMAKE_DEB_HOST_ARCH:${CMAKE_DEB_HOST_ARCH} CPU_TYPE=${CPU_TYPE}") 
endif()

IF (WIN32)
	#SET(CMAKE_C_COMPILER "c:/Program Files/LLVM/bin/clang")
	#SET(CMAKE_CXX_COMPILER "c:/Program Files/LLVM/bin/clang++")
ELSEIF (APPLE)

ELSEIF (UNIX)
  #find_package(LLVM REQUIRED CONFIG)
  message(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR})
  message(STATUS "This is SOURCE dir " ${PROJECT_SOURCE_DIR})
  #message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
  #message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
  #include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/llvm.toolchain.cmake)

ENDIF ()
message(STATUS "CMAKE_C_COMPILER:${CMAKE_C_COMPILER}") 
message(STATUS "CMAKE_CXX_COMPILER:${CMAKE_CXX_COMPILER}") 
set(PROJECT_NAME "mediasoup-sfu-cpp")
project(${PROJECT_NAME})

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")

set(PROJECT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/release/include ${CMAKE_CURRENT_SOURCE_DIR}/worker/include)
set(PROJECT_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/release/lib)
set(WORKER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/worker/include)
set(LIB_WEBRTC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/libwebrtc ${CMAKE_CURRENT_SOURCE_DIR}/deps/libwebrtc/libwebrtc ${CMAKE_CURRENT_SOURCE_DIR}/deps/libwebrtc/deps/abseil-cpp)
set(PROJECT_RELEASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/release)
set(MEDIASOUP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/mediasoup ${CMAKE_CURRENT_SOURCE_DIR}/mediasoup/utils)

IF (WIN32)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/boost/include)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/openssl/include)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/libsrtp)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/libuv/include)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/oatpp/src)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/oatpp-openssl/src)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/oatpp-websocket/src)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/libsdptransform)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/netstring)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/usrsctp/usrsctplib)
  set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/deps/json/single_include/nlohmann)
  set(PROJECT_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/win/${CPU_TYPE})
ENDIF ()

IF(NOT WIN32)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ENDIF()
message("\n=========== mediasoup-sfu-cpp Build Configuration ===========\n")
message(STATUS "PROJECT_INCLUDE_DIR : " ${PROJECT_INCLUDE_DIR})
message(STATUS "PROJECT_LIB_DIR : " ${PROJECT_LIB_DIR})

message("")





# add subdirectory
#add_subdirectory(deps/libuv)

# add openssl no need app 
set(WITH_APPS OFF CACHE INTERNAL "")
#add_subdirectory(deps/openssl)
unset(WITH_APPS)


#add_subdirectory(deps/catch)

set(TEST_APPS OFF CACHE INTERNAL "")
set(ENABLE_OPENSSL ON CACHE INTERNAL "")
#add_subdirectory(deps/libsrtp)
unset(TEST_APPS)
unset(ENABLE_OPENSSL)

#add_subdirectory(deps/netstring)

set(sctp_werror OFF CACHE INTERNAL "")
set(sctp_build_programs OFF CACHE INTERNAL "")
set(sctp_build_fuzzer OFF CACHE INTERNAL "")
set(sctp_link_programs_static OFF CACHE INTERNAL "")
#add_subdirectory(deps/usrsctp)
unset(sctp_werror)
unset(sctp_build_programs)
unset(sctp_build_fuzzer)
unset(sctp_link_programs_static)

set(JSON_BuildTests OFF CACHE INTERNAL "")
set(JSON_Install OFF CACHE INTERNAL "")
#add_subdirectory(deps/json)
unset(JSON_BuildTests)
unset(JSON_Install)

IF(WIN32)
#add_subdirectory(deps/getopt)
ENDIF()

#add_subdirectory(deps/libressl)
#add_subdirectory(deps/oatpp)
#add_subdirectory(deps/oatpp-libressl)
#add_subdirectory(deps/oatpp-websocket)
add_subdirectory(deps/libwebrtc)
#add_subdirectory(deps/webservice)
#add_subdirectory(protoo)
add_subdirectory(worker)
add_subdirectory(mediasoup)

add_subdirectory(demo)



================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.cn.md
================================================
## 项目说明:
### 本项目是基于mediasoup v3 版本 webrtc m77版本 的sfu的js版本修改成的c++版本.
### 支持和js版本一样的完整demo功能,但是本项目是直接把worker进程代码集成 到了demo可以直接代码级别的调用;
### 支持VC2019,xcode,CLion的开发环境,可以直接断点调试workder代码;
### 本项目支持所有跨平台系统 WIN,Linux,Mac,嵌入式arm等系统,国产麒麟系统,支持嵌入式系统编译;
### 编译脚本支持跨平台编译,支持 WIN,Linux,Mac,嵌入式arm等系统,国产麒麟系统

## 一、用vc2019编译,更新到最新版本
### win下使用vc2019自带安装的编译器 LLVM-clang-cl编译
### 直接执行如下命令生成vc2019工程文件

```
.\genvs2019.bat
```

### 注意:所有工程右键选择属性,选择编译器为vc2019自带安装的编译器 LLVM-clang-cl 编译器进行编译

生成工程文件即可打开工程编译  
然后拷贝  lib\win\x64\libssl-1_1-x64.dll  
        lib\win\x64\libcrypto-1_1-x64.dll  
到执行文件所在Debug目录下即可


## 二、MAC下xcode编译

### 1、建立依赖库

```
./builddeps.sh 
```
生成的执行文件生成在 
release/bin 目录下

### 2、生成用xcode开发环境编译调试
```
./genxcode.sh
```

## 三、Linux下编译 gcc >= 8.4.0
```
./builddeps.sh 
./build.sh
```


## 四、设置配置文件

### 配置文件拷贝的编译的执行文件所在目录
### 配置文件在源码根目录下 demo/config.json 拷贝到 xcode/debug 目录下和执行文件同一个目录
### vc2019 需要拷贝到对应的Debug目录下,和执行文件同一个目录
### 详细配置可以参考mediasoup官方demo的配置
### 配置文件里面的ip地址需要配置对应服务器的内网地址和外网地址
"ip"          : "192.168.1.192",//内网网卡地址  
"announcedIp" : "192.168.1.192"//公网地址


## 五、测试客户端输入地址
目前客户端代码还没整理好暂未开源后续会陆续开源
测试客户端下载地址


[测试WIN客户端下载地址地址](http://121.36.0.230:8012/latest/sft-demo-client-1.0.1.win.zip)


Mac download address:

[测试MAC客户端下载地址地址](http://121.36.0.230:8012/latest/sft-demo-client-1.0.1.mac.zip)

会议号输入任意数字比如   
会议号:123456  
用户名任意: 测试1  
地址栏修改为:ip地址改成自己的本机地址  
ws://192.168.3.19:8001/  


效果图
![image](https://raw.githubusercontent.com/yanhua133/mediasoup-sfu-cpp/main/demo.jpg)


## 六、交流及技术支持
加微信:jamesyhua,备注:进群,我拉你入微信群
![image](https://github.com/yanhua133/mediasoup-sfu-cpp/blob/main/zuozhe.jpeg?raw=true)

================================================
FILE: README.md
================================================

## [中文说明请点击](https://github.com/yanhua133/mediasoup-sfu-cpp/blob/main/README.cn.md)
## [gitee地址](https://gitee.com/yanhua133/mediasoup-sfu-cpp)
##  Project Description:

###  This project is a C + + version based on the JS version of SFU in mediasoup V3, webrtc M77

###  It supports the same complete demo function as the JS version, but this project directly integrates the worker process code into the demo, which can be called directly at the code level;

###  Support the development environment of vc2019, Xcode and clion, and can directly debug the worker code at breakpoints;

###  The project supports all cross platform systems win, Linux, MAC, embedded arm and other systems, domestic Kirin system and embedded system compilation;

###  The compiled script supports cross platform compilation, win, Linux, MAC, embedded arm and other systems, and domestic Kirin system


##  1、Compile with vc2019 and update to the latest version

###  Under win, compile with the compiler llvm clang CL installed with vc2019

###  Directly execute the following command to generate vc2019 project file


```
.\genvs2019.bat
```
###  Note: right click all projects, select properties, and select the compiler llvm clang CL compiler installed with vc2019 to compile


Generate a project file to open the project compilation

Then copy   

lib\win\x64\libssl-1_1-x64.dll  
lib\win\x64\libcrypto-1_1-x64.dll

Go to the debug directory where the execution file is located



##  2、 Xcode compilation under mac


###  1). Establish dependency Library

```
./builddeps.sh
```
Generated executable

Release /bin directory

###  2). Compile and debug with Xcode development environment

```
./genxcode.sh
```

##  3、 Compiling under Linux gcc >= 8.4.0

```
./builddeps.sh
./build.sh
```


##  4、 Set config

###  Directory where the compiled executable file of the configuration file copy is located

###  The configuration file is in the root directory of the source code, demo / config Copy JSON to the Xcode / debug directory and the same directory as the execution file

###  Vc2019 needs to be copied to the corresponding debug directory, which is the same directory as the execution file

###  For detailed configuration, please refer to the configuration of the official mediasoup demo

###  The IP address in the configuration file needs to be configured with the intranet address and extranet address of the corresponding server

"IP": "192.168.1.192"  
"Announcedip": "192.168.1.192" / / public network address



##  5、 Test client input address

At present, the client code has not been sorted out yet, and it will be open source in the future

Test client download address

Win download address:

[test win client download](http://121.36.0.230:8012/latest/sft-demo-client-1.0.1.win.zip)


Mac download address:

[test mac client download](http://121.36.0.230:8012/latest/sft-demo-client-1.0.1.mac.zip)


Enter any number for the conference number, such as

Conference No.: 123456

User name: Test 1

The address bar is modified as follows: change the IP address to your own local address
ws://192.168. 3.19:8001/

design sketch

![image]( https://raw.githubusercontent.com/yanhua133/mediasoup-sfu-cpp/main/demo.jpg )


##  6、Communication and technical support

Add wechat: James yhua, note: join the group, I'll pull you into the wechat group

![image](https://github.com/yanhua133/mediasoup-sfu-cpp/blob/main/zuozhe.jpeg?raw=true)

## 7、Discord discussion group

<https://discord.gg/f55DnczkEx>

================================================
FILE: build.sh
================================================
cur_dir=$(cd "$(dirname "$0")"; pwd)
parent_dir=$(dirname $(pwd))

if [ -e /etc ]; then
   /bin/rm -rf build
   /bin/rm -rf CMakeCache.txt
   /bin/rm -rf cmake_install.cmake
else
   echo "is window"
   rm  build -recurse
   rm  CMakeCache.txt
   rm  cmake_install.cmake
fi

if [ -e release/ ]; then
  #/bin/rm -rf release/bin/*
  echo "not rm"
fi

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=${cur_dir}/release ..
make
make install

================================================
FILE: builddeps.sh
================================================
cur_dir=$(cd "$(dirname "$0")"; pwd)
parent_dir=$(dirname $(pwd))
cd script
#./buildzlib.sh
#./buildopenssl.sh
#./buildboringssl.sh
#./buildboost.sh
#./buildlibressl.sh
./buildopenssl.sh
./buildoatpp.sh
./buildoatppwebsocket.sh
./buildoatppopenssl.sh
#./buildspdlog.sh
./builduv.sh
./buildjson.sh
./buildnetstring.sh
./buildcatch.sh
./buildsrtp.sh
./buildusrsctp.sh
#./buildboost.sh
./buildabsl.sh
./buildsdp.sh
./buildwebrtc.sh




================================================
FILE: cmake/llvm.toolchain.cmake
================================================
cmake_minimum_required( VERSION 2.6.3 )
set(CMAKE_SYSTEM_NAME Linux )
 
SET (CMAKE_C_COMPILER             "/usr/bin/clang")
SET (CMAKE_C_FLAGS                "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG          "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
 
SET (CMAKE_CXX_COMPILER             "/usr/bin/clang++")
SET (CMAKE_CXX_FLAGS                "-Wall")
SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
 
SET (CMAKE_AR      "/usr/bin/llvm-ar")
SET (CMAKE_LINKER  "/usr/bin/llvm-ld")
SET (CMAKE_NM      "/usr/bin/llvm-nm")
SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
SET (CMAKE_RANLIB  "/usr/bin/llvm-ranlib")

================================================
FILE: demo/AppComponent.hpp
================================================
/***************************************************************************
 *
 * Project:   ______                ______ _
 *           / _____)              / _____) |          _
 *          | /      ____ ____ ___| /     | | _   ____| |_
 *          | |     / _  |  _ (___) |     | || \ / _  |  _)
 *          | \____( ( | | | | |  | \_____| | | ( ( | | |__
 *           \______)_||_|_| |_|   \______)_| |_|\_||_|\___)
 *
 *
 * Copyright 2020-present, Leonid Stryzhevskyi <lganzzzo@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************************/

#ifndef AppComponent_hpp
#define AppComponent_hpp

#include "./Server.hpp"
#include "./dto/ConfigDto.hpp"
#include "./utils/Statistics.hpp"

#include "oatpp-openssl/server/ConnectionProvider.hpp"
#include "oatpp-openssl/Config.hpp"

#include "oatpp/web/server/interceptor/RequestInterceptor.hpp"
#include "oatpp/web/server/AsyncHttpConnectionHandler.hpp"
#include "oatpp/web/server/HttpRouter.hpp"

#include "oatpp/network/tcp/server/ConnectionProvider.hpp"

#include "oatpp/parser/json/mapping/ObjectMapper.hpp"

#include "oatpp/core/macro/component.hpp"
#include "oatpp/core/base/CommandLineArguments.hpp"

#include "oatpp/core/utils/ConversionUtils.hpp"

#include <cstdlib>

/**
 *  Class which creates and holds Application components and registers components in oatpp::base::Environment
 *  Order of components initialization is from top to bottom
 */
class AppComponent {
private:

  class RedirectInterceptor : public oatpp::web::server::interceptor::RequestInterceptor {
  private:
    OATPP_COMPONENT(oatpp::Object<ConfigDto>, appConfig);
  public:

    std::shared_ptr<OutgoingResponse> intercept(const std::shared_ptr<IncomingRequest>& request) override {
      auto host = request->getHeader(oatpp::web::protocol::http::Header::HOST);
      auto siteHost = appConfig->getHostString();
//      if(!host || !host->equals(siteHost.get())) {
//        auto response = OutgoingResponse::createShared(oatpp::web::protocol::http::Status::CODE_301, nullptr);
//        response->putHeader("Location", appConfig->getCanonicalBaseUrl() + request->getStartingLine().path.toString());
//        return response;
//      }
      return nullptr;
    }

  };

private:
  oatpp::base::CommandLineArguments m_cmdArgs;
public:
  AppComponent(const oatpp::base::CommandLineArguments& cmdArgs)
    : m_cmdArgs(cmdArgs)
  {}
public:

  /**
   * Create config component
   */
  OATPP_CREATE_COMPONENT(oatpp::Object<ConfigDto>, appConfig)([this] {

    auto config = ConfigDto::createShared();

    config->host = std::getenv("EXTERNAL_ADDRESS");
    if (!config->host) {
      config->host = m_cmdArgs.getNamedArgumentValue("--host", "localhost");
    }

    const char* portText = std::getenv("EXTERNAL_PORT");
    if(!portText) {
      portText = m_cmdArgs.getNamedArgumentValue("--port", "8001");
    }

    bool success;
    auto port = oatpp::utils::conversion::strToUInt32(portText, success);
    if(!success || port > 65535) {
      throw std::runtime_error("Invalid port!");
    }
      config->port = 8001;//(v_uint16) port;

    config->tlsPrivateKeyPath = std::getenv("TLS_FILE_PRIVATE_KEY");
    if(!config->tlsPrivateKeyPath) {
      config->tlsPrivateKeyPath = m_cmdArgs.getNamedArgumentValue("--tls-key", "" "../utility/cert/test_key.pem");
    }

    config->tlsCertificateChainPath = std::getenv("TLS_FILE_CERT_CHAIN");
    if(!config->tlsCertificateChainPath) {
      config->tlsCertificateChainPath = m_cmdArgs.getNamedArgumentValue("--tls-chain", "" "../utility/cert/test_cert.crt");
    }

    config->statisticsUrl = std::getenv("URL_STATS_PATH");
    if(!config->statisticsUrl) {
      config->statisticsUrl = m_cmdArgs.getNamedArgumentValue("--url-stats", "admin/stats.json");
    }

    return config;

  }());

  /**
   * Create Async Executor
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::async::Executor>, executor)([] {
    return std::make_shared<oatpp::async::Executor>();
  }());

  /**
   *  Create ConnectionProvider component which listens on the port
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)([] {

    OATPP_COMPONENT(oatpp::Object<ConfigDto>, appConfig);

    std::shared_ptr<oatpp::network::ServerConnectionProvider> result;

    if(appConfig->useTLS) {

//      OATPP_LOGD("oatpp::libressl::Config", "key_path='%s'", appConfig->tlsPrivateKeyPath->c_str());
//      OATPP_LOGD("oatpp::libressl::Config", "chn_path='%s'", appConfig->tlsCertificateChainPath->c_str());
//
//      auto config = oatpp::libressl::Config::createDefaultServerConfigShared(
//        appConfig->tlsCertificateChainPath->c_str(),
//        appConfig->tlsPrivateKeyPath->c_str()
//      );
//
//      /**
//       * if you see such error:
//       * oatpp::libressl::server::ConnectionProvider:Error on call to 'tls_configure'. ssl context failure
//       * It might be because you have several ssl libraries installed on your machine.
//       * Try to make sure you are using libtls, libssl, and libcrypto from the same package
//       */
//      result = oatpp::libressl::server::ConnectionProvider::createShared(config, {"0.0.0.0", appConfig->port, oatpp::network::Address::IP_4});
    } else {
      result = oatpp::network::tcp::server::ConnectionProvider::createShared({"0.0.0.0", appConfig->port, oatpp::network::Address::IP_4});
    }

    return result;

  }());

  /**
   *  Create Router component
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, httpRouter)([] {
    return oatpp::web::server::HttpRouter::createShared();
  }());

  /**
   *  Create ConnectionHandler component which uses Router component to route requests
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, serverConnectionHandler)("http", [] {
    OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router); // get Router component
    OATPP_COMPONENT(std::shared_ptr<oatpp::async::Executor>, executor); // get Async executor component
    auto handler = oatpp::web::server::AsyncHttpConnectionHandler::createShared(router, executor);
    handler->addRequestInterceptor(std::make_shared<RedirectInterceptor>());
    return handler;
  }());

  /**
   *  Create ObjectMapper component to serialize/deserialize DTOs in Contoller's API
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::data::mapping::ObjectMapper>, apiObjectMapper)([] {
    auto mapper = oatpp::parser::json::mapping::ObjectMapper::createShared();
    mapper->getSerializer()->getConfig()->includeNullFields = false;
    return mapper;
  }());

  /**
   *  Create statistics object
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<Statistics>, statistics)([] {
    return std::make_shared<Statistics>();
  }());

  /**
   *  Create chat lobby component.
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<SfuServer>, sfuServer)([] {
    return std::make_shared<SfuServer>();
  }());

  /**
   *  Create websocket connection handler
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, websocketConnectionHandler)("websocket", [] {
    OATPP_COMPONENT(std::shared_ptr<oatpp::async::Executor>, executor);
    OATPP_COMPONENT(std::shared_ptr<SfuServer>, sfuServer);
    auto connectionHandler = oatpp::websocket::AsyncConnectionHandler::createShared(executor);
    connectionHandler->setSocketInstanceListener(sfuServer);
    return connectionHandler;
  }());

};

#endif /* AppComponent_hpp */


================================================
FILE: demo/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.5)

set(PROJECT_NAME "sfu-demo")

project(${PROJECT_NAME})
message("\n=========== ${PROJECT_NAME} Build Configuration ===========\n")
message(STATUS "PROJECT_INCLUDE_DIR : " ${PROJECT_INCLUDE_DIR})
message(STATUS "PROJECT_LIB_DIR : " ${PROJECT_LIB_DIR})

# C++ standard requirements.
set(CMAKE_CXX_STANDAR 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

IF(NOT WIN32)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ENDIF()

IF (WIN32)
	#SET(CMAKE_C_COMPILER "c:/Program Files/LLVM/bin/clang")
	#SET(CMAKE_CXX_COMPILER "c:/Program Files/LLVM/bin/clang++")
ELSEIF (APPLE)

ELSEIF (UNIX)

  message(STATUS "This is BINARY dir " ${PROJECT_BINARY_DIR})
  message(STATUS "This is SOURCE dir " ${PROJECT_SOURCE_DIR})
  message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
  message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
ENDIF ()
message("")

set(sources
  main.cpp
  Server.hpp
  Server.cpp
  Config.hpp
  Config.cpp
  Transfmt.cpp
  Transfmt.hpp
  AppComponent.hpp
  controller/RoomsController.hpp
  controller/StatisticsController.hpp
  dto/ConfigDto.hpp
  dto/DTOs.hpp
  rooms/Lobby.cpp
  rooms/Lobby.hpp
  rooms/Message.cpp
  rooms/Message.h
  rooms/Peer.cpp
  rooms/Peer.hpp
  rooms/Room.cpp
  rooms/Room.hpp
  utils/Statistics.cpp
  utils/Statistics.hpp 
  utils/util.cpp
  utils/util.h
)

add_executable(${PROJECT_NAME} ${sources} )

#[[
TODO:

# FIPS.
      [ 'openssl_fips != ""', {
        'defines': [ 'BUD_FIPS_ENABLED=1' ]
      }],
# Platform-specifics.

      [ 'OS == "mac" and mediasoup_asan == "true"', {
        'xcode_settings':
        {
          'OTHER_CFLAGS': [ '-fsanitize=address' ],
          'OTHER_LDFLAGS': [ '-fsanitize=address' ]
        }
      }],

      [ 'OS == "linux" and mediasoup_asan == "true"', {
        'cflags': [ '-fsanitize=address' ],
        'ldflags': [ '-fsanitize=address' ]
      }],
# Dependency-specifics.

      [ 'sctp_debug == "true"', {
        'defines': [ 'SCTP_DEBUG' ]
      }]
[ 'OS in "linux freebsd"', {
        'ldflags': [ '-Wl,--whole-archive <(libopenssl) -Wl,--no-whole-archive' ]
      }],
[ 'OS == "win"', {

        # Handle multi files with same name.
        # https://stackoverflow.com/a/22936230/2085408
        # https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.vcprojectengine.vcclcompilertool.objectfile?view=visualstudiosdk-2017#Microsoft_VisualStudio_VCProjectEngine_VCCLCompilerTool_ObjectFile
        'msvs_settings': {
          'VCCLCompilerTool': { 'ObjectFile': ['$(IntDir)\%(RelativeDir)\%(Filename).obj'], },
        },

        # Output Directory setting for msvc.
        # https://github.com/nodejs/node-gyp/issues/1242#issuecomment-310921441
        'msvs_configuration_attributes': {
          'OutputDirectory': '$(SolutionDir)\\out\\$(Configuration)\\'
        }
      }],
]]

# Set your project compile flags.
# E.g. if using the C++ header files
# you will need to enable C++11 support
# for your compiler.
 


if(IS_BIG_ENDIAN)
    target_compile_definitions(${PROJECT_NAME} PRIVATE "MS_BIG_ENDIAN")
else()
    target_compile_definitions(${PROJECT_NAME} PRIVATE "MS_LITTLE_ENDIAN")
endif()


IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
    target_compile_definitions(${PROJECT_NAME} 
        PRIVATE 
        _POSIX_C_SOURCE=200112
        _GNU_SOURCE
    )
    #include_directories(${LLVM_INCLUDE_DIRS})
    #add_definitions(${LLVM_DEFINITIONS})
    # Find the libraries that correspond to the LLVM components
    # that we wish to use
    #llvm_map_components_to_libnames(llvm_libs support core irreader)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
    set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-dynamic")
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows")
    target_include_directories(${PROJECT_NAME}
    PRIVATE
    ../deps/getopt/src
)
ELSE()

ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")

IF(UNIX)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -g -gdwarf-2 -Wall -Wendif-labels -W -Wno-unused-parameter -Wall -Wextra -Wno-unused-parameter -std=c++11")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -fPIC")
ENDIF()
message(STATUS "CMAKE_CXX_FLAGS : " ${CMAKE_CXX_FLAGS})

IF(APPLE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
    set_property(TARGET ${PROJECT_NAME}
        PROPERTY XCODE_ATTRIBUTE_WARNING_CFLAGS
        -std=c++11
        PROPERTY XCODE_ATTRIBUTE_OTHER_CPLUSPLUSFLAGS

    )
ENDIF()

# Public (interface) headers from dependencies.
target_include_directories(${PROJECT_NAME} PUBLIC
	${PROJECT_INCLUDE_DIR}
  ${WORKER_INCLUDE_DIR}
  ${LIB_WEBRTC_INCLUDE_DIR}
  ${MEDIASOUP_INCLUDE_DIR}
  ${PROTOO_INCLUDE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/../deps/json/single_include/nlohmann
  ${CMAKE_CURRENT_SOURCE_DIR}/../deps/libwebrtc/deps/abseil-cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/../deps/libsdptransform
)
LINK_DIRECTORIES(
	${PROJECT_LIB_DIR}
)


IF (WIN32)
  target_link_libraries(${PROJECT_NAME}
      worker
      libwebrtc
      ${PROJECT_LIB_DIR}/oatpp-websocket.lib
      ${PROJECT_LIB_DIR}/oatpp.lib
      ${PROJECT_LIB_DIR}/oatpp-openssl.lib
      ${PROJECT_LIB_DIR}/netstring.lib
      ${PROJECT_LIB_DIR}/uv_a.lib
      ${PROJECT_LIB_DIR}/libssl.lib
      ${PROJECT_LIB_DIR}/libcrypto.lib
      ${PROJECT_LIB_DIR}/srtp2.lib
      ${PROJECT_LIB_DIR}/usrsctp.lib
      ${PROJECT_LIB_DIR}/absl_internal_throw_delegate.lib
      ${PROJECT_LIB_DIR}/absl_strings.lib
      ${PROJECT_LIB_DIR}/absl_optional.lib
      ${PROJECT_LIB_DIR}/absl_base.lib
      ${PROJECT_LIB_DIR}/absl_bad_optional_access.lib
      ${PROJECT_LIB_DIR}/absl_bad_variant_access.lib
      ${PROJECT_LIB_DIR}/absl_internal_bad_any_cast_impl.lib
      ${PROJECT_LIB_DIR}/sdptransform.lib
      ${PROJECT_LIB_DIR}/getopt.lib
      mediasoup
      ws2_32
      userenv
      
       # LibreSSL libraries
      # LibreSSL::TLS
      # LibreSSL::SSL
      # LibreSSL::Crypto
  )
  
ELSE ()

target_link_libraries(${PROJECT_NAME}
    worker
    libwebrtc
    ${PROJECT_LIB_DIR}/liboatpp-websocket.a
    ${PROJECT_LIB_DIR}/liboatpp.a
    ${PROJECT_LIB_DIR}/liboatpp-openssl.a
    ${PROJECT_LIB_DIR}/libnetstring.a
    ${PROJECT_LIB_DIR}/libuv_a.a
    ${PROJECT_LIB_DIR}/libssl.a
    ${PROJECT_LIB_DIR}/libcrypto.a
    ${PROJECT_LIB_DIR}/libsrtp2.a
    ${PROJECT_LIB_DIR}/libusrsctp.a
    ${PROJECT_LIB_DIR}/libabsl_internal_throw_delegate.a
    ${PROJECT_LIB_DIR}/libabsl_strings.a
    ${PROJECT_LIB_DIR}/libabsl_optional.a
    ${PROJECT_LIB_DIR}/libabsl_bad_optional_access.a
    ${PROJECT_LIB_DIR}/libabsl_bad_variant_access.a
    ${PROJECT_LIB_DIR}/libabsl_internal_bad_any_cast_impl.a
    dl
    ${PROJECT_LIB_DIR}/libsdptransform.a
    mediasoup
    ${PROJECT_LIB_DIR}/libuv_a.a

     # LibreSSL libraries
    #  LibreSSL::TLS
    #  LibreSSL::SSL
    #  LibreSSL::Crypto
    
)
ENDIF()
install(TARGETS ${PROJECT_NAME} DESTINATION bin)



================================================
FILE: demo/Config.cpp
================================================
#include "Config.hpp"
#include <fstream>
#include "Log.hpp"
#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>
#include "json.hpp"
#include <stdlib.h>
#include <stdio.h>
#ifdef _WIN32
#include "windows.h"
#endif
using namespace std;
using json = nlohmann::json;
Config::Config()
{
    this->filename = "config.json";
}
Config::~Config()
{

}
void Config::getConfigData(ifstream &configfile,std::string & filedata)
{
    configfile.seekg(0,ios::end);
    auto len = configfile.tellg();  //获取文件长度
    configfile.seekg(0, ios::beg);  //设置读取位置为起始位置
    char fileBuffer[5000]={0};
    memset(fileBuffer,0,(size_t)len + 1);
    configfile.read(fileBuffer,len);
    filedata = fileBuffer;
}
string Config::TrimStringForJson(string res)
{
    for(auto iter = res.begin();iter != res.end();iter ++){

        if(isblank(*iter) != 0){       //isblank判断是否为制表符或者空格,是的话返回非零值
                                                //需包含头文件<ctype.h>

            res.erase(iter--); // --是因为重新判断一下填过来的字符

        }

    }
    //删除换行符
    int r = res.find("\n");
    while (r != string::npos)
    {
        if (r != string::npos)
        {
            res.replace(r, 1, "");
            r = res.find("\n");
            
        }
        
    }
    //删除换行符
    r = res.find("\r");
    while (r != string::npos)
    {
        if (r != string::npos)
        {
            res.replace(r, 1, "");
            r = res.find("\r");
            
        }
        
    }
    //删除换行符
    r = res.find("\t");
    while (r != string::npos)
    {
        if (r != string::npos)
        {
            res.replace(r, 1, "");
            r = res.find("\t");
            
        }
        
    }
    //删除所有空格
   // res.erase(remove_if(res.begin(),res.end(),std::isspace),res.end());
    return res;
    
}

void Config::initConfig()
{
#ifdef _WIN32
    TCHAR exeFullPath[MAX_PATH]; // Full path
    GetModuleFileName(NULL, exeFullPath, MAX_PATH);
    char path[255] = { 0 };
    char path_buffer[_MAX_PATH];
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];

    //TcharToChar(exeFullPath, path);
    _splitpath(exeFullPath, drive, dir, fname, ext);
    strcat(path, drive);
    strcat(path, dir);
    strcat(path, "config.json");
    this->filename = path;
#else
    this->filename = "config.json";
#endif

    ifstream configfile(filename);
    //ofstream outfile("G:\\C++ project\\Read\\out.txt", ios::app);
    string line;
    if (!configfile.is_open())
    {
        MS_lOGD("not open file name =%s",filename.c_str());
        return;
    }
    std::string filedata;
    getConfigData(configfile,filedata);
    //MS_lOGD("config data=%s",filedata.c_str());
   // filedata = TrimStringForJson(filedata);
    jsonConfig = json::parse(filedata);
    //MS_lOGD("config json data=%s",jsonConfig.dump().c_str());
    //json rtmp = jsonConfig["rtmp"];
    //MS_lOGD("rtmp json data=%s",rtmp.dump().c_str());
    configfile.close();
    
    mediasoup.webRtcTransportOptions = jsonConfig["mediasoup"]["webRtcTransportOptions"];
    mediasoup.plainTransportOptions = jsonConfig["mediasoup"]["plainTransportOptions"];
    mediasoup.routerOptions = jsonConfig["mediasoup"]["routerOptions"];
    //MS_lOGD("config mediasoup.routerOptions data=%s",mediasoup.routerOptions.dump().c_str());
    this->http = jsonConfig["http"];
    this->rtp = jsonConfig["rtp"];
    this->rtmp = jsonConfig["rtmp"];


}


================================================
FILE: demo/Config.hpp
================================================
#pragma once
#include <fstream>
#include "Log.hpp"
#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>
#include "json.hpp"

using json = nlohmann::json;
using namespace std;
struct mediasoup_
{
    json webRtcTransportOptions;
    json plainTransportOptions;
    json routerOptions;

};

class Config
{
public:
    Config();
    ~Config();
    void initConfig();
    mediasoup_ mediasoup;
    json http;
    json rtp;
    json rtmp;
    json jsonConfig;
    void getConfigData(ifstream &configfile,std::string & filedata);
    string TrimStringForJson(string raw);
private:
    std::string filename = "config.json";
    
};


================================================
FILE: demo/PeerOld.cpp
================================================
#include "Peer.hpp"
#include "Log.hpp"

using namespace std;
using namespace nlohmann;



    Peer::Peer() {

    }
    Peer::~Peer() {

    }
void Peer::notify(string method, json data)
{
    MS_lOGD("Peer notify method=%s data=%s",method.c_str(),data.dump(4).c_str());
  if(protooPeer) {
      protooPeer->notify(method,data);
  }
   
}
void Peer::request(string method, json data)
{
        MS_lOGD("Peer request method=%s data=%s",method.c_str(),data.dump(4).c_str());
    if(protooPeer) {
        protooPeer->request(method,data);
    }
}


================================================
FILE: demo/PeerOld.hpp
================================================
#ifndef _PEER_H
#define _PEER_H

#include "json.hpp"
#include "Transport/WebSocketTransport.h"
#include <stdexcept>
#include "utils/EventEmitter.hpp"
#include "Peer.h"
#include "Consumer.hpp"
#include "Producer.hpp"
#include "DataProducer.hpp"
#include "DataConsumer.hpp"
#include "Transport.hpp"

using namespace std;
using namespace nlohmann;
struct _device
{
    std::string flag ;//   : "broadcaster",
    std::string name ;//   : device.name || "Unknown device",
    std::string version ;//: device.version
};

struct PeerInfo
{
    std::string id;
    std::string displayName;
    _device device;
    json producerInfo;
    std::vector<json> producers;
 
};
class PeerData
{
  public:
  std::string id;

  std::shared_ptr<Consumer>  consume;
  bool joined;
  std::string displayName;
  _device device;
  json rtpCapabilities;
  json sctpCapabilities;

  std::unordered_map<std::string,std::shared_ptr<Transport> > transports;
  std::unordered_map<std::string,std::shared_ptr<Producer> > producers;
  std::unordered_map<std::string,std::shared_ptr<Consumer> > consumers;
  std::unordered_map<std::string,std::shared_ptr<DataProducer> > dataProducers;
  std::unordered_map<std::string,std::shared_ptr<DataConsumer> > dataConsumers;

};

class Peer {
    public:
        Peer();
        ~Peer();
      void notify(string method, json data = json({}));
      void request(string method, json data = json({}));
    public:
        std::string id;
        PeerData data;
 
    bool isHasRequest = false;
    bool isHasNotify = true;
    public:
       std::shared_ptr<protoo::Peer> protooPeer;
  

};


#endif



================================================
FILE: demo/RoomOld.cpp
================================================
#include "Room.hpp"
#include <iostream>
#include <string>
#include <cstring>


void to_json(json& j, const _device& st){
    j = json{
      {"flag", st.flag},
      {"name", st.name},
       {"version", st.version}
  };
}
void from_json(const json& j, _device& st){
    j.at("flag").get_to(st.flag);
  j.at("name").get_to(st.name);
   j.at("version").get_to(st.version);
  
}

void to_json(json& j, const pairInfo& st){
    j = json{
      {"id", st.id},
      {"kind", st.kind}
  };
}
void from_json(const json& j, pairInfo& st){
    j.at("id").get_to(st.id);
    j.at("kind").get_to(st.kind);
 
  
}
 
void to_json(json& j, const PeerInfo& st){
    j = json{
      {"id", st.id},
      {"displayName", st.displayName},
      {"device", st.device},
      {"producerInfo", st.producerInfo},
      {"producers", st.producers}
  };
}
void from_json(const json& j, PeerInfo& st){
    j.at("id").get_to(st.id);
    j.at("displayName").get_to(st.displayName);
    j.at("device").get_to(st.device);
    j.at("producerInfo").get_to(st.producerInfo);
    j.at("producers").get_to(st.producers);
 
  
}
std::string Base64::Encode(const unsigned char * str,int bytes) {
    int num = 0,bin = 0,i;
    std::string _encode_result;
    const unsigned char * current;
    current = str;
    while(bytes > 2) {
        _encode_result += _base64_table[current[0] >> 2];
        _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
        _encode_result += _base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
        _encode_result += _base64_table[current[2] & 0x3f];

        current += 3;
        bytes -= 3;
    }
    if(bytes > 0)
    {
        _encode_result += _base64_table[current[0] >> 2];
        if(bytes%3 == 1) {
            _encode_result += _base64_table[(current[0] & 0x03) << 4];
            _encode_result += "==";
        } else if(bytes%3 == 2) {
            _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
            _encode_result += _base64_table[(current[1] & 0x0f) << 2];
            _encode_result += "=";
        }
    }
    return _encode_result;
}
std::string Base64::Decode(const char *str,int length) {
       //解码表
    const int DecodeTable[] =
    {
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -2, -2, -1, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, -2, -2, 63,
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, -2, -2, -2,
        -2,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, -2,
        -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2
    };
    int bin = 0,i=0,pos=0;
    std::string _decode_result;
    const char *current = str;
    char ch;
    while( (ch = *current++) != '\0' && length-- > 0 )
    {
        if (ch == base64_pad) { // 当前一个字符是“=”号
            /*
            先说明一个概念:在解码时,4个字符为一组进行一轮字符匹配。
            两个条件:
                1、如果某一轮匹配的第二个是“=”且第三个字符不是“=”,说明这个带解析字符串不合法,直接返回空
                2、如果当前“=”不是第二个字符,且后面的字符只包含空白符,则说明这个这个条件合法,可以继续。
            */
            if (*current != '=' && (i % 4) == 1) {
                return NULL;
            }
            continue;
        }
        ch = (char)DecodeTable[ch];
        //这个很重要,用来过滤所有不合法的字符
        if (ch < 0 ) { /* a space or some other separator character, we simply skip over */
            continue;
        }
        switch(i % 4)
        {
            case 0:
                bin = ch << 2;
                break;
            case 1:
                bin |= ch >> 4;
                _decode_result += bin;
                bin = ( ch & 0x0f ) << 4;
                break;
            case 2:
                bin |= ch >> 2;
                _decode_result += bin;
                bin = ( ch & 0x03 ) << 6;
                break;
            case 3:
                bin |= ch;
                _decode_result += bin;
                break;
        }
        i++;
    }
    return _decode_result;
}
/**
 https://www.cnblogs.com/lrxing/p/5535601.html
 int main()
 {
     unsigned char str[] = "这是一条测试数据:http://img.v.cmcm.com/7dd6e6d7-0c2d-5a58-a072-71f828b94cbc_crop_216x150.jpg";
     string normal,encoded;
     int i,len = sizeof(str)-1;
     Base64 *base = new Base64();
     encoded = base->Encode(str,len);
     cout << "base64 encode : " << encoded << endl;
     len = encoded.length();
     const char * str2 = encoded.c_str();
     normal = base->Decode(str2,len);
     cout << "base64 decode : " << normal <<endl;
     return 0;
 }
 
 */


================================================
FILE: demo/RoomOld.hpp
================================================
#pragma once
#include "IMediasoup.hpp"
#include "IWorker.hpp"
#include "Log.hpp"
#include "Consumer.hpp"
#include "Router.hpp"
#include "Log.hpp"
#include "Config.hpp"
#include "AudioLevelObserver.hpp"
#include "EnhancedEventEmitter.hpp"
#include "json.hpp"
#include "Room.h"   //protoo  
#include "Peer.hpp"
#include "Transfmt.hpp"
#include "sdp/SdpOffer.hpp"
using json = nlohmann::json;
class Base64{
private:
    std::string _base64_table;
    static const char base64_pad = '=';public:
    Base64()
    {
        _base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /*这是Base64编码使用的标准字典*/
    }
    /**
     * 这里必须是unsigned类型,否则编码中文的时候出错
     */
    std::string Encode(const unsigned char * str,int bytes);
    std::string Decode(const char *str,int bytes);
    void Debug(bool open = true);
};
/**
 * Room class.
 *
 * This is not a "mediasoup Room" by itself, by a custom class that holds
 * a protoo Room (for signaling with WebSocket clients) and a mediasoup Router
 * (for sending and receiving media to/from those WebSocket peers).
 */

void to_json(json& j, const _device& st);
void from_json(const json& j, _device& st);
struct pairInfo
{
    std::string id ;//
    std::string kind ;//
};
void to_json(json& j, const pairInfo& st);
void from_json(const json& j, pairInfo& st);
 
void to_json(json& j, const PeerInfo& st);
void from_json(const json& j, PeerInfo& st);
class Room : public  EnhancedEventEmitter
{
public:
    //Config
    Config config;
    
    //record
    Transfmt transfmt;
    
	// Room id.
		// @type {String}
		std::string _roomId;
    bool dvr = false;

		// Closed flag.
		// @type {Boolean}
		bool _closed = false;

		// protoo Room instance.
		// @type {protoo.Room}
    std::shared_ptr<protoo::Room> _protooRoom;
    std::unordered_map<std::string,shared_ptr<Peer> > _peers;

	shared_ptr<protoo::Peer>  _delPeers;
		// Map of broadcasters indexed by id. Each Object has:
		// - {String} id
		// - {Object} data
		//   - {String} displayName
		//   - {Object} device
		//   - {RTCRtpCapabilities} rtpCapabilities
		//   - {Map<String, mediasoup.Transport>} transports
		//   - {Map<String, mediasoup.Producer>} producers
		//   - {Map<String, mediasoup.Consumers>} consumers
		//   - {Map<String, mediasoup.DataProducer>} dataProducers
		//   - {Map<String, mediasoup.DataConsumers>} dataConsumers
		// @type {Map<String, Object>}
		//this->_broadcasters = new Map();
    std::unordered_map<std::string,shared_ptr<Peer> > _broadcasters;
        // @type {Map<String, Object>}
        //this->_bridges = new Map();
    std::unordered_map<std::string,shared_ptr<Peer> > _bridges;
		// mediasoup Router instance.
		// @type {mediasoup.Router}
    std::shared_ptr<Router> _mediasoupRouter ;//= mediasoupRouter;

		// mediasoup AudioLevelObserver.
		// @type {mediasoup.AudioLevelObserver}
    std::shared_ptr<AudioLevelObserver>  _audioLevelObserver;

		// DataChannel bot.
		// @type {Bot}
    void *_bot;

		// Network throttled.
		// @type {Boolean}
		bool _networkThrottled = false;

		// Handle audioLevelObserver.
		//this->_handleAudioLevelObserver();

		// For debugging.
		//global.audioLevelObserver = this->_audioLevelObserver;
		//global.bot = this->_bot;
 
	void setConfig(Config &config1) {
     
        this->config.initConfig();
  }
	~Room() { 
	}
	Room(std::string &roomId, std::shared_ptr<protoo::Room> protooRoom, std::shared_ptr<Router> mediasoupRouter, std::shared_ptr<AudioLevelObserver> audioLevelObserver)
	{
		//super();
		//this->setMaxListeners(1000);

		// Room id.
		// @type {String}
		this->_roomId = roomId;

		// Closed flag.
		// @type {Boolean}
		this->_closed = false;

		// protoo Room instance.
		// @type {protoo.Room}
		this->_protooRoom = protooRoom;

		// Map of broadcasters indexed by id. Each Object has:
		// - {String} id
		// - {Object} data
		//   - {String} displayName
		//   - {Object} device
		//   - {RTCRtpCapabilities} rtpCapabilities
		//   - {Map<String, mediasoup.Transport>} transports
		//   - {Map<String, mediasoup.Producer>} producers
		//   - {Map<String, mediasoup.Consumers>} consumers
		//   - {Map<String, mediasoup.DataProducer>} dataProducers
		//   - {Map<String, mediasoup.DataConsumers>} dataConsumers
		// @type {Map<String, Object>}
		//this->_broadcasters = new Map();

    // @type {Map<String, Object>}
   // this->_bridges = new Map();
    
		// mediasoup Router instance.
		// @type {mediasoup.Router}
		this->_mediasoupRouter = mediasoupRouter;

		// mediasoup AudioLevelObserver.
		// @type {mediasoup.AudioLevelObserver}
		this->_audioLevelObserver = audioLevelObserver;

		// DataChannel bot.
		// @type {Bot}
		//this->_bot = bot;

		// Network throttled.
		// @type {Boolean}
		this->_networkThrottled = false;

		// Handle audioLevelObserver.
		this->_handleAudioLevelObserver();

    config.initConfig();

		// For debugging.
		//global.audioLevelObserver = this->_audioLevelObserver;
		//global.bot = this->_bot;
	}
    /**
     * Factory function that creates and returns Room instance.
     *
     * @async
     *
     * @param {mediasoup.Worker} mediasoupWorker - The mediasoup Worker in which a new
     *   mediasoup Router must be created.
     * @param {String} roomId - Id of the Room instance.
     */
    static std::shared_ptr<Room>  create(std::shared_ptr<mediasoup::IWorker> mediasoupWorker, std::string &roomId )
    {
        MS_lOGI("create() [roomId:%s]", roomId.c_str());

        // Create a protoo Room instance.
        std::shared_ptr<protoo::Room> protooRoom = std::make_shared<protoo::Room>();

        // Router media codecs.
        //const { mediaCodecs } = config.mediasoup.routerOptions;
        Config config;
        config.initConfig();
        MS_lOGI("create() config.mediasoup.routerOptions=%s", config.mediasoup.routerOptions.dump().c_str());
        json mediaCodecs = config.mediasoup.routerOptions["mediaCodecs"];
        // Create a mediasoup Router.
    
        RouterOptions routerOptions;
        routerOptions.mediaCodecs = mediaCodecs.get<std::vector<RtpCodecCapability>>();
        
        auto mediasoupRouter =  mediasoupWorker->createRouter(routerOptions);

        // Create a mediasoup AudioLevelObserver.
        AudioLevelObserverOptions options;
        options.maxEntries = 1;
        options.threshold  = -80;
        options.interval   = 800;
        auto audioLevelObserver =  mediasoupRouter->createAudioLevelObserver( options);

        //const bot =  Bot.create({ mediasoupRouter });

        return std::make_shared<Room>(
                roomId,
                protooRoom,
                mediasoupRouter,
                audioLevelObserver
         );
    }

	/**
	 * Closes the Room instance by closing the protoo Room and the mediasoup Router.
	 */
	void close()
	{
		MS_lOGD("close()");

		this->_closed = true;

		// Close the protoo Room.
		this->_protooRoom->close();

		// Close the mediasoup Router.
		this->_mediasoupRouter->close();

		// Close the Bot.
		//this->_bot.close();

		// Emit "close" event.//
		this->emit("close", this->_roomId);

		// Stop network throttling.
		if (this->_networkThrottled)
		{
			//throttle.stop({})
			//	
		}
	}

	void logStatus()
	{
/*
		MS_lOGI(
			"logStatus() [roomId:%s, protoo Peers:%s, mediasoup Transports:%s]",
			this->_roomId,
			this->_protooRoom->peers.length,
			this->_mediasoupRouter->_transports.size); // NOTE: Private API.
*/
	}

	/**
	 * Called from server.js upon a protoo WebSocket connection request from a
	 * browser.
	 *
	 * @param {String} peerId - The id of the protoo peer to be created.
	 * @param {Boolean} consume - Whether this peer wants to consume from others.
	 * @param {protoo.WebSocketTransport} protooWebSocketTransport - The associated
	 *   protoo WebSocket transport->
	 */
	void handleProtooConnection(std::string &peerId, std::shared_ptr<Consumer> consume, WebSocketTransport* protooWebSocketTransport )
	{

		auto  existingPeer = this->_protooRoom->getPeer(peerId);

		if (existingPeer)
		{
			MS_lOGW(
				"handleProtooConnection() | there is already a protoo Peer with same peerid(), closing it [peerId:%s]",
                    peerId.c_str());

			existingPeer->close();
		}

		std::shared_ptr<protoo::Peer> protooPeer;
        std::shared_ptr<Peer> peer;
        if(this->_peers.find(peerId) != this->_peers.end())
        {
            MS_lOGW(
                "handleProtooConnection() | there is already a Peer with same peerid() [peerId:%s]",
                    peerId.c_str());
            peer = this->_peers[peerId];
        } else
        {
            MS_lOGW(
                "handleProtooConnection() | new a Peer [peerId:%s]",
                    peerId.c_str());
            peer = std::make_shared<Peer>();
        }
      

		// Create a new protoo Peer with the given peerId.
		try
		{
            protooPeer = this->_protooRoom->createPeer(peerId, protooWebSocketTransport);
            peer->protooPeer = protooPeer;
            this->_peers[peerId] = peer;
		}
		catch (const char *error)
		{
			MS_lOGE("protooRoom.createPeer() failed:%s", error);
            return;
		}

		// Use the peer->data object to store mediasoup related objects.

        // Not joined after a custom protoo "join" request is later received.
        peer->id = peerId;
        peer->data.consume = consume;
       // peer->data.joined = false;

        if(!protooPeer)
        {
            MS_lOGE("protooRoom.createPeer() failed: protooPeer == null");
            return;
        }
        protooPeer->on("request",[&,peerId](json request, std::function<void(json data)> const& accept, std::function<void(int errorCode, std::string errorReason)> const& reject)
		{
            std::shared_ptr<Peer> peer1 = this->_peers[peerId];
			MS_lOGD(
				"protoo Peer  event [method:%s, peerId:%s peer=%x]",
				request["method"].dump().c_str(), peer1->id.c_str(),peer1.get());

            this->_handleProtooRequest(peer1, request, accept, reject);
//				.catch((error) =>
//				{
//					MS_lOGE("request failed:%o", error);
//
//					reject(error);
//				});
		});

        protooPeer->on("close",[&, peerId](std::string &closePeerId) 
		{
			if (this->_closed)
				return;
			std::shared_ptr<Peer> peer1 = this->_peers[peerId]; 

			MS_lOGD("protoo Peer event [peerId:%s]", peer1->id.c_str());

			// If the Peer was joined, notify all Peers.
			if (peer1->data.joined)
			{
				for (auto otherPeer : this->_getJoinedPeers(peer1))
				{
                    json data = { {"peerId", peer1->id} };
                    otherPeer->notify("peerClosed",data );
						
				}
			}

			// Iterate and close all mediasoup Transport associated to this Peer, so all
			// its Producers and Consumers will also be closed.
			for (auto kv : peer1->data.transports)
			{
                //auto transportId        = kv.first;
                auto transport   = kv.second;
				transport->close();
			}
			this->_delPeers = this->_protooRoom->getPeer(closePeerId);
			
			this->_protooRoom->removePeer(closePeerId);
			this->_peers.erase(closePeerId);

			// If this is the latest Peer in the room, close the room.
			if (this->_peers.size() == 0)
			{
				MS_lOGI(
					"last Peer in the room left, closing the room [roomId:%s]",
					this->_roomId.c_str());

				this->close();
			}
		});

	}

	RtpCapabilities getRouterRtpCapabilities()
	{
		return this->_mediasoupRouter->rtpCapabilities();
	}
  std::shared_ptr<Peer>  getPeerInfo(std::string flag,std::string &id, std::string &displayName, json  &device, RtpCapabilities &rtpCapabilities)
    {
        std::shared_ptr<Peer>  info = std::make_shared<Peer>();
        info->id = id;
        info->data.displayName = displayName;
        info->data.device.flag = flag;
        info->data.device.name = device["name"];
        info->data.device.version = device["version"];
        info->data.rtpCapabilities = rtpCapabilities;
        return info;
    }
    
    json getDevice(Peer & info) {
        json device = json::object();
        device["flag"] = info.data.device.flag;
        device["name"] = info.data.device.name;
        device["version"] = info.data.device.version;
        return device;
    }
	/**
	 * Create a Broadcaster. This is for HTTP API requests (see server.js).
	 *
	 * @async
	 *
	 * @type {String} id - Broadcaster id.
	 * @type {String} displayName - Descriptive name.
	 * @type {Object} [device] - Additional info with name, version and flags fields.
	 * @type {RTCRtpCapabilities} [rtpCapabilities] - Device RTP capabilities.
	 */
    std::vector<PeerInfo > createBroadcaster(std::string id, std::string displayName, json  device, RtpCapabilities &rtpCapabilities )
	{
//		if (typeof id != "string" || !id)
//			MS_THROW_lOG("missing body.id");
//		else if (typeof displayName != "string" || !displayName)
//			MS_THROW_lOG("missing body.displayName");
//		else if (typeof device.name != "string" || !device.name)
//			MS_THROW_lOG("missing body.device.name");
//		else if (rtpCapabilities && typeof rtpCapabilities != "object")
//			MS_THROW_lOG("wrong body.rtpCapabilities");
//
//		if (this->_broadcasters.has(id))
//			MS_THROW_lOG("broadcaster with id id=%s already exists");

//		auto  broadcaster =
//		{
//			id(),
//			data :
//			{
//				displayName,
//				device :
//				{
//					flag    : "broadcaster",
//					name    : device.name || "Unknown device",
//					version : device.version
//				},
//				rtpCapabilities,
//				transports    : new Map(),
//				producers     : new Map(),
//				consumers     : new Map(),
//				dataProducers : new Map(),
//				dataConsumers : new Map()
//			}
//		};
    auto broadcaster = getPeerInfo("broadcaster",id, displayName, device, rtpCapabilities);
		// Store the Broadcaster into the map.
		this->_broadcasters[broadcaster->id] = broadcaster;

		// Notify the new Broadcaster to all Peers.
		for (auto  otherPeer : this->_getJoinedPeers())
		{
			otherPeer->notify(
				"newPeer",
				{
					{"id"          , broadcaster->id},
					{"displayName" , broadcaster->data.displayName},
					{"device"      , broadcaster->data.device}
            });
				//
		}

		// Reply with the list of Peers and their Producers.
		std::vector<PeerInfo> peerInfos;
		auto  joinedPeers = this->_getJoinedPeers();

		// Just fill the list of Peers if the Broadcaster provided its rtpCapabilities.
		if (true)//rtpCapabilities)
		{
			for (auto  joinedPeer : joinedPeers)
			{
//				const peerInfo =
//				{
//					id          : joinedPeer->id(),
//					displayName : joinedPeer->data.displayName,
//					device      : joinedPeer->data.device,
//					producers   : []
//				};
                PeerInfo peerInfo;
                peerInfo.id          = joinedPeer->id;
                peerInfo.displayName = joinedPeer->data.displayName;
                peerInfo.device      = joinedPeer->data.device;
                //info.producers   = []
                //for (auto producer : joinedPeer->data.producers)
                //{
                for (const auto& kv : joinedPeer->data.producers)
                {
                    auto producerId        = kv.first;
                    auto &producer = kv.second;
				
					// Ignore Producers that the Broadcaster cannot consume.
					if (
						!this->_mediasoupRouter->canConsume(
								producer->id(),
								rtpCapabilities
							)
					)
					{
						continue;
					}
             
						peerInfo.producers.push_back({
							{"id"   , producer->id()},
							{"kind" , producer->kind()}
						});
				}

				peerInfos.push_back(peerInfo);
			}
		}

		return peerInfos;
	}

	/**
	 * Delete a Broadcaster.
	 *
	 * @type {String} broadcasterId
	 */
	void deleteBroadcaster( std::string broadcasterId )
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		for (auto kv : broadcaster->data.transports)
		{
            //auto transportId        = kv.first;
            auto transport   = kv.second;
			transport->close();
		}

		this->_broadcasters.erase(broadcasterId);

		for (auto  peer :this->_getJoinedPeers())
		{
            peer->notify("peerClosed", { {"peerId", broadcasterId }});
		}
  }
    std::shared_ptr<Peer>  getPeerFrom(std::string &bridgeId) {
		  // Notify the new Broadcaster to all Peers.
		  auto  bridge = this->_bridges[bridgeId];
		  return bridge;
    }
//    RtpCapabilities  getLocalSdp()
//	  {
//		return this->_mediasoupRouter->rtpCapabilities();
//	  }
    json  getLocalSdp()
	  {
        json jrtp = this->_mediasoupRouter->rtpCapabilities();
		    return jrtp;
	  }
	/**
	 * Create a Bridge. This is for HTTP API requests (see server.js).
	 *
	 * @async
	 *
	 * @type {String} id - Broadcaster id.
	 * @type {String} displayName - Descriptive name.
	 * @type {Object} [device] - Additional info with name, version and flags fields.
	 * @type {RTCRtpCapabilities} [rtpCapabilities] - Device RTP capabilities.
	 */
	json createBridge(std::string id, std::string displayName, json & device, RtpCapabilities &rtpCapabilities)
	{
//		if (typeof id != "string" || !id)
//			MS_THROW_lOG("missing body.id");
//		else if (typeof displayName != "string" || !displayName)
//			MS_THROW_lOG("missing body.displayName");
//		else if (typeof device.name != "string" || !device.name)
//			MS_THROW_lOG("missing body.device.name");
//		else if (rtpCapabilities && typeof rtpCapabilities != "object")
//			MS_THROW_lOG("wrong body.rtpCapabilities");
//
//		if (this->_bridges.has(id))
//			MS_THROW_lOG("bridge with id id=%s already exists");

		// auto  bridge =
		// 	{
		// 		id(),
		// 		data :
		// 			{
		// 				displayName,
		// 				device :
		// 					{
		// 						flag    : "bridge",
		// 						name    : device.name || "Unknown device",
		// 						version : device.version
		// 					},
		// 				rtpCapabilities,
		// 				transports    : new Map(),
		// 				producers     : new Map(),
		// 				consumers     : new Map(),
		// 				dataProducers : new Map(),
		// 				dataConsumers : new Map()
		// 			}
		// 	};
    auto bridge = getPeerInfo("bridge",id, displayName, device, rtpCapabilities);
		// Store the bridge into the map.
		this->_bridges[bridge->id]= bridge;

        // Notify the new Broadcaster to all Peers.
        for (auto  otherPeer : this->_getJoinedPeers())
        {
            otherPeer->notify(
                "newPeer",
                {
                    {"id"          , bridge->id},
                    {"displayName" , bridge->data.displayName},
                    {"device"      , bridge->data.device}
            });
                //
        }

        // Reply with the list of Peers and their Producers.
        std::vector<PeerInfo> peerInfos;
        auto  joinedPeers = this->_getJoinedPeers();

        // Just fill the list of Peers if the Broadcaster provided its rtpCapabilities.
        if (true)//rtpCapabilities)
        {
            for (auto  joinedPeer : joinedPeers)
            {
//                const peerInfo =
//                {
//                    id          : joinedPeer->id(),
//                    displayName : joinedPeer->data.displayName,
//                    device      : joinedPeer->data.device,
//                    producers   : []
//                };
                PeerInfo peerInfo;
                peerInfo.id          = joinedPeer->id;
                peerInfo.displayName = joinedPeer->data.displayName;
                peerInfo.device      = joinedPeer->data.device;
                //info.producers   = []
                //for (auto producer : joinedPeer->data.producers)
                //{
                for (const auto& kv : joinedPeer->data.producers)
                {
                    auto producerId        = kv.first;
                    auto &producer = kv.second;
                
                    // Ignore Producers that the Broadcaster cannot consume.
                    if (
                        !this->_mediasoupRouter->canConsume(
                                producer->id(),
                                rtpCapabilities
                            )
                    )
                    {
                        continue;
                    }
             
                        peerInfo.producers.push_back({
                            {"id"   , producer->id()},
                            {"kind" , producer->kind()}
                        });
                }

                peerInfos.push_back(peerInfo);
            }
        }

        return peerInfos;
	}

	
	/**
	 * Create a mediasoup Transport associated to a Broadcaster. It can be a
	 * PlainTransport or a WebRtctransport->
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} type - Can be "plain" (PlainTransport) or "webrtc"
	 *   (WebRtcTransport).
	 * @type {Boolean} [rtcpMux=false] - Just for PlainTransport, use RTCP mux.
	 * @type {Boolean} [comedia=true] - Just for PlainTransport, enable remote IP:port
	 *   autodetection.
	 * @type {Object} [sctpCapabilities] - SCTP capabilities
	 */
	json createBroadcasterTransport(
		//{
			std::string broadcasterId,
            std::string type,
			bool rtcpMux,// = false,
			bool comedia,// = true,
            SctpCapabilities &sctpCapabilities
		//}
  )
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		if (true)
		{
			if(type == "webrtc")
			{
                json webRtcTransportOptions =
				{
					config.mediasoup.webRtcTransportOptions,
                    {"enableSctp"     , (sctpCapabilities.numStreams.OS != 0)},
                        {"numSctpStreams" , sctpCapabilities.numStreams}
				};
                WebRtcTransportOptions options = webRtcTransportOptions;
				auto transport =  this->_mediasoupRouter->createWebRtcTransport(options);

				// Store it.
				broadcaster->data.transports[transport->id()]= transport;

				return {
					{"id"             , transport->id()},
					{"iceParameters"  , transport->iceParameters()},
					{"iceCandidates"  , transport->iceCandidates()},
					{"dtlsParameters" , transport->dtlsParameters()},
					{"sctpParameters" , transport->sctpParameters()}
				};
			}else
			if(type == "plain")
			{
				json plainTransportOptions =
				{
					config.mediasoup.plainTransportOptions,
                    {"rtcpMux" , rtcpMux},
                    {"comedia" , comedia}
				};
                PlainTransportOptions options = plainTransportOptions;
				auto transport =  this->_mediasoupRouter->createPlainTransport(options);

				// Store it.
				broadcaster->data.transports[transport->id()]= transport;

				return {
					{"id"       , transport->id()},
					{"ip"       , transport->tuple().localIp},
					{"port"     , transport->tuple().localPort},
					{"rtcpPort" , transport->rtcpTuple().localPort}
				};
			} else 
			{
				MS_THROW_lOG("invalid type");
			}
		}
	}

	/**
	 * Connect a Broadcaster mediasoup WebRtctransport->
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} transportId
	 * @type {RTCDtlsParameters} dtlsParameters - Remote DTLS parameters.
	 */
	void connectBroadcasterTransport(
		//{
			std::string broadcasterId,
			std::string transportId,
            DtlsParameters &dtlsParameters
	//	}
	)
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		auto transport = broadcaster->data.transports[transportId];

		if (!transport)
			MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());

        /*
		if (transport->constructor.name != "WebRtcTransport")
		{
			MS_THROW_lOG(
				"transport with id transportId=%s is not a WebRtcTransport",transportId.c_str());
		}*/
        json options = { {"dtlsParameters",dtlsParameters} };
        transport->connect(options);
	}

	/**
	 * Create a mediasoup Producer associated to a Broadcaster.
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} transportId
	 * @type {String} kind - "audio" or "video" kind for the producer->
	 * @type {RTCRtpParameters} rtpParameters - RTP parameters for the producer->
	 */
	json createBroadcasterProducer(
		//{
			std::string broadcasterId,
			std::string transportId,
			std::string kind,
            RtpParameters &rtpParameters
		//}
	)
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		auto transport = broadcaster->data.transports[transportId];

		if (!transport)
			MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());

        ProducerOptions options;// = {
            options.kind = kind;
            options.rtpParameters = rtpParameters;
        //};
        auto producer =
			 transport->produce(options);

		// Store it.
		broadcaster->data.producers[producer->id()]= producer;

		// Set Producer events.
		// producer->on("score",[&]() //, (score) =>
		// {
		// 	MS_lOGD(
		// 		"broadcaster producer "score" event [producerId:%s, score:%o]",
		// 		producer->id(), score);
		// });

		producer->on("videoorientationchange",[&]( int videoOrientation ) //, (videoOrientation) =>
		{
            //auto videoOrientation = e.value().get<int>();
			MS_lOGD(
				"broadcaster producer videoorientationchange event [producerId:%s, videoOrientation:%o]",
				producer->id().c_str(), videoOrientation);
		});

		// Optimization: Create a server-side Consumer for each Peer.
		for (auto  peer :this->_getJoinedPeers())
		{
			this->_createConsumer(
				
					/*consumerPeer :*/ peer,
					/*producerPeer :*/ broadcaster,
					producer
				);
            
            if(this->dvr) {
                
                bool hasVideo = false;
                bool hasAudio = false;
                for (auto &kv : peer->data.producers) {
                    auto producerPeer = kv.second;
                    if(producerPeer->kind() == "video") {
                        hasVideo = true;
                    }
                    if(producerPeer->kind() == "audio") {
                        hasAudio = true;
                    }
                }
                if(hasVideo && hasAudio) {
                    //mcuPublish(this->_mediasoupRouter, peer);
                    transfmt.startRecord(this->_mediasoupRouter, peer, producer,broadcasterId);
                }
            }
		}

		// Add into the audioLevelObserver.
		if (producer->kind() == "audio")
		{
            json options = {
                {"producerId",producer->id()}
            };
			this->_audioLevelObserver->addProducer(options);
		}
        
		return { 
      {"id", producer->id()} 
    };
	}

	/**
	 * Create a mediasoup Consumer associated to a Broadcaster.
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} transportId
	 * @type {String} producerId
	 */
	json createBroadcasterConsumer(
		//{
			std::string broadcasterId,
			std::string transportId,
			std::string producerId
		//}
	)
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		if (!broadcaster->data.rtpCapabilities)
			MS_THROW_lOG("broadcaster does not have rtpCapabilities");

		auto transport = broadcaster->data.transports[transportId];

		if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());
    ConsumerOptions options;
    options.producerId = producerId;
    options.rtpCapabilities = broadcaster->data.rtpCapabilities;
		auto  consumer =  transport->consume(options);

		// Store it.
		broadcaster->data.consumers[consumer->id()]=consumer;

		// Set Consumer events.
		consumer->on("transportclose",[&]()
		{
			// Remove from its map.
			broadcaster->data.consumers.erase(consumer->id());
		});

		consumer->on("producerclose",[&]()
		{
			// Remove from its map.
			broadcaster->data.consumers.erase(consumer->id());
		});
//json j = {{"foo", 1}, {"bar", 2}};
		return {
			{"id"         , consumer->id()},
			{"producerId" , producerId},
			{"kind"       , consumer->kind()},
			{"rtpParameters", consumer->rtpParameters()},
			{"type"          , consumer->type()}
		};
	}

	/**
	 * Create a mediasoup DataConsumer associated to a Broadcaster.
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} transportId
	 * @type {String} dataProducerId
	 */
	json createBroadcasterDataConsumer(
		//{
            std::string broadcasterId,
			std::string transportId,
			std::string dataProducerId
		//}
	)
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		if (!broadcaster->data.rtpCapabilities)
			MS_THROW_lOG("broadcaster does not have rtpCapabilities");

		auto transport = broadcaster->data.transports[transportId];

		if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());

        DataConsumerOptions options;
        options.dataProducerId = dataProducerId;
		auto dataConsumer =  transport->consumeData(options);

		// Store it.
		broadcaster->data.dataConsumers[dataConsumer->id()] =  dataConsumer;

		// Set Consumer events.
        dataConsumer->on("transportclose",[&]()
		{
			// Remove from its map.
			broadcaster->data.dataConsumers.erase(dataConsumer->id());
		});

        dataConsumer->on("dataproducerclose",[&]()
		{
			// Remove from its map.
			broadcaster->data.dataConsumers.erase(dataConsumer->id());
		});

		return {{
            {"id",  dataConsumer->id()}
		}};
	}

	/**
	 * Create a mediasoup DataProducer associated to a Broadcaster.
	 *
	 * @async
	 *
	 * @type {String} broadcasterId
	 * @type {String} transportId
	 */
	json createBroadcasterDataProducer(
	//	{
			std::string broadcasterId,
			std::string transportId,
			std::string label,
			std::string protocol,
      SctpStreamParameters &sctpStreamParameters,
			json appData
	//	}
	)
	{
		auto  broadcaster = this->_broadcasters[broadcasterId];

		if (!broadcaster)
			MS_THROW_lOG("broadcaster with id broadcasterId=%s does not exist",broadcasterId.c_str());

		// if (!broadcaster->data.sctpCapabilities)
		// 	MS_THROW_lOG("broadcaster does not have sctpCapabilities");

		auto transport = broadcaster->data.transports[transportId];

		if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());
        DataProducerOptions option;
        option.sctpStreamParameters = sctpStreamParameters,
        option.label = label;
        option.protocol = protocol;
        option._appData = appData;
		auto dataProducer =  transport->produceData(option);

		// Store it.
		broadcaster->data.dataProducers[dataProducer->id()] = dataProducer;

		// Set Consumer events.
		dataProducer->on("transportclose",[&]( const event::event_t<json>& e )
		{
			// Remove from its map.
			broadcaster->data.dataProducers.erase(dataProducer->id());
		});

		// // Optimization: Create a server-side Consumer for each Peer.
		// for (auto  peer :this->_getJoinedPeers())
		// {
		// 	this->_createDataConsumer(
		// 		{
		// 			dataConsumerPeer : peer,
		// 			dataProducerPeer : broadcaster,
		// 			dataProducer: dataProducer
		// 		});
		// }

		return {
			{"id" , dataProducer->id()}
		};
	}
    /**
     * Delete a Broadcaster.
     *
     * @type {String} broadcasterId
     */
    void deleteBridge( std::string &bridgeId)
    {
        auto  bridge = this->_bridges[bridgeId];

        if (!bridge)
            MS_THROW_lOG("broadcaster with id bridgeId=%s does not exist",bridgeId.c_str());

        for (auto kv : bridge->data.transports)
        {
            //auto transportId        = kv.first;
            auto transport   = kv.second;
            transport->close();
        }

        this->_bridges.erase(bridgeId);

        for (auto  peer :this->_getJoinedPeers())
        {
            peer->notify("peerClosed", { {"peerId", bridgeId }});
        }
    }
    std::string getBridgeRoomId(std::string &bridgeId) {
        auto  bridge = this->_bridges[bridgeId];
        return bridge->data.id;
    }
    std::string getBridgeTransportId(std::string &bridgeId) {
        auto  bridge = this->_bridges[bridgeId];
        return bridge->data.id;
    }
    std::shared_ptr<Transport> getBridgeTransport(std::string &bridgeId) {
        auto  bridge = this->_bridges[bridgeId];
        return bridge->data.transports[bridge->data.id];
    }
   /**
     * Create a mediasoup Transport associated to a Broadcaster. It can be a
     * PlainTransport or a WebRtctransport->
     *
     * @async
     *
     * @type {String} bridgeId
     * @type {String} type - Can be "plain" (PlainTransport) or "webrtc"
     *   (WebRtcTransport).
     * @type {Boolean} [rtcpMux=false] - Just for PlainTransport, use RTCP mux.
     * @type {Boolean} [comedia=true] - Just for PlainTransport, enable remote IP:port
     *   autodetection.
     * @type {Object} [sctpCapabilities] - SCTP capabilities
     */
    json createBridgeTransport(
        
            std::string  bridgeId,
            std::string type,
            bool rtcpMux,// = false,
            bool comedia,// = true,
            SctpCapabilities &sctpCapabilities
        )
    {
        auto  bridge = this->_bridges[bridgeId];

        if (!bridge)
            MS_THROW_lOG("bridge with id bridgeId=%s does not exist",bridgeId.c_str());

        if (true)
        {
            if(type == "webrtc")
            {
                json webRtcTransportOptions =
                {
                    config.mediasoup.webRtcTransportOptions,
                    {"enableSctp"     , (sctpCapabilities.numStreams.OS != 0)},
                        {"numSctpStreams" , sctpCapabilities.numStreams},
                    {"producing" , true},
                    {"consuming" , true}
                };
                WebRtcTransportOptions options = webRtcTransportOptions;
                auto transport =  this->_mediasoupRouter->createWebRtcTransport(options);

                // Store it.
                bridge->data.transports[transport->id()]= transport;

                return {
                    {"id"             , transport->id()},
                    {"iceParameters"  , transport->iceParameters()},
                    {"iceCandidates"  , transport->iceCandidates()},
                    {"dtlsParameters" , transport->dtlsParameters()},
                    {"sctpParameters" , transport->sctpParameters()}
                };
            }else
            if(type == "plain")
            {
                json plainTransportOptions =
                {
                    config.mediasoup.plainTransportOptions,
                    {"rtcpMux" , rtcpMux},
                    {"comedia" , comedia}
                };
                PlainTransportOptions options = plainTransportOptions;
                auto transport =  this->_mediasoupRouter->createPlainTransport(options);

                // Store it.
                bridge->data.transports[transport->id()]= transport;

                return {
                    {"id"       , transport->id()},
                    {"ip"       , transport->tuple().localIp},
                    {"port"     , transport->tuple().localPort},
                    {"rtcpPort" , transport->rtcpTuple().localPort}
                };
            } else
            {
                MS_THROW_lOG("invalid type");
            }
        }
    }
    std::vector<std::shared_ptr<Producer>> getProducersFromBridge(std::string &bridgeId) {
        auto  bridge = this->_bridges[bridgeId];
        if (!bridge)
            MS_THROW_lOG("bridge with id bridgeId=%s does not exist",bridgeId.c_str());
        //return bridge->data.producers;
        std::vector<std::shared_ptr<Producer>> producers;
        for (auto &kv : bridge->data.producers)
        {
            auto &producer = kv.second;
            producers.push_back(producer);
        }
        return producers;
    }
/**
     * Create a mediasoup Producer associated to a Broadcaster.
     *
     * @async
     *
     * @type {String} bridgeId
     * @type {String} transportId
     * @type {String} kind - "audio" or "video" kind for the producer->
     * @type {RTCRtpParameters} rtpParameters - RTP parameters for the producer->
     */
    json createBridgeProducer(
        //{
            std::string &bridgeId,
            std::string &transportId,
            std::string &kind,
            RtpParameters &rtpParameters
        //}
    )
    {
        auto  bridge = this->_bridges[bridgeId];

        if (!bridge)
            MS_THROW_lOG("bridge with id bridgeId=%s does not exist",bridgeId.c_str());

        auto transport = bridge->data.transports[transportId];

        if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());

        ProducerOptions options;// = {
            options.kind = kind;
            options.rtpParameters = rtpParameters;
        //};
        auto producer =
             transport->produce(options);

        // Store it.
        bridge->data.producers[producer->id()]= producer;

        // Set Producer events.
        // producer->on("score",[&]( const event::event_t<json>& e ) //, (score) =>
        // {
        //     MS_lOGD(
        //         "broadcaster producer "score" event [producerId:%s, score:%o]",
        //         producer->id(), score);
        // });

        producer->on("videoorientationchange",[&]( int videoOrientation ) //, (videoOrientation) =>
        {
            //auto videoOrientation = e.value().get<int>();
            MS_lOGD(
                "broadcaster producer videoorientationchange event [producerId:%s, videoOrientation:%o]",
                producer->id().c_str(), videoOrientation);
        });

        // Optimization: Create a server-side Consumer for each Peer.
        for (auto  peer :this->_getJoinedPeers())
        {
            this->_createConsumer(
                
                    /*consumerPeer :*/ peer,
                    /*producerPeer :*/ bridge,
                    producer
                );
        
        }

        // Add into the audioLevelObserver.
        if (producer->kind() == "audio")
        {
            json options = {
                {"producerId",producer->id()}
            };
            this->_audioLevelObserver->addProducer(options);
        }
        
        return {
      {"id", producer->id()}
    };
    }

    /**
     * Create a mediasoup Consumer associated to a Broadcaster.
     *
     * @async
     *
     * @type {String} bridgeId
     * @type {String} transportId
     * @type {String} producerId
     */
    json createBridgeConsumer(
        //{
            std::string &bridgeId,
            std::string &transportId,
            std::string &producerId
        //}
    )
    {
        auto  bridge = this->_bridges[bridgeId];

        if (!bridge)
            MS_THROW_lOG("bridge with id bridgeId=%s does not exist",bridgeId.c_str());

        if (!bridge->data.rtpCapabilities)
            MS_THROW_lOG("bridge does not have rtpCapabilities");

        auto transport = bridge->data.transports[transportId];

        if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());
        ConsumerOptions options;
        options.producerId = producerId;
        options.rtpCapabilities = bridge->data.rtpCapabilities;
        auto  consumer =  transport->consume(options);

        // Store it.
        bridge->data.consumers[consumer->id()]=consumer;

        // Set Consumer events.
        consumer->on("transportclose",[&]( const event::event_t<json>& e )
        {
            // Remove from its map.
            bridge->data.consumers.erase(consumer->id());
        });

        consumer->on("producerclose",[&]( const event::event_t<json>& e )
        {
            // Remove from its map.
            bridge->data.consumers.erase(consumer->id());
        });
//json j = {{"foo", 1}, {"bar", 2}};
        return {
            {"id"         , consumer->id()},
            {"producerId" , producerId},
            {"kind"       , consumer->kind()},
            {"rtpParameters", consumer->rtpParameters()},
            {"type"          , consumer->type()}
        };
    }
/**
     * Connect a Bridge mediasoup WebRtctransport->
     *
     * @async
     *
     * @type {String} bridgeId
     * @type {String} transportId
     * @type {RTCDtlsParameters} dtlsParameters - Remote DTLS parameters.
     */
    void connectBridgeTransport(
        //{
                                std::string &bridgeId,
                                std::string &transportId,
                                DtlsParameters &dtlsParameters
        //}
    )
    {
        auto  bridge = this->_bridges[bridgeId];

        if (!bridge)
            MS_THROW_lOG("bridge with id bridgeId=%s does not exist",bridgeId.c_str());

        auto transport = bridge->data.transports[transportId];

        if (!transport)
            MS_THROW_lOG("transport with id transportId=%s does not exist",transportId.c_str());

        /*
        if (transport->constructor.name != "WebRtcTransport")
        {
            MS_THROW_lOG(
                "transport with id transportId=%s is not a WebRtcTransport",transportId.c_str());
        }*/
        json options = { {"dtlsParameters",dtlsParameters} };
        transport->connect(options);
    }
	void _handleAudioLevelObserver()
	{
		this->_audioLevelObserver->on("volumes",[&]( int volumes,std::shared_ptr<Producer> producer,int volume) //, (volumes) =>
		{
      // auto volumes = e.value().get<int>();
			//const { producer, volume } = volumes[0];
     // auto & producer = volumes[0]["producer"];
     // auto & volume = volumes[0]["volume"];
			// MS_lOGD(
			// 	"audioLevelObserver "volumes" event [producerId:%s, volume:%s]",
			// 	producer->id(), volume);

			// Notify all Peers.
			for (auto  peer :this->_getJoinedPeers())
			{
				peer->notify(
					"activeSpeaker",
					{
						{"peerId" , producer->appData()["peerId"]},
						{"volume" , volume}
					});
			}
		});

		this->_audioLevelObserver->on("silence",[&]( const event::event_t<json>& e )
		{
			// MS_lOGD("audioLevelObserver "silence" event");

			// Notify all Peers.
			for (auto  peer :this->_getJoinedPeers())
			{
				peer->notify("activeSpeaker", {{ "peerId", "" }});
			}
		});
	}

	/**
	 * Handle protoo requests from browsers.
	 *
	 * @async
	 */

	void _handleProtooRequest( std::shared_ptr<Peer> &peer, json &request, std::function<void(json data)> const& accept, std::function<void(int errorCode, std::string errorReason)> const& reject)
	{
        std::string method = request["method"];
		//switch (request.method)
        MS_lOGD("_handleProtooRequest request data = %s",request["data"].dump().c_str());
        if(true)
		{
			if(method == "getRouterRtpCapabilities")
			{
			    json rtpCapabilities = this->_mediasoupRouter->rtpCapabilities();
			    MS_lOGE("_handleProtooRequest getRouterRtpCapabilities = %s",rtpCapabilities.dump(4).c_str());
				accept(rtpCapabilities);

				//break;
			}else
			if(method ==  "join")
			{
				// Ensure the Peer is not already joined.
				if (peer->data.joined)
                {
                    MS_THROW_lOG("Peer already joined");
                   // accept(json({}));
                   // return;
                }
                auto data = request["data"];
                auto displayName = data["displayName"];
                auto device = data["device"];
                auto rtpCapabilities = data["rtpCapabilities"];
                auto sctpCapabilities = data["sctpCapabilities"];
				MS_lOGD("join rtpCapabilities=%s",rtpCapabilities.dump(4).c_str());

				// Store client data into the protoo Peer data object.
				peer->data.joined = true;
				peer->data.displayName = displayName;
				peer->data.device = device;
				peer->data.rtpCapabilities = rtpCapabilities;
				peer->data.sctpCapabilities = sctpCapabilities;

				// Tell the new Peer about already joined Peers.
				// And also create Consumers for existing Producers.

				// const joinedPeers =
				// [
				// 	...this->_getJoinedPeers(),
				// 	...this->_broadcasters,
				// 	...this->_bridges
				// ];
                std::unordered_map<std::string,std::shared_ptr<Peer>> joinedPeers;
                std::unordered_map<std::string, shared_ptr<Peer>> joinPeers = this->_getJoinedPeersMap();
                joinedPeers.insert(joinPeers.begin(), joinPeers.end());
                joinedPeers.insert(this->_broadcasters.begin(), this->_broadcasters.end());
                joinedPeers.insert(this->_bridges.begin(), this->_bridges.end());

                        // Reply now the request with the list of joined peers (all but the new one).
                auto it = joinedPeers.find(peer->id);
                if ( it != joinedPeers.end())
                {
                    joinedPeers.erase (it);
                }

                json peerInfos = json::array();
                for( const auto& kv  : joinedPeers)
                {
                    auto    peerId      = kv.first;
                    auto  &joinedPeer    = kv.second;

                    peerInfos.push_back({
                        {"id"          , joinedPeer->id},
                        {"displayName" , joinedPeer->data.displayName},
                        {"device"      , joinedPeer->data.device}
                    });
                }
				// const peerInfos = joinedPeers
				// 	.filter((joinedPeer) => joinedPeer->id != peer->id)
				// 	.map((joinedPeer) => ({
				// 		id          : joinedPeer->id(),
				// 		displayName : joinedPeer->data.displayName,
				// 		device      : joinedPeer->data.device
				// 	}));

				accept({{ "peers", peerInfos }});

				// Mark the new Peer as joined.
				peer->data.joined = true;

				for (auto &kv : joinedPeers)
				{
                    auto &joinedPeer = kv.second;
					// Create Consumers for existing Producers.
					for (auto &kv1 : joinedPeer->data.producers)
					{
                        auto &producer = kv1.second;
						this->_createConsumer(
							
								/*consumerPeer :*/ peer,
								/*producerPeer :*/ joinedPeer,
								producer
							);
					}

					// Create DataConsumers for existing DataProducers.
					for (auto &kv2 : joinedPeer->data.dataProducers)
					{
                        auto &dataProducer = kv2.second;
						if (dataProducer->label() == "bot")
							continue;

						this->_createDataConsumer(
								/*dataConsumerPeer :*/ peer,
								/*dataProducerPeer :*/ joinedPeer,
								dataProducer
							);
					}
				}

				// Create DataConsumers for bot dataProducer->
				this->_createDataConsumer(
					
						/*dataConsumerPeer :*/ peer,
						/*dataProducerPeer :*/ nullptr,
						/*dataProducer     :*/ nullptr//this->_bot.dataProducer
					);

				// Notify the new Peer to all other Peers.
				for (auto  &otherPeer : this->_getJoinedPeers( peer ))
				{
				    if(!otherPeer)
                    {
				        continue;
                    }
					otherPeer->notify(
						"newPeer",
						{
                            {"id"          , peer->id},
                            {"displayName" , peer->data.displayName},
                            {"device"      , peer->data.device}
						});
						
				}

				//break;
			}else
			if(method ==  "createWebRtcTransport")
			{
				// NOTE: Don"t require that the Peer is joined here, so the client can
				// initiate mediasoup Transports and be ready when he later joins.

				// const {
				// 	forceTcp,
				// 	producing,
				// 	consuming,
				// 	sctpCapabilities
				// } = request.data;
                auto data = request["data"];
                bool forceTcp = data["forceTcp"];
                bool producing = data["producing"];
                bool consuming = data["consuming"];
                json sctpCapabilities = data["sctpCapabilities"];
                MS_lOGD("createWebRtcTransport request.data=%s",data.dump().c_str());
               
                json jwebRtcTransportOptions = config.mediasoup.webRtcTransportOptions;
                jwebRtcTransportOptions["appData"] = { {"producing",producing}, {"consuming",consuming }};
                if(sctpCapabilities.is_object() && !sctpCapabilities["numStreams"].is_null()){
                    jwebRtcTransportOptions["enableSctp"] = true;
                    jwebRtcTransportOptions["numSctpStreams"] = sctpCapabilities["numStreams"];
                }else{
                    jwebRtcTransportOptions["enableSctp"] = false;//!sctpCapabilities.dump().empty();
                    jwebRtcTransportOptions["numSctpStreams"] = json::object();
                }
               
            
				// const webRtcTransportOptions =
				// {
				// 	...config.mediasoup.webRtcTransportOptions,
				// 	enableSctp     : Boolean(sctpCapabilities),
				// 	numSctpStreams : (sctpCapabilities || {}).numStreams,
				// 	appData        : { producing, consuming }
				// };


                WebRtcTransportOptions webRtcTransportOptions = jwebRtcTransportOptions;
				if (forceTcp)
				{
					webRtcTransportOptions.enableUdp = false;
					webRtcTransportOptions.enableTcp = true;
				}

				auto transport =  this->_mediasoupRouter->createWebRtcTransport(webRtcTransportOptions);

				transport->on("sctpstatechange", [&]( std::string sctpState ) //(sctpState) =>
				{
					MS_lOGD("WebRtcTransport sctpstatechange event [sctpState:%s]", sctpState.c_str());
				});

				transport->on("dtlsstatechange", [&]( std::string dtlsState ) //(dtlsState) =>
				{
                    
					if (dtlsState == "failed" || dtlsState == "closed")
						MS_lOGW("WebRtcTransport dtlsstatechange event [dtlsState:%s]", dtlsState.c_str());
				});

				// NOTE: For testing.
				//  transport->enableTraceEvent([ "probation", "bwe" ]);
                std::vector<std::string> types;
                types.push_back("probation");
                types.push_back("bwe");
				 transport->enableTraceEvent(types);

				transport->on("trace", [&]( TransportTraceEventData & trace ) //(trace) =>
				{
                    
					MS_lOGD(
						"transport trace event [transportId:%s, trace.type:%s, trace]",
						transport->id().c_str(), trace.type.c_str());

					if (trace.type == "bwe" && trace.direction == "out")
					{
						peer->notify(
							"downlinkBwe",
							{
                                {"desiredBitrate"          , trace.info["desiredBitrate"]},
                                {"effectiveDesiredBitrate" , trace.info["effectiveDesiredBitrate"]},
                                {"availableBitrate"        , trace.info["availableBitrate"]}
							});
							
					}
				});

				// Store the WebRtcTransport into the protoo Peer data Object.
				peer->data.transports[transport->id()]= transport;
				json jiceCandidates=transport->iceCandidates();
                MS_lOGD("iceCandidates=%s",jiceCandidates.dump(4).c_str());
                json jdtlsParameters=transport->dtlsParameters();
                MS_lOGD("dtlsParameters=%s",jdtlsParameters.dump(4).c_str());
                if(transport->sctpParameters().port == 0)
                {
                    json sendata = {
                            {"id"             , transport->id()},
                            {"iceParameters"  , transport->iceParameters()},
                            {"iceCandidates"  , transport->iceCandidates()},
                            {"dtlsParameters" , transport->dtlsParameters()}

                    };
                    MS_lOGD("sendata=%s",sendata.dump(4).c_str());
                    accept(sendata
                    );
                } else {
                    json sendata = {
                            {"id"             , transport->id()},
                            {"iceParameters"  , transport->iceParameters()},
                            {"iceCandidates"  , transport->iceCandidates()},
                            {"dtlsParameters" , transport->dtlsParameters()},
                            {"sctpParameters" , transport->sctpParameters()}
                    };
                    MS_lOGD("sendata=%s",sendata.dump(4).c_str());
                    accept(sendata
                    );
                }


				//const { maxIncomingBitrate } = config.mediasoup.webRtcTransportOptions;
                auto &maxIncomingBitrate = config.mediasoup.webRtcTransportOptions["maxIncomingBitrate"];
				// If set, apply max incoming bitrate limit.
				if (maxIncomingBitrate != 0)
				{
					try {
                        transport->setMaxIncomingBitrate(maxIncomingBitrate);
                        
                    }
					catch (const char *error) {
                        
                    }
				}

				//break;
			}else
			if(method ==  "connectWebRtcTransport")
			{
                auto data = request["data"];
                auto transportId = data["transportId"];
                auto dtlsParameters = data["dtlsParameters"];
				auto &transport = peer->data.transports[transportId];

				if (!transport)
					MS_THROW_lOG("transport with id transportId=%s not found",transportId.dump().c_str());

				 json newdata= json::object();
                 newdata["dtlsParameters"] = dtlsParameters;
                 MS_lOGD("connectWebRtcTransport dtlsParameters=%s",newdata.dump(4).c_str());
				 transport->connect(newdata);

				accept(json({}));

				//break;
			}else
			if(method ==  "restartIce")
			{
                auto data = request["data"];
                auto & transportId = data["transportId"];
				auto &transport = peer->data.transports[transportId];

				if (!transport)
                {
                    MS_THROW_lOG("transport with id transportId=%s not found",transportId.dump().c_str());
                    accept(json({}));
                    return;
                }

				auto iceParameters =  transport->restartIce();

				accept(iceParameters);

				
			}else
			if(method ==  "produce")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
                {
                    MS_THROW_lOG("Peer not yet joined");
                    accept(json({}));
                    return ;
                }


                auto data = request["data"];
                auto & transportId = data["transportId"];
                auto & kind = data["kind"];
                auto & rtpParameters = data["rtpParameters"];
				auto appData  = data["appData"];
				auto & paused  = data["paused"];
				auto &transport = peer->data.transports[transportId];
                MS_lOGD("produce rtpParameters=%s",rtpParameters.dump(4).c_str());
				if (!transport)
                {
                    MS_THROW_lOG("transport with id transportId=%s not found",transportId.dump().c_str());
                    return;
                }


				// Add peerId into appData to later get the associated Peer during
				// the "loudest" event of the audioLevelObserver.
				//appData = { ...appData, peerId: peer->id };
                appData["peerId"] = peer->id;
                ProducerOptions options;// = {
                    options.kind = kind;
                    options.rtpParameters = rtpParameters;
                    options.appData = appData;
                    options.keyFrameRequestDelay = 5000;
                //};
                json jrtpParameters = options.rtpParameters;
                MS_lOGD("produce jrtpParameters=%s",jrtpParameters.dump(4).c_str());
				auto producer =  transport->produce(options);

				// Store the Producer into the protoo Peer data Object.
				peer->data.producers[producer->id()]= producer;

				// Set Producer events.
				producer->on("score", [&]( int score) //(score) =>
				{
                 
					// MS_lOGD(
					// 	"producer "score" event [producerId:%s, score:%o]",
					// 	producer->id(), score);

                    peer->notify("producerScore", { {"producerId", producer->id()},{ "score",score} });
						
				});

				producer->on("videoorientationchange",[&]( int videoOrientation ) // (videoOrientation) =>
				{
                   
					MS_lOGD(
						"producer videoorientationchange event [producerId:%s, videoOrientation:%o]",
						producer->id().c_str(), videoOrientation);
				});

				// NOTE: For testing.
				//  producer->enableTraceEvent([ "rtp", "keyframe", "nack", "pli", "fir" ]);
				//  producer->enableTraceEvent([ "pli", "fir" ]);
				//  producer->enableTraceEvent([ "keyframe" ]);

				producer->on("trace", [&](TransportTraceEventData & trace) //(trace) =>
				{
                   
					MS_lOGD(
						"producer trace event [producerId:%s, trace.type:%s, trace]",
						producer->id().c_str(), trace.type.c_str());
				});

                accept({ {"id", producer->id() } });

				// auto joinedPeers =
				// 	[
				// 		...this->_getJoinedPeers(peer),
				// 		...this->_broadcasters
				// 	];
                  std::unordered_map<std::string,std::shared_ptr<Peer>> joinedPeers;
                  std::unordered_map<std::string, shared_ptr<Peer>> joinPeers = this->_getJoinedPeersMap(peer);
                  joinedPeers.insert(joinPeers.begin(), joinPeers.end());
                  joinedPeers.insert(this->_broadcasters.begin(), this->_broadcasters.end());

				// Optimization: Create a server-side Consumer for each Peer.
				if(kind == "audio") {
					auto tt=0;
					tt=1;

				} else {

				}

				for (auto  &kv : joinedPeers)
				{
                    auto otherPeer = kv.second;
					if(otherPeer->id == peer->id) {
						continue;
					}
					this->_createConsumer(
						
							/*consumerPeer :*/ otherPeer,
							/*producerPeer :*/ peer,
							producer
						);

				}
				// 这块需要单独处理,因为需要采集全音频和视频consumer,但是js的设置好像有点延迟,音频设置consumer后但是外层变量没有显示,所以只能先放到这个函数里实现
				for (auto  &kv : this->_bridges)
				{
                    auto otherPeer = kv.second;
					if(otherPeer->id == peer->id) {
						continue;
					}
					this->_createBridgeConsumer(
						
                            /*consumerPeer :*/ otherPeer,
                            /*producerPeer :*/ peer,
							producer
						);

				}
				if( paused == true) {
					 producer->pause();
				}
				// Add into the audioLevelObserver.
				if (producer->kind() == "audio")
				{
                    this->_audioLevelObserver->addProducer(producer->id());
						
				}
				bool hasVideo = false;
				bool hasAudio = false;
				for (auto &kv : peer->data.producers) {
                    auto &producer = kv.second;
					if(producer->kind() == "video") {
						hasVideo = true;
					}
					if(producer->kind() == "audio") {
						hasAudio = true;
					}
				}
				//process bridge send offer
				if(hasVideo && hasAudio) {
					// Optimization: Create a server-side Consumer for each Peer.
					//for (auto  otherPeer : this->_bridges)
					//{
					//	this->sendSdpOfferToBridge(otherPeer->id(),peer->id());
					//}

				}
				if(this->dvr) {
				  if(hasVideo && hasAudio) {
					//mcuPublish(this->_mediasoupRouter, peer);
					//startRecord(this->_mediasoupRouter, peer, producer,this->_roomid());
				  }
				}
    
				//break;
			}else
			if(method ==  "closeProducer")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & producerId = data["producerId"];
				auto & producer = peer->data.producers[producerId];

				if (!producer)
                {
                    MS_THROW_lOG("producer with id producerId=%s not found",producerId.dump().c_str());
                    return;
                }
        
                bool hasVideo = false;
                bool hasAudio = false;
                if(producer->kind() == "video") {
                    hasVideo = true;
                }
                if(producer->kind() == "audio") {
                    hasAudio = true;
                }
                        producer->close();

                        // Remove from its map.
                        peer->data.producers.erase(producer->id());

                accept(json({}));
                if(this->dvr) {
                  if(hasAudio) {
                      transfmt.stopRecord(peer->id);
                  }
                 
                }
				//break;
			}else
			if(method ==  "pauseProducer")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & producerId = data["producerId"];
				auto &producer = peer->data.producers[producerId];

				if (!producer)
					MS_THROW_lOG("producer with id producerId=%s not found",producerId.dump().c_str());

				 producer->pause();

				accept(json({}));

				//break;
			}else
			if(method ==  "resumeProducer")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & producerId = data["producerId"];
				auto &producer = peer->data.producers[producerId];

				if (!producer)
                {
                    MS_THROW_lOG("producer with id producerId=%s not found",producerId.dump().c_str());
                    accept(json({}));
                    return;
                }


				 producer->resume();

				accept(json({}));

				//break;
			}else
			if(method ==  "pauseConsumer")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & consumerId = data["consumerId"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
                {
                    MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());
                    accept(json({}));
                    return;
                }

				 consumer->pause();

				accept(json({}));

				//break;
			}else
			if(method ==  "resumeConsumer")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & consumerId = data["consumerId"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
                {
                    MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());
                    accept(json({}));
                    return;
                }

				 consumer->resume();

				accept(json({}));

				//break;
			}else
			if(method ==  "setConsumerPreferredLayers")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
                auto & consumerId  = data["consumerId"];
                auto & spatialLayer = data["spatialLayer"];
                auto & temporalLayer = data["temporalLayer"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
                {
                    MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());
                    accept(json({}));
                    return;
                }

				 consumer->setPreferredLayers(spatialLayer, temporalLayer);

				accept(json({}));

				//break;
			}else
			if(method ==  "setConsumerPriority")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");

                auto data = request["data"];
                auto & consumerId  = data["consumerId"];
                auto & priority = data["priority"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
                {
                    MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());
                    accept(json({}));
                    return;
                }

				 consumer->setPriority(priority);

				accept(json({}));

				//break;
			}else
			if(method ==  "requestConsumerKeyFrame")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto & consumerId = data["consumerId"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
                {
                    MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());
                    accept(json({}));
                    return;
                }

				 consumer->requestKeyFrame();

				accept(json({}));

				//break;
			}else
			if(method ==  "produceData")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");

				// const {
				// 	transportid(),
				// 	sctpStreamParameters,
				// 	label,
				// 	protocol,
				// 	appData
				// } = request.data;
                auto data = request["data"];
                auto & transportId = data["transportId"];
                auto & sctpStreamParameters = data["sctpStreamParameters"];
                auto & label = data["label"];
                auto & protocol = data["protocol"];
                auto & appData = data["appData"];

				auto &transport = peer->data.transports[transportId];

				if (!transport)
                {
                    MS_THROW_lOG("transport with id transportId=%s not found",transportId.dump().c_str());
                    accept(json({}));
                    return;
                }
                DataProducerOptions option;
                     option.sctpStreamParameters = sctpStreamParameters,
                     option.label = label;
                     option.protocol = protocol;
                     option._appData = appData;
				auto dataProducer =  transport->produceData(option);

				// Store the Producer into the protoo Peer data Object.
				peer->data.dataProducers[dataProducer->id()]= dataProducer;

                accept({ {"id", dataProducer->id()} });

				//if (true)
				if(data["label"]!=nullptr) 
				{
					if(dataProducer->label() == "chat")
					{
						// Create a server-side DataConsumer for each Peer.
						for (auto  otherPeer : this->_getJoinedPeers( peer ))
						{
							this->_createDataConsumer(
								
									/*dataConsumerPeer :*/ otherPeer,
									/*dataProducerPeer :*/ peer,
									dataProducer
								);
						}

						//break;
					}else
					if(dataProducer->label() ==  "bot")
					{
						// Pass it to the bot.
//						this->_bot.handlePeerDataProducer(
//							{
//								dataProducerId : dataProducer->id(),
//								peer
//							});

					//	//break;
					}
				}

				//break;
			}else
			if(method ==  "changeDisplayName")
			{
				// Ensure the Peer is joined.
				if (!peer->data.joined)
					MS_THROW_lOG("Peer not yet joined");
                auto data = request["data"];
				auto displayName = data["displayName"];
				auto oldDisplayName = peer->data.displayName;

				// Store the display name into the custom data Object of the protoo
				// Peer.
				peer->data.displayName = displayName;

				// Notify other joined Peers.
				for (auto  &otherPeer : this->_getJoinedPeers( peer ))
				{
					otherPeer->notify(
						"peerDisplayNameChanged",
						{
                        {"peerId" , peer->id},
                        {"displayName",displayName},
                        {"oldDisplayName",oldDisplayName}
						});
						
				}

				accept(json({}));

				//break;
			}else
			if(method ==  "getTransportStats")
			{
                auto data = request["data"];
                auto transportId = data["transportId"];
				auto &transport = peer->data.transports[transportId];

				if (!transport)
					MS_THROW_lOG("transport with id transportId=%s not found",transportId.dump().c_str());

				auto stats =  transport->getStats();

				accept(stats);

				//break;
			}else
			if(method ==  "getProducerStats")
			{
                auto data = request["data"];
				auto & producerId = data["producerId"];
				auto &producer = peer->data.producers[producerId];

				if (!producer)
					MS_THROW_lOG("producer with id producerId=%s not found",producerId.dump().c_str());

				auto stats =  producer->getStats();

				accept(stats);

				//break;
			}else
			if(method ==  "getConsumerStats")
			{
                auto data = request["data"];
				auto & consumerId = data["consumerId"];
				auto  &consumer = peer->data.consumers[consumerId];

				if (!consumer)
					MS_THROW_lOG("consumer with id consumerId=%s not found",consumerId.dump().c_str());

				auto stats =  consumer->getStats();

				accept(stats);

				//break;
			}else
			if(method ==  "getDataProducerStats")
			{
                auto data = request["data"];
                auto & dataProducerId = data["dataProducerId"];
				auto &dataProducer = peer->data.dataProducers[dataProducerId];

				if (!dataProducer)
					MS_THROW_lOG("dataProducer with id dataProducerId=%s not found",dataProducerId.dump().c_str());

				auto stats =  dataProducer->getStats();

				accept(stats);

				//break;
			}else
			if(method ==  "getDataConsumerStats")
			{
                auto data = request["data"];
                auto & dataConsumerId = data["dataConsumerId"];
				auto &dataConsumer = peer->data.dataConsumers[dataConsumerId];

				if (!dataConsumer)
					MS_THROW_lOG("dataConsumer with id dataConsumerId=%s not found",dataConsumerId.dump().c_str());

				auto stats =  dataConsumer->getStats();

				accept(stats);

				//break;
			}else
			if(method ==  "applyNetworkThrottle")
			{
				auto DefaultUplink = 1000000;
				auto DefaultDownlink = 1000000;
				auto DefaultRtt = 0;

                auto data = request["data"];
                auto & uplink = data["uplink"];
                auto & downlink = data["downlink"];
                auto & rtt = data["rtt"];
                auto & secret = data["secret"];
				if (!secret)// || secret != process.env.NETWORK_THROTTLE_SECRET)
				{
					reject(403, "operation NOT allowed, modda fuckaa");

					return;
				}

//				try
//				{
//					 throttle.start(
//						{
//							up   : uplink || DefaultUplink,
//							down : downlink || DefaultDownlink,
//							rtt  : rtt || DefaultRtt
//						});
//
//					MS_lOGW(
//						"network throttle set [uplink:%s, downlink:%s, rtt:%s]",
//						uplink || DefaultUplink,
//						downlink || DefaultDownlink,
//						rtt || DefaultRtt);
//
//				accept(json({}));
//				}
//				catch (const char *error)
//				{
//					MS_lOGE("network throttle apply failed: %s", error);
//
//					reject(500, error.toString());
//				}

				//break;
			}else
			if(method ==  "resetNetworkThrottle")
			{
                auto data = request["data"];
                auto & secret = data["secret"];
				if (!secret)// || secret != process.env.NETWORK_THROTTLE_SECRET)
				{
					reject(403, "operation NOT allowed, modda fuckaa");

					return;
				}

//				try
//				{
//					 throttle.stop({});
//
//					MS_lOGW("network throttle stopped");
//
//					accept(json({}));
//				}
//				catch (const char *error)
//				{
//					MS_lOGE("network throttle stop failed: %s", error);
//
//					reject(500, error.toString());
//				}

				//break;
			}else
			{
				MS_lOGE("unknown request.method %s", method.c_str());

				reject(500, "unknown request.method request.method=%s");
			}
		}
	}

	/**
	 * Helper to get the list of joined protoo peers.
	 */
	std::vector<shared_ptr<Peer> > _getJoinedPeers(std::shared_ptr<Peer> excludePeer = nullptr)
	{
        std::vector<std::shared_ptr<Peer> > peerlist;
        for (const auto& kv : this->_peers)
        {
            auto peerId   = kv.first;
            auto peer   = kv.second;
            if(peer->data.joined && peer != excludePeer)
            {
                 peerlist.push_back(peer);
            }
             
        }
        return peerlist;
		//return this->_protooRoom->peers
		//	.filter((peer) => peer->data.joined && peer != excludePeer);
	}
	/**
	 * Helper to get the list of joined protoo peers.
	 */
    std::unordered_map<std::string,shared_ptr<Peer>> _getJoinedPeersMap(std::shared_ptr<Peer> excludePeer = nullptr)
	{
       std::unordered_map<std::string,shared_ptr<Peer> > peerMap;
        for (const auto& kv : this->_peers)
        {
            auto peerId   = kv.first;
            auto peer   = kv.second;
            if(peer->data.joined && peer != excludePeer)
            {
                peerMap.insert(kv);
            }
             
        }
        return peerMap;
		//return this->_protooRoom->peers
		//	.filter((peer) => peer->data.joined && peer != excludePeer);
	}

	/**
	 * Creates a mediasoup Consumer for the given mediasoup producer->
	 *
	 * @async
	 */
	void _createConsumer(std::shared_ptr<Peer> &consumerPeer, std::shared_ptr<Peer> &producerPeer, std::shared_ptr<Producer>  &producer )
	{
		// Optimization:
		// - Create the server-side Consumer in paused mode.
		// - Tell its Peer about it and wait for its response.
		// - Upon receipt of the response, resume the server-side consumer->
		// - If video, this will mean a single key frame requested by the
		//   server-side Consumer (when resuming it).
		// - If audio (or video), it will avoid that RTP packets are received by the
		//   remote endpoint *before* the Consumer is locally created in the endpoint
		//   (and before the local SDP O/A procedure ends). If that happens (RTP
		//   packets are received before the SDP O/A is done) the PeerConnection may
		//   fail to associate the RTP stream.

		// NOTE: Don"t create the Consumer if the remote Peer cannot consume it.
        RtpCapabilities rtpCapabilities = consumerPeer->data.rtpCapabilities;
		if (
			rtpCapabilities.codecs.size() ==0  ||
			!this->_mediasoupRouter->canConsume(
					producer->id(),
                    rtpCapabilities
				)
		)
		{
            MS_lOGW("_createConsumer() | Transport canConsume = false return");
			return;
		}

		// Must take the Transport the remote Peer is using for consuming.
//		auto transport = Array.from(consumerPeer.data.transports)
//			.find((t) => t.appData.consuming);

        std::shared_ptr<Transport> transport;
        for(auto &kv : consumerPeer->data.transports)
        {
            auto &t = kv.second;
            if(t->appData()["consuming"].get<bool>() == true) {
                transport = t;
                break;
            }
        }
		// This should not happen.
		if (!transport)
		{
			MS_lOGW("_createConsumer() | Transport for consuming not found");

			return;
		}

		// Create the Consumer in paused mode.
        std::shared_ptr<Consumer> consumer;
    
		try
		{
              ConsumerOptions options;
              options.producerId = producer->id();
              options.rtpCapabilities = consumerPeer->data.rtpCapabilities;
              options.paused          = true;
			consumer =  transport->consume(options);

			if (consumer == nullptr) { 
				MS_lOGD("create consumer return null ");
				return ;
			}
            MS_lOGD("consumerPeer->data.rtpCapabilities=%s",consumerPeer->data.rtpCapabilities.dump(4).c_str());
			json jrtpParameters=consumer->rtpParameters();
			MS_lOGD("consumer->rtpParameters()=%s",jrtpParameters.dump(4).c_str());
		}
		catch (const char *error)
		{
			MS_lOGW("_createConsumer() | transport->consume():%s", error);

			return;
		}

		// Store the Consumer into the protoo consumerPeer data Object.
		consumerPeer->data.consumers[consumer->id()] =  consumer;

		// Set Consumer events.
		consumer->on("transportclose",[&]( )
		{
			// Remove from its map.
			consumerPeer->data.consumers.erase(consumer->id());
		});

		consumer->on("producerclose",[&](  )
		{
			// Remove from its map.
			consumerPeer->data.consumers.erase(consumer->id());

            consumerPeer->notify("consumerClosed", { {"consumerId", consumer->id()} });
		});

		consumer->on("producerpause",[&]()
		{
            consumerPeer->notify("consumerPaused", { {"consumerId", consumer->id()} });
		});

		consumer->on("producerresume",[&](  )
		{
            consumerPeer->notify("consumerResumed", { {"consumerId", consumer->id()} });
		});

		consumer->on("score", [&]( int score ) //(score) =>
		{
           
			// MS_lOGD(
			// 	"consumer "score" event [consumerId:%s, score:%o]",
			// 	consumer->id(), score);
			
            consumerPeer->notify("consumerScore", {
              {"consumerId", consumer->id()},
              {"score",score}
              });
			

		});

		consumer->on("layerschange",[&]( json layers ) // (layers) =>
		{
      
			consumerPeer->notify(
				"consumerLayersChanged",
				{
					{"consumerId"    , consumer->id()},
					{"spatialLayer"  , layers["spatialLayer"]},
					{"temporalLayer" , layers["temporalLayer"]}
				});
		});

		// NOTE: For testing.
		//  consumer->enableTraceEvent([ "rtp", "keyframe", "nack", "pli", "fir" ]);
		//  consumer->enableTraceEvent([ "pli", "fir" ]);
		//  consumer->enableTraceEvent([ "keyframe" ]);

		consumer->on("trace",[&]( ConsumerTraceEventData & trace ) // (trace) =>
		{
            
			MS_lOGD(
				"consumer trace event [producerId:%s, trace.type:%s, trace]",
				consumer->id().c_str(), trace.type.c_str());
		});

		// Send a protoo request to the remote Peer with Consumer parameters.
		if(!consumerPeer->isHasRequest) {
			// consumer->resume();
			//return;
		}
		try
		{

			 consumerPeer->request(
				"newConsumer",
				{
                 {"peerId"     , producerPeer->id},
                 {"producerId"         , producer->id()},
                 {"id"         , consumer->id()},
                 {"kind"         , consumer->kind()},
                 {"rtpParameters"         , consumer->rtpParameters()},
                 {"type"         , consumer->type()},
                 {"appData", producer->appData()},
                 {"producerPaused", consumer->producerPaused()}
				});

			// Now that we got the positive response from the remote endpoint, resume
			// the Consumer so the remote endpoint will receive the a first RTP packet
			// of this new stream once its PeerConnection is already ready to process
			// and associate it.

			if(consumerPeer->isHasNotify) {
				// consumer->resume();
				//return;
			}
           
			consumerPeer->notify(
				"consumerScore",
				{
                    {"consumerId" , consumer->id()},
                    {"score"      , consumer->score()}
				});

			 consumer->resume();
		}
		catch (const char *error)
		{
			MS_lOGW("_createConsumer() | failed:%s", error);
		}
		return;
	}
	/**
	 * Creates a mediasoup Consumer for the given mediasoup producer->
	 *
	 * @async
	 */
	void _createBridgeConsumer( std::shared_ptr<Peer> & consumerPeer, std::shared_ptr<Peer> &producerPeer, std::shared_ptr<Producer>  &producer )
	{
		// Optimization:
		// - Create the server-side Consumer in paused mode.
		// - Tell its Peer about it and wait for its response.
		// - Upon receipt of the response, resume the server-side consumer->
		// - If video, this will mean a single key frame requested by the
		//   server-side Consumer (when resuming it).
		// - If audio (or video), it will avoid that RTP packets are received by the
		//   remote endpoint *before* the Consumer is locally created in the endpoint
		//   (and before the local SDP O/A procedure ends). If that happens (RTP
		//   packets are received before the SDP O/A is done) the PeerConnection may
		//   fail to associate the RTP stream.


        // NOTE: Don"t create the Consumer if the remote Peer cannot consume it.
        RtpCapabilities rtpCapabilities = consumerPeer->data.rtpCapabilities;
        if (
            //!consumerPeer->data.rtpCapabilities.count() !=0  ||
            !this->_mediasoupRouter->canConsume(
                    producer->id(),
                    rtpCapabilities
                )
        )
        {
            return;
        }

        // Must take the Transport the remote Peer is using for consuming.
//        auto transport = Array.from(consumerPeer.data.transports)
//            .find((t) => t.appData.consuming);

        std::shared_ptr<Transport> transport;
        for(auto &kv : consumerPeer->data.transports)
        {
            auto t = kv.second;
            if(t->appData()["consuming"].get<bool>() == true) {
                transport = t;
                break;
            }
        }
        // This should not happen.
        if (!transport)
        {
            MS_lOGW("_createConsumer() | Transport for consuming not found");

            return;
        }

        // Create the Consumer in paused mode.
        std::shared_ptr<Consumer> consumer;
    
        try
        {
              ConsumerOptions options;
              options.producerId = producer->id();
              options.rtpCapabilities = consumerPeer->data.rtpCapabilities;
              options.paused          = true;
            consumer =  transport->consume(options);
        }
        catch (const char *error)
        {
            MS_lOGW("_createConsumer() | transport->consume():%s", error);

            return;
        }

        // Store the Consumer into the protoo consumerPeer data Object.
        consumerPeer->data.consumers[consumer->id()] =  consumer;

        // Set Consumer events.
        consumer->on("transportclose",[&]( )
        {
            // Remove from its map.
            consumerPeer->data.consumers.erase(consumer->id());
        });

        consumer->on("producerclose",[&](  )
        {
            // Remove from its map.
            consumerPeer->data.consumers.erase(consumer->id());

            consumerPeer->notify("consumerClosed", { {"consumerId", consumer->id()} });
        });

        consumer->on("producerpause",[&]()
        {
            consumerPeer->notify("consumerPaused", { {"consumerId", consumer->id()} });
        });

        consumer->on("producerresume",[&](  )
        {
            consumerPeer->notify("consumerResumed", { {"consumerId", consumer->id()} });
        });

        consumer->on("score", [&]( int score ) //(score) =>
        {
           
            // MS_lOGD(
            //     "consumer "score" event [consumerId:%s, score:%o]",
            //     consumer->id(), score);
            
            consumerPeer->notify("consumerScore", {
              {"consumerId", consumer->id()},
              {"score",score}
              });
            

        });

        consumer->on("layerschange",[&]( json layers ) // (layers) =>
        {
      
            consumerPeer->notify(
                "consumerLayersChanged",
                {
                    {"consumerId"    , consumer->id()},
                    {"spatialLayer"  , layers["spatialLayer"]},
                    {"temporalLayer" , layers["temporalLayer"]}
                });
        });

        // NOTE: For testing.
        //  consumer->enableTraceEvent([ "rtp", "keyframe", "nack", "pli", "fir" ]);
        //  consumer->enableTraceEvent([ "pli", "fir" ]);
        //  consumer->enableTraceEvent([ "keyframe" ]);

        consumer->on("trace",[&]( ConsumerTraceEventData & trace ) // (trace) =>
        {
            
            MS_lOGD(
                "consumer trace event [producerId:%s, trace.type:%s, trace]",
                consumer->id().c_str(), trace.type.c_str());
        });

        // Send a protoo request to the remote Peer with Consumer parameters.
        if(!consumerPeer->isHasRequest) {
             consumer->resume();
            return;
        }
        try
        {
             consumerPeer->request(
                "newConsumer",
                {
                 {"peerId"     , producerPeer->id},
                 {"producerId"         , producer->id()},
                 {"id"         , consumer->id()},
                 {"kind"         , consumer->kind()},
                 {"rtpParameters"         , consumer->rtpParameters()},
                 {"type"         , consumer->type()},
                 {"appData", producer->appData()},
                 {"producerPaused", consumer->producerPaused()}
                });

            // Now that we got the positive response from the remote endpoint, resume
            // the Consumer so the remote endpoint will receive the a first RTP packet
            // of this new stream once its PeerConnection is already ready to process
            // and associate it.

            if(consumerPeer->isHasNotify) {
                 consumer->resume();
                return;
            }
           
//            consumerPeer->notify(
//                "consumerScore",
//                {
//                    {"consumerId" , consumer->id()},
//                    {"score"      , consumer->score()}
//                });

             consumer->resume();
        }
        catch (const char *error)
        {
            MS_lOGW("_createConsumer() | failed:%s", error);
        }
        return;
	}

	/**
	 * Creates a mediasoup DataConsumer for the given mediasoup dataProducer->
	 *
	 * @async
	 */
	void _createDataConsumer(
		//{
                             std::shared_ptr<Peer> &dataConsumerPeer,
                             std::shared_ptr<Peer> dataProducerPeer, // This is null for the bot dataProducer->
                             std::shared_ptr<DataProducer> dataProducer
		//}
                             )
	{
		// NOTE: Don"t create the DataConsumer if the remote Peer cannot consume it.
		if (!dataConsumerPeer->data.sctpCapabilities.dump().empty())
			return;

		// Must take the Transport the remote Peer is using for consuming.
//		auto transport = Array.from(dataConsumerPeer.data.transports)
//			.find((t) => t.appData.consuming);
        std::shared_ptr<Transport> transport;
        for(auto &kv : dataConsumerPeer->data.transports)
        {
            auto t = kv.second;
            if(t->appData()["consuming"].get<bool>() == true) {
                transport = t;
                break;
            }
        }
		// This should not happen.
		if (!transport)
		{
			MS_lOGW("_createDataConsumer() | Transport for consuming not found");

			return;
		}

		// Create the Dataconsumer->
        std::shared_ptr<DataConsumer> dataConsumer;

		try
		{
              DataConsumerOptions options;
              options.dataProducerId = dataProducer->id();
			dataConsumer =  transport->consumeData(options);
		}
		catch (const char * error)
		{
			MS_lOGW("_createDataConsumer() | transport->consumeData():%s", error);

			return;
		}

		// Store the DataConsumer into the protoo dataConsumerPeer data Object.
		dataConsumerPeer->data.dataConsumers[dataConsumer->id()]= dataConsumer;

		// Set DataConsumer events.
        dataConsumer->on("transportclose",[&](  )
		{
			// Remove from its map.
			dataConsumerPeer->data.dataConsumers.erase(dataConsumer->id());
		});

        dataConsumer->on("dataproducerclose",[&]( )
		{
			// Remove from its map.
			dataConsumerPeer->data.dataConsumers.erase(dataConsumer->id());

			dataConsumerPeer->notify(
                                    "dataConsumerClosed", { {"dataConsumerId", dataConsumer->id()} });
		});

		// Send a protoo request to the remote Peer with Consumer parameters.
		try
		{
			 dataConsumerPeer->request(
				"newDataConsumer",
				{
					// This is null for bot dataProducer->
					{"peerId"            , dataProducerPeer->id },
					{"dataProducerId"       ,  dataProducer->id() },
					{"id"                   ,  dataConsumer->id() },
					{"sctpStreamParameters" ,  dataConsumer->sctpStreamParameters() },
					{"label"                ,  dataConsumer->label() },
					{"protocol"             ,  dataConsumer->protocol() },
					{"appData"             ,  dataProducer->appData() }
				});
		}
		catch (...)
		{
			MS_lOGW("_createDataConsumer() | failed:");
		}
	}
	void sendSdpOfferToBridge(std::shared_ptr<Peer> &bridge,std::string peerId) {
		std::vector<std::shared_ptr<Consumer>> newConsumers;
		auto bridgeId = bridge->id;
		//auto  bridge = this->_bridges[bridgeId];
		for (auto  &kv : bridge->data.consumers) {
            auto &consumer = kv.second;
            newConsumers.push_back(consumer);
		}
		//MS_lOGD("createWebrtcSdpOffer android transportId=%s",transport->id().c_str());
		auto btransport = this->getBridgeTransport(bridgeId);
		MS_lOGD("createWebrtcSdpOffer bridge transportId=%s",btransport->id().c_str());
		auto sdpOffer = mediasoupclient::Sdp::Offer::createWebrtcSdpOffer(btransport,newConsumers);
		json payload = {
			{"type","offer"},
			{"sdp",sdpOffer}
		};
		MS_lOGI("sdOffer=%s",sdpOffer.dump().c_str());
        Base64 base;
        auto msgpayload = base.Encode((const unsigned char*)payload.dump().c_str(),payload.dump().length());
		//auto b = new Buffer.from(JSON.stringify(payload));
		//auto msgpayload = b.toString("base64");
		json jsonmsg = {
			{"senderClientId",peerId},
			{"messageType","SDP_OFFER" },
			{"RecipientClientId",bridgeId },
			{"messagePayload",msgpayload },
			{"statusResponse",{
          {"correlationId","1"},
          {"errorType","ok"},
          {"statusCode",0},
          {"description","ok"}
        }
			}
		};
		MS_lOGI("websocket send msg=%s",jsonmsg.dump().c_str());
		//this->websocket.send(jsonmsg);
	}
};



================================================
FILE: demo/Server.cpp
================================================
#include "Server.hpp"
// #include <webservice/file_request_handler.hpp>
// #include <webservice/ws_service.hpp>
// #include <webservice/ws_session.hpp>
// #include <webservice/server.hpp>
#include "Log.hpp"
#include <iostream>
#include <csignal>
#include "RtpParameters.hpp"
#include "sdp/SdpOffer.hpp"

// struct mirror_ws_service: webservice::ws_service{
//     void on_open(webservice::ws_identifier identifier)override{
//         std::cout << "open session " << identifier << "\n";
//     }

//     void on_close(webservice::ws_identifier identifier)override{
//         std::cout << identifier << " closed\n";
//     }

//     void on_text(
//         webservice::ws_identifier identifier,
//         std::string&& text
//     )override{
//         std::cout << identifier << " received text message: " << text << "\n";

//         // Send received text to all WebSocket sessions
//         send_text(text);
//     }

//     void on_binary(
//         webservice::ws_identifier identifier,
//         std::vector< std::uint8_t >&& data
//     )override{
//         std::cout << identifier << " received binary message\n";

//         // Send received data to all WebSocket sessions
//         send_binary(data);
//     }
// };


// void on_interrupt(int signum){
//     std::signal(signum, SIG_DFL);
//     std::cout << "Signal: " << signum << "\n";
//    // server->shutdown();
//     std::cout << "Signal ready\n";
// }


// void print_help(char const* exec_name){
//     std::cerr << "Usage: " << exec_name
//         << " <address> <port> <doc_root> <thread_count>\n"
//         << "Example:\n"
//         << "    " << exec_name << " 0.0.0.0 8080 http_root_directory 1\n";
// }

SfuServer::SfuServer()
{
    
}
SfuServer::~SfuServer()
{
  // if(rawWebsockServer != nullptr) 
  // {
  //     delete rawWebsockServer;
  //     rawWebsockServer = nullptr;
  // }
  

  if(mediasoup != nullptr) {
      mediasoup->Destroy();
      mediasoup::DestroyMediasoup(mediasoup);
  }

}

void SfuServer::setConfig(std::shared_ptr<Config> pConfig) {
    this->m_pConfig = pConfig;
}

int SfuServer::init()
{
    initMediasoup();
    createRawWebSocket();
    runRawWebsocket();
   createProtooWebSocket();
}

void SfuServer::run()
{
    runProtooWebSocketServer();

    //testProtoo();
}
int SfuServer::createRawWebSocket()
{
//    try{
//        auto address = boost::asio::ip::make_address(this->listenip);
//        auto port = this->listenport;
//        rawWebsockServer = new webservice::server(
//                       nullptr,
//                       std::make_unique< mirror_ws_service >(),
//                       nullptr, // ignore errors and exceptions
//                       address, port, this->thread_count);
//        return 0;
//    }catch(std::exception const& e){
//        std::cerr << "Exception: " << e.what() << "\n";
//        return 1;
//    }catch(...){
//        std::cerr << "Unknown exception\n";
//        return 1;
//    }
    return 0;
}
int SfuServer::createProtooWebSocket()
{
    //protooWebsockServer = std::make_shared<WebSocketServer>("0.0.0.0",8001,"");//new WebSocketServer("0.0.0.0",8001,"");
    //protooWebsockServer->runWebSocketServer();
   
}
void SfuServer::processRawSdpMessage(std::string message)
{
//    auto msg = json::parse(message); //根据请求过来的数据来更新。
//    MS_lOGD("raw websocket recv message %s", msg.dump().c_str());
//    auto recipientClientId = msg["RecipientClientId"];
//    auto messagePayload = msg["MessagePayload"];
//    auto sdpAnswer = getStringFromBase64(messagePayload);
//    MS_lOGD("messagePayload=%s",sdpAnswer.dump().c_str());
//    auto roomId = msg["CorrelationId"].get<std::string>();
//    oatpp::String oatppRoomId = roomId.c_str();
//    auto room = m_rooms[oatppRoomId];
//    std::string bridgeId = msg["RecipientClientId"];
//    auto transportId = room->getBridgeTransportId(bridgeId);
//
//
//
//    try
//    {
//        auto dtlsParameters = mediasoupclient::Sdp::Offer::getMediasoupDtlsParameters(sdpAnswer["sdp"]);
//        json jdtlsParameters = dtlsParameters;
//        MS_lOGD("dtlsParameters=%s",jdtlsParameters.dump().c_str());
//        room->connectBridgeTransport(
//
//                bridgeId,
//                transportId,
//                dtlsParameters
//        );
//
//
//
//        std::string kind = "audio";
//
//        auto rtpParameters = mediasoupclient::Sdp::Offer::getMediasoupRtpParameters(sdpAnswer["sdp"],kind,room->getLocalSdp());
//        room->createBridgeProducer(
//
//                bridgeId,
//                transportId,
//                kind,
//                rtpParameters
//            );
//
//         kind = "video";
//         rtpParameters = mediasoupclient::Sdp::Offer::getMediasoupRtpParameters(sdpAnswer["sdp"],kind,room->getLocalSdp());
//        room->createBridgeProducer(
//
//                bridgeId,
//                transportId,
//                kind,
//                rtpParameters
//            );
//    }
//    catch (...)
//    {
//        MS_lOGE("error");
//    }
//    if(msg["action"] == "SDP_OFFER") {
//        auto webRtcTransport = room->getBridgeTransport(bridgeId);
//        auto producers = room->getProducersFromBridge(bridgeId);
//        auto producerMedias=mediasoupclient::Sdp::Offer::getMediasoupProducerMedias(sdpAnswer["sdp"]);
//        auto sdpAnswer = mediasoupclient::Sdp::Offer::createWebrtcSdpAnswer(webRtcTransport,producers,producerMedias);
//        json payload = {
//            {"type","offer"},
//            {"sdp",sdpAnswer}
//        };
//        Base64 base;
//        auto msgpayload = base.Encode((const unsigned char*)payload.dump().c_str(),payload.dump().length());
//        //auto b = new Buffer.from(JSON.stringify(payload));
//       // auto msgpayload = b.toString("base64");
//        json jsonmsg = {
//            {"action","SDP_OFFER"},
//            {"RecipientClientId","peerId"},
//            {"MessagePayload",msgpayload}
//        };
//        //ws.send(JSON.stringify(jsonmsg));
//    }
}
void SfuServer::runRawWebsocket()
{

}
void SfuServer::runRawWebsockServer()
{
    //std::signal(SIGINT, &on_interrupt);
    //rawWebsockServer->block();
}
/**
 * Get next mediasoup Worker.
 */
std::shared_ptr<mediasoup::IWorker> SfuServer::getMediasoupWorker()
{
	auto worker = workers[nextMediasoupWorkerIdx];

	if (++nextMediasoupWorkerIdx == workers.size())
		nextMediasoupWorkerIdx = 0;

	return worker;
}
void SfuServer::processHttpRequest(std::string &path,std::string & roomId,std::shared_ptr<Room> room,json &params,json &query,json & body,json &respdata)
{
  	/**
	 * For every API request, verify that the roomId in the path matches and
	 * existing room->
	 */
/*  
	expressApp.param(
		"roomId", async (req, res, next, roomId) =>
		{
			//just create the room with roomId
			getOrCreateRoom({roomId});
			// The room must exist for all API requests.
			if (!rooms.has(roomId))
			{
				auto error = new Error("room with id "${roomId}" not found");

				error.status = 404;
				throw error;
			}

			room = rooms.get(roomId);

			next();
		});
*/
  //MS_lOGD("initBridgeSignalChannel(expressApp)");
  //initBridgeSignalChannel(null,rooms);
	/**
	 * API GET resource that returns the mediasoup Router RTP capabilities of
	 * the room->
	 */
	if(
		("/rooms/"+roomId ) ==  path )
		{
			auto data = room->getRouterRtpCapabilities();

			respdata = data ;
    }else

	/**
	 * POST API to create a Broadcaster.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters") ==  path )
		{
			auto id = body["id"];
			auto displayName = body["displayName"];
			auto device = body["device"];
			auto rtpCapabilities = body["rtpCapabilities"];
      MS_lOGD("[LiveRoom] get req body=${JSON.stringify(body)}");
			try
			{
                RtpCapabilities cap = rtpCapabilities;
				auto data = room->createBroadcaster(
					
						id,
						displayName,
						device,
                        cap
					);

				//respdata = data ;
			}
			catch (...)
			{
				
			}
    }else

	/**
	 * DELETE API to delete a Broadcaster.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId") ==  path )
		{
			auto broadcasterId = params["broadcasterId"];

			//room->deleteBroadcaster( broadcasterId );

			//res.status(200).send("broadcaster deleted");
    }else

	/**
	 * POST API to create a mediasoup Transport associated to a Broadcaster.
	 * It can be a PlainTransport or a WebRtcTransport depending on the
	 * type parameters in the body. There are also additional parameters for
	 * PlainTransport.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports") ==  path )
		{
			auto broadcasterId = params["broadcasterId"];
			auto type = body["type"];
              auto rtcpMux = body["rtcpMux"];
              auto comedia = body["comedia"];
              auto sctpCapabilities = body["sctpCapabilities"];

			try
			{
                SctpCapabilities sctp = sctpCapabilities;
//				auto data = room->createBroadcasterTransport(
//
//						broadcasterId,
//						type,
//						rtcpMux,
//						comedia,
//                        sctp
//					);
//
//				respdata = data ;
			}
			catch (...)
			{
				
			}
		}else

	/**
	 * POST API to connect a Transport belonging to a Broadcaster. Not needed
	 * for PlainTransport if it was created with comedia option set to true.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports/:transportId/connect")  ==  path )
		{
              auto broadcasterId = params["broadcasterId"];
              auto transportId = params["transportId"];
            DtlsParameters dtlsParameters  = body["dtlsParameters"];

			try
			{
                
				room->connectBroadcasterTransport(
					
						broadcasterId,
						transportId,
						dtlsParameters
					);

				//respdata = data ;
			}
			catch (...)
			{
				
			}
		}else

	/**
	 * POST API to create a mediasoup Producer associated to a Broadcaster.
	 * The exact Transport in which the Producer must be created is signaled in
	 * the URL path. Body parameters include kind and rtpParameters of the
	 * Producer.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports/:transportId/producers")  ==  path )
		{
			auto broadcasterId = params["broadcasterId"];
          auto transportId = params["transportId"];
          auto kind = body["kind"];
            RtpParameters rtpParameters = body["rtpParameters"];
			//auto { kind, rtpParameters } = body;

			try
			{
				auto data = room->createBroadcasterProducer(
					
						broadcasterId,
						transportId,
						kind,
						rtpParameters
					);

				respdata = data ;
			}
			catch (...)
			{
				
			}
		}else

	/**
	 * POST API to create a mediasoup Consumer associated to a Broadcaster.
	 * The exact Transport in which the Consumer must be created is signaled in
	 * the URL path. Query parameters must include the desired producerId to
	 * consume.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports/:transportId/consume") ==  path )
		{
		  auto broadcasterId = params["broadcasterId"];
          auto transportId = params["transportId"];
          auto producerId = query["producerId"];
		//	auto { producerId } = req.query;

			try
			{
				auto data = room->createBroadcasterConsumer(
					
						broadcasterId,
						transportId,
						producerId
					);

				respdata = data ;
			}
			catch (...)
			{
				
			}
		}else

	/**
	 * POST API to create a mediasoup DataConsumer associated to a Broadcaster.
	 * The exact Transport in which the DataConsumer must be created is signaled in
	 * the URL path. Query body must include the desired producerId to
	 * consume.
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports/:transportId/consume/data") ==  path )
		{
			auto broadcasterId = params["broadcasterId"];
            auto transportId = params["transportId"];
			auto dataProducerId = body["dataProducerId"];

			try
			{
				auto data = room->createBroadcasterDataConsumer(
					
						broadcasterId,
						transportId,
						dataProducerId
					);

				respdata = data ;
			}
			catch (...)
			{
				
			}
		}else
	
	/**
	 * POST API to create a mediasoup DataProducer associated to a Broadcaster.
	 * The exact Transport in which the DataProducer must be created is signaled in
	 */
	if(
		("/rooms/"+roomId+"/broadcasters/:broadcasterId/transports/:transportId/produce/data") ==  path )
		{
			auto broadcasterId = params["broadcasterId"];
              auto transportId = params["transportId"];
              auto label = body["label"];
              auto protocol = body["protocol"];
              SctpStreamParameters sctpStreamParameters = body["sctpStreamParameters"];
              auto appData = body["appData"];

			try
			{
				auto data = room->createBroadcasterDataProducer(
					
						broadcasterId,
						transportId,
						label,
						protocol,
						sctpStreamParameters,
						appData
					);

				respdata = data ;
			}
			catch (...)
			{
				
			}
		}else



	if(
		"/describeSignalingChannel" ==  path )
		{
			/*
			* ScaryTestChannel,
		Master,
		us-west-2,
		arn:aws:kinesisvideo:us-west-2:848161169354:channel/ScaryTestChannel/1606901298484,
		https://r-fd57ec7b.kinesisvideo.us-west-2.amazonaws.com,
		wss://m-75621fd6.kinesisvideo.us-west-2.amazonaws.com,1607436362
			* */
			auto roomId= body["CorrelationId"].get<std::string>() ;
			auto bridgeId = body["RecipientClientId"];
			auto MessagePayload = body["MessagePayload"];
			MS_lOGD("describeSignalingChannel recv data=%s",body.dump().c_str());
			json ChannelInfo1 = {
                    { "ChannelInfo" , {
                            {"ChannelARN" , "arn:aws:kinesisvideo:us-west-2:848161169354:channel/1234569/1606901298484"},
                            {"ChannelName" , roomId},
                            {"Version" , "v0"},
                            {"ChannelStatus" , "CREATING"},
                            {"ChannelType" , "SINGLE_MASTER"},
                            {"CreationTime" , ""},
                        }
                    }
			};
			//just create the room with roomId
            oatpp::String oatppRoomId = roomId.c_str();
			getOrCreateRoom(oatppRoomId);
			// The room must exist for all API requests.
			if (!m_rooms[oatppRoomId])
			{
				//auto error = new Error("room with id roomId not found");

				//error.status = 404;
				//throw error;
			}

            room = m_rooms[oatppRoomId];

			try
			{

				auto sdpOffer = getStringFromBase64(MessagePayload);
				MS_lOGD("messagePayload=%s",sdpOffer.dump().c_str());
				auto room = m_rooms[oatppRoomId];
                auto remoteCaps = mediasoupclient::Sdp::Offer::getMediasoupRtpCapabilities(sdpOffer["sdp"],room->getLocalSdp());
                json device ={
                    {"name",bridgeId},
                    {"rtpCapabilities",remoteCaps }
                };
                std::string displayName = bridgeId;
                room->createBridge(bridgeId,displayName,device,remoteCaps);
                SctpCapabilities sctp;
				auto data = room->createBridgeTransport(

						/*bridgeId:*/bridgeId,
						/*type:*/"webrtc",
						/*rtcpMux:*/false,
						/*comedia:*/true,
                        sctp
					);
				MS_lOGD("createBridgeTransport transportId=%s",data["id"].dump().c_str());


			}
			catch (...)
			{
				MS_lOGE("error");
			}

			//res.status(200).json(ChannelInfo1);
		}else
	if(
		"/getSignalingChannelEndpoint" ==  path )
		{
			MS_lOGD("getSignalingChannelEndpoint recv  data=",body.dump().c_str());
			json ResourceEndpointList = {
                "ResourceEndpointList" , {
					{
						{"Protocol", "http"},
						//{"ResourceEndpoint", "http://127.0.0.1:"+config.http.listenPort},
						{"Version", "v0"},
						{"ChannelStatus","CREATING"},
						{"ChannelType", "SINGLE_MASTER"},
						{"CreationTime", ""},
					},
					{
						{"Protocol", "ws"},
					//	{"ResourceEndpoint", "ws://127.0.0.1:"+config.http.listenPort)+1)+"/"},
						{"Version", "v0"},
						{"ChannelStatus", "CREATING"},
						{"ChannelType", "SINGLE_MASTER"},
						{"CreationTime", ""},
					}
                }
			};
			//res.status(200).json(ResourceEndpointList);
		}else
	if(
		"/v1/get-ice-server-config" ==  path )
		{
			/*
			* {"IceServerList":[{"Password":"H8TZ5pAjOkalNVQJ5UgQt3Godj3URm/3lsfcJYLMwOs=","Ttl":300,"Uris":["turn:54-188-75-37.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp","turns:54-188-75-37.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp","turns:54-188-75-37.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=tcp"],"Username":"1610088702:djE6YXJuOmF3czpraW5lc2lzdmlkZW86dXMtd2VzdC0yOjg0ODE2MTE2OTM1NDpjaGFubmVsL1NjYXJ5VGVzdENoYW5uZWwvMTYwNjkwMTI5ODQ4NA=="},{"Password":"7Kw5G4K9SpLYEvibvZiTg48uoa5vJ7X3I/MxCkmBqAs=","Ttl":300,"Uris":["turn:34-220-69-168.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp","turns:34-220-69-168.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=udp","turns:34-220-69-168.t-67e8ec01.kinesisvideo.us-west-2.amazonaws.com:443?transport=tcp"],"Username":"1610088702:djE6YXJuOmF3czpraW5lc2lzdmlkZW86dXMtd2VzdC0yOjg0ODE2MTE2OTM1NDpjaGFubmVsL1NjYXJ5VGVzdENoYW5uZWwvMTYwNjkwMTI5ODQ4NA=="}]}
			* */
			MS_lOGD("/v1/get-ice-server-config recv data=",body.dump().c_str());
			json IceServerList = {
                "IceServerList",{
                        {
                            {"Password" , "H8TZ5pAjOkalNVQJ5UgQt3Godj3URm/3lsfcJYLMwOs="},
                            {"Ttl" , 300},
                            {"Uris" , {
                                "turn:192.168.1.192?transport=udp",
                                "turns:192.168.1.192?transport=udp"
                            },
                            {"Username" , "aa"}
                        }
                    }
                }
			};
			room = m_rooms["1234569"];
			//room->websocket = webSocketClient;
			//res.status(200).json(IceServerList);
		}

}

/**
 * Create a protoo WebSocketServer to allow WebSocket connections from browsers.
 */
void SfuServer::runProtooWebSocketServer()
{
//	MS_lOGD("running protoo WebSocketServer...");
//	// Handle connections from clients.
//
//    protooWebsockServer->on("connectionrequest", [&](std::string&& roomid, std::string&& peerid, WebSocketTransport* transport)
//	{
//        //MS_lOGD("[server] on connectionrequest info=${JSON.stringify(info)}")
//		// The client indicates the roomId and peerId in the URL query.
//		//auto u = url.parse(info.request.url, true);
//        auto roomId = roomid;//u.query["roomId"];
//        auto peerId = peerid;//u.query["peerId"];
//
//    	auto dvr = true;//u.query["dvr"];
//
//		if (roomId.empty() || peerId.empty())
//		{
//			//reject(400, "Connection request without roomId and/or peerId");
//
//			return;
//		}
//
//		MS_lOGD(
//			"protoo connection request [roomId:%s, peerId:%s]",
//			roomId.c_str(), peerId.c_str());
//
//		// Serialize this code into the queue to avoid that two peers connecting at
//		// the same time with the same roomId create two separate rooms with same
//		// roomId.
//        auto room = getOrCreateRoom(roomId );
//          if(dvr)  {
//            room->dvr = true;
//          }
//
//
//        // Accept the protoo WebSocket connection.
//       // auto protooWebSocketTransport = accept(json({}));
//
//       room->handleProtooConnection(peerId,nullptr, transport);
//
////		queue.push(async () =>
////		{
////			auto room = getOrCreateRoom(roomId );
////              if(dvr)  {
////                room->dvr = true;
////              }
////
////
////			// Accept the protoo WebSocket connection.
////			auto protooWebSocketTransport = accept();
////
////			room->handleProtooConnection(peerId, protooWebSocketTransport);
////		})
////			.catch((error) =>
////			{
////				logger.error("room creation or room joining failed:%o", error);
////
////				reject(error);
////			});
//	});
//    protooWebsockServer->runWebSocketServer();
}
/**
 * Get a Room instance (or create one if it does not exist).
 */
std::shared_ptr<Room> SfuServer::getOrCreateRoom(const oatpp::String& roomId)
{
	std::lock_guard<std::mutex> lock(m_roomsMutex);
	std::shared_ptr<Room> &room = m_rooms[roomId];

	// If the Room does not exist create a new one.
	if (!room)
	{
		auto mediasoupWorker = getMediasoupWorker();
        MS_lOGI("create() config.mediasoup.routerOptions=%s", this->m_pConfig->mediasoup.routerOptions.dump().c_str());
        json mediaCodecs = this->m_pConfig->mediasoup.routerOptions["mediaCodecs"];
        // Create a mediasoup Router.   
        RouterOptions routerOptions;
        routerOptions.mediaCodecs = mediaCodecs.get<std::vector<RtpCodecCapability>>();       
        auto mediasoupRouter =  mediasoupWorker->createRouter(routerOptions);
        // Create room instance
		room = std::make_shared<Room>(roomId, mediasoupRouter);
        room->setConfig(this->m_pConfig);
		//add to room map
		m_rooms[roomId] = room;		
	}
	return room;

	// if (!room)
	// {
	// 	MS_lOGD("creating a new Room [roomId:%s]", roomId.c_str());

	// 	auto mediasoupWorker = getMediasoupWorker();
    // //room->setConfig(config);
	// 	room = Room::create( mediasoupWorker, roomId );
   
	// 	rooms[roomId] = room;
	// 	room->on("close",[&]()
    //     {
	// 		MS_lOGD("getOrCreateRoom rooms delete [roomId:%s]", roomId.c_str());
	// 		rooms.erase(roomId);
	// 	});
	// }

	// return room;
}
void SfuServer::initMediasoup()
{
    mediasoup = mediasoup::CreateMediasoup();
    mediasoup->Init();
	mediasoup::RtpCapabilities rtpCapabilities = mediasoup->GetSupportedRtpCapabilities();
	for (auto & item : rtpCapabilities.headerExtensions) {
		//std::cout << "headerExtensions.uri:" << item.uri << std::endl;
	}

}
void SfuServer::initWorker(int consumerFd,int producerFd,int payloadConsumerFd,int payloadProducerFd)
{
    workerSettings.consumerFd=consumerFd;
    workerSettings.producerFd=producerFd;
    workerSettings.payloadConsumerFd=payloadConsumerFd;
    workerSettings.payloadProducerFd=payloadProducerFd;
  	auto worker = mediasoup->CreateWorker(&myWorkerObserver, workerSettings);
    workers.push_back(worker);
}
json SfuServer::getStringFromBase64(std::string payload)
{
    // Base64 base;
    // auto dec = base.Decode(payload.c_str(),(int)payload.length());
    // return json::parse(dec);
    return json();
}

void SfuServer::runPingLoop(const std::chrono::duration<v_int64, std::micro>& interval) {

  while(true) {

    std::chrono::duration<v_int64, std::micro> elapsed = std::chrono::microseconds(0);
    auto startTime = std::chrono::system_clock::now();

    do {
      std::this_thread::sleep_for(interval - elapsed);
      elapsed = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now() - startTime);
    } while (elapsed < interval);

    std::lock_guard<std::mutex> lock(m_roomsMutex);
    for (const auto &room : m_rooms) {
      room.second->pingAllPeers();
    }

  }

}

void SfuServer::onAfterCreate_NonBlocking(const std::shared_ptr<AsyncWebSocket>& socket, const std::shared_ptr<const ParameterMap>& params) {

  //++ m_statistics->EVENT_PEER_CONNECTED;

  auto roomId = params->find("roomId")->second;
  auto peerId = params->find("peerId")->second;
  auto forceH264 = params->find("forceH264")->second;
  auto forceVP9 = params->find("forceVP9")->second;

  auto room = getOrCreateRoom(roomId);

  //check whether peerId existed
   auto existingPeer = room->getPeerById(peerId->std_str());
  if(existingPeer){
	  MS_lOGW("[Room] handleProtooConnection() | there is already a protoo Peer with same peerid(), closing it [peerId:%s]",
              peerId->std_str().c_str());
            // TODO:should close
			//existingPeer->close();
	  return;
  }
 //TODO: uncomment below 3 lines
  auto peer = std::make_shared<Peer>(socket, room, peerId->std_str(), peerId->std_str());
  socket->setListener(peer);
  room->addPeer(peer);

//   protooPeer->on("request", [&, peerId](json request, std::function<void(json data)> const &accept, std::function<void(int errorCode, std::string errorReason)> const &reject)
// 				 {
// 					 std::shared_ptr<Peer> peer1 = this->_peers[peerId];
// 					 MS_lOGD(
// 						 "protoo Peer  event [method:%s, peerId:%s peer=%x]",
// 						 request["method"].dump().c_str(), peer1->id.c_str(), peer1.get());

// 					 this->_handleProtooRequest(peer1, request, accept, reject);
// 				 });

//   protooPeer->on("close", [&]()
// 				 {
// 					 if (this->_closed)
// 						 return;

// 					 MS_lOGD("protoo Peer event [peerId:%s]", peer->id.c_str());

// 					 // If the Peer was joined, notify all Peers.
// 					 if (peer->data.joined)
// 					 {
// 						 for (auto otherPeer : this->_getJoinedPeers(peer))
// 						 {
// 							 json data = {{"peerId", peer->id}};
// 							 otherPeer->notify("peerClosed", data);
// 						 }
// 					 }

// 					 // Iterate and close all mediasoup Transport associated to this Peer, so all
// 					 // its Producers and Consumers will also be closed.
// 					 for (auto kv : peer->data.transports)
// 					 {
// 						 //auto transportId        = kv.first;
// 						 auto transport = kv.second;
// 						 transport->close();
// 					 }

// 					 // If this is the latest Peer in the room, close the room.
// 					 if (this->_peers.size() == 0)
// 					 {
// 						 MS_lOGI(
// 							 "last Peer in the room left, closing the room [roomId:%s]",
// 							 this->_roomId.c_str());

// 						 this->close();
// 					 }
// 				 });
}

void SfuServer::onBeforeDestroy_NonBlocking(const std::shared_ptr<AsyncWebSocket>& socket) {

  //++ m_statistics->EVENT_PEER_DISCONNECTED;

  auto peer = std::static_pointer_cast<Peer>(socket->getListener());
    if(!peer){
        return;
    }
  auto room = peer->getRoom();

  room->removePeerById(peer->getPeerId());
  //room->goodbyePeer(peer);
  peer->invalidateSocket();

  if(room->isEmpty()) {
    deleteRoom(room->getId());
  }

}

void SfuServer::deleteRoom(const oatpp::String& roomId){
    std::lock_guard<std::mutex> lock(m_roomsMutex);
      m_rooms.erase(roomId);
}

std::string Base64::Encode(const unsigned char * str,int bytes) {
    int num = 0,bin = 0,i;
    std::string _encode_result;
    const unsigned char * current;
    current = str;
    while(bytes > 2) {
        _encode_result += _base64_table[current[0] >> 2];
        _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
        _encode_result += _base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
        _encode_result += _base64_table[current[2] & 0x3f];

        current += 3;
        bytes -= 3;
    }
    if(bytes > 0)
    {
        _encode_result += _base64_table[current[0] >> 2];
        if(bytes%3 == 1) {
            _encode_result += _base64_table[(current[0] & 0x03) << 4];
            _encode_result += "==";
        } else if(bytes%3 == 2) {
            _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
            _encode_result += _base64_table[(current[1] & 0x0f) << 2];
            _encode_result += "=";
        }
    }
    return _encode_result;
}
std::string Base64::Decode(const char *str,int length) {
       //解码表
    const int DecodeTable[] =
    {
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -2, -2, -1, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, -2, -2, 63,
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, -2, -2, -2,
        -2,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, -2,
        -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2
    };
    int bin = 0,i=0,pos=0;
    std::string _decode_result;
    const char *current = str;
    char ch;
    while( (ch = *current++) != '\0' && length-- > 0 )
    {
        if (ch == base64_pad) { // 当前一个字符是“=”号
            /*
            先说明一个概念:在解码时,4个字符为一组进行一轮字符匹配。
            两个条件:
                1、如果某一轮匹配的第二个是“=”且第三个字符不是“=”,说明这个带解析字符串不合法,直接返回空
                2、如果当前“=”不是第二个字符,且后面的字符只包含空白符,则说明这个这个条件合法,可以继续。
            */
            if (*current != '=' && (i % 4) == 1) {
                return NULL;
            }
            continue;
        }
        ch = (char)DecodeTable[ch];
        //这个很重要,用来过滤所有不合法的字符
        if (ch < 0 ) { /* a space or some other separator character, we simply skip over */
            continue;
        }
        switch(i % 4)
        {
            case 0:
                bin = ch << 2;
                break;
            case 1:
                bin |= ch >> 4;
                _decode_result += bin;
                bin = ( ch & 0x0f ) << 4;
                break;
            case 2:
                bin |= ch >> 2;
                _decode_result += bin;
                bin = ( ch & 0x03 ) << 6;
                break;
            case 3:
                bin |= ch;
                _decode_result += bin;
                break;
        }
        i++;
    }
    return _decode_result;
}
                                   


================================================
FILE: demo/Server.hpp
================================================
#pragma once
// #include <webservice/file_request_handler.hpp>
// #include <webservice/ws_service.hpp>
// #include <webservice/ws_session.hpp>
// #include <webservice/server.hpp>
//#include <boost/lexical_cast.hpp>

#include "./rooms/Room.hpp"
#include "IMediasoup.hpp"
#include "IWorker.hpp"
//#include "Transport/WebSocketServer.h"
#include "Config.hpp"
#include "./dto/ConfigDto.hpp"
#include "./dto/DTOs.hpp"

#include "./utils/Statistics.hpp"
#include "oatpp-websocket/AsyncConnectionHandler.hpp"
#include "oatpp/core/macro/component.hpp"
#include <unordered_map>
#include <mutex>

class Base64{
private:
    std::string _base64_table;
    static const char base64_pad = '=';public:
    Base64()
    {
        _base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /*这是Base64编码使用的标准字典*/
    }
public:
    /**
     * 这里必须是unsigned类型,否则编码中文的时候出错
     */
    std::string Encode(const unsigned char * str,int bytes);
    std::string Decode(const char *str,int bytes);
    void Debug(bool open = true);
};

class MyWorkerObserver : public mediasoup::IWorker::Observer {
public:
    MyWorkerObserver() {}
    void OnSuccess() override {
        std::cout << "++++++:OnSuccess" << std::endl;
    }
    void OnFailure(std::string error) override {
        std::cout << "++++++:OnFailure" << std::endl;
    }
    void OnClose() override {
        std::cout << "++++++:OnClose" << std::endl;
    }
};

class SfuServer : public oatpp::websocket::AsyncConnectionHandler::SocketInstanceListener
{
public:
    SfuServer();
    ~SfuServer();
 
public:
    void set_address(std::string ip,int port) {
        this->listenip = ip;
        this->listenport = port;
    }
    void runProtooWebSocketServer();
    std::shared_ptr<Room> getOrCreateRoom(const oatpp::String& roomName);
public:
    int init();
    void run();
    void setConfig(std::shared_ptr<Config> pConfig);

    void initMediasoup();
    void initWorker(int consumerFd,int producerFd,int payloadConsumerFd,int payloadProducerFd);
    void runRawWebsocket();
    int createRawWebSocket();
    int createProtooWebSocket();
    void runRawWebsockServer();
    void processHttpRequest(std::string &path,std::string & roomId,std::shared_ptr<Room> room,json &params,json &query,json & body,json &respdata);
    std::shared_ptr<mediasoup::IWorker> getMediasoupWorker();
    json getStringFromBase64(std::string payload);
    void processRawSdpMessage(std::string message);
    void testProtoo();
    
private:
    void deleteRoom(const oatpp::String& roomId);

public:
    //Websocket-Ping all peers in the loop. Each time `interval`.
    void runPingLoop(const std::chrono::duration<v_int64, std::micro> &interval = std::chrono::minutes(1));
    //Called when socket is created
    void onAfterCreate_NonBlocking(const std::shared_ptr<AsyncWebSocket> &socket, const std::shared_ptr<const ParameterMap> &params) override;
    //Called before socket instance is destroyed.
    void onBeforeDestroy_NonBlocking(const std::shared_ptr<AsyncWebSocket> &socket) override;

private:
    //webservice::server* rawWebsockServer = nullptr;
    std::string listenip;
    int listenport;
    int thread_count=1;
    //copy from canchat Lobby.hpp
    std::unordered_map<oatpp::String, std::shared_ptr<Room>> m_rooms;
    std::mutex m_roomsMutex;
    //copy end
    //std::unordered_map<std::string,std::shared_ptr<Room> > rooms;
    std::vector<std::shared_ptr<mediasoup::IWorker>> workers;
    mediasoup::IMediasoup * mediasoup;
    mediasoup::WorkerSettings workerSettings;
    MyWorkerObserver myWorkerObserver;

    //std::shared_ptr<WebSocketServer> protooWebsockServer;

    std::shared_ptr<Config> m_pConfig;
    int nextMediasoupWorkerIdx =0;
public:
    std::shared_ptr<Room> m_delRoom;
};


================================================
FILE: demo/Transfmt.cpp
================================================
#include "Transfmt.hpp"
#include <string>
#include <sstream>
#include <iostream> 
#include "Log.hpp"
#include "Router.hpp"
#include "Producer.hpp"
#include "./rooms/Peer.hpp"
#include "json.hpp"

std::string& replace_str(std::string& str, const std::string& to_replaced, const std::string& newchars)
{
    for(std::string::size_type pos(0); pos != std::string::npos; pos += newchars.length())
    {
        pos = str.find(to_replaced,pos);
        if(pos!=std::string::npos)
           str.replace(pos,to_replaced.length(),newchars);
        else
            break;
    }
    return   str;
}
Transfmt::Transfmt()
{

}
Transfmt::~Transfmt()
{
  
}
// Gets codec information from rtpParameters
json Transfmt::getCodecInfoFromRtpParameters(std::string kind, json jrtpParameters)
{
    RtpParameters rtpParameters = jrtpParameters;
    std::string to_replaced = kind+"/";
    std::string codecName = replace_str(rtpParameters.codecs[0].mimeType,to_replaced,"");
  return {
    {"payloadType", rtpParameters.codecs[0].payloadType},
    {"codecName", codecName},
    {"clockRate", rtpParameters.codecs[0].clockRate},
    {"channels", kind == "audio" ? rtpParameters.codecs[0].channels : 0}
  };
};

void Transfmt::getSdpData(json audio,json audioCodecInfo,json video ,json videoCodecInfo,std::string  sdpData)
{
    std::stringstream stream;
    stream << "v=0o=- 0 0 IN IP4 127.0.0.1\n"; 
    stream << "s=FFmpeg\n"; 
    stream << "c=IN IP4 127.0.0.1\n"; 
    stream << "t=0 0\n"; 
    stream << "m=video ";
    stream << video["remoteRtpPort"];
    stream << " RTP/AVP ";
    stream << videoCodecInfo["payloadType"];
    stream << " \n"; 
    stream << "a=rtpmap:";
    stream << videoCodecInfo["payloadType"];
    stream <<" ";
    stream <<videoCodecInfo["codecName"];
    stream <<"/";
    stream <<videoCodecInfo["clockRate"];
    stream <<"\n"; 
    stream << "a=sendonly\n"; 
    stream << "m=audio " << audio["remoteRtpPort"] <<" RTP/AVP " <<audioCodecInfo["payloadType"] << "\n";  
    stream << "a=rtpmap:" << audioCodecInfo["payloadType"] << " "<< audioCodecInfo["codecName"]<<"/"<<audioCodecInfo["clockRate"]<<"/"<<audioCodecInfo["channels"]<<"\n"; 
    stream << "a=sendonly\n";
    stream >> sdpData; 
    
}
// File to create SDP text from mediasoup RTP Parameters
json Transfmt::createSdpText(json &rtpParameters)
{
  MS_lOGD("rtpParameters=%s",rtpParameters.dump().c_str());
  json &video = rtpParameters["video"];
  json &audio = rtpParameters["audio"];
  
  // Video codec info
  auto videoCodecInfo = getCodecInfoFromRtpParameters("video", video["rtpParameters"]);

  // Audio codec info
  auto audioCodecInfo = getCodecInfoFromRtpParameters("audio", audio["rtpParameters"]);

  json sdpData;
  getSdpData(audio,audioCodecInfo,video,videoCodecInfo,sdpData);
  return sdpData;
};

void Transfmt::writeSdpFile(std::string &userId,json &rtpParameters) {
  auto sdp = createSdpText(rtpParameters);
  MS_lOGD("createSdpText %s",sdp.dump().c_str());
  /*
  fs.writeFile("/tmp/"+userId+".sdp", sdp, function (error) {
    if (error) {
      MS_lOGD("sdp 写入失败")
    } else {
      MS_lOGD("sdp 写入成功了")
    }
  })*/
}


void Transfmt::getPkgHeader(PkgHeader &header) {

	header.pkg_mark = LIVE_MARK;
	header.pkg_code = TRANSFMT_CREATE_STREAM_RTC_RTMP;

}
void Transfmt::getTransfmtCreateRtc2RtmpInfo(std::string &name,std::string &roomid,TransfmtCreateRtc2Rtmp & data)
{
    getPkgHeader(data.header);
    data.header.pkg_len = sizeof(TransfmtCreateRtc2Rtmp);
    strcpy(data.name,name.c_str());
    strcpy(data.roomid,roomid.c_str());
    data.is_audio = 1;
    data.is_video = 1;
    data.trans_code = 0;
    data.width = 1280;
    data.height = 720 ;
    data.bitrate = 800;
    data.frame_rate = 25;
    data.gop = 5;
    data.profile = 0 ;

}
void Transfmt::getTransfmtCloseRtc2RtmpInfo(std::string &name, TransfmtCloseRtc2Rtmp &data) {

  PkgHeader header;
  getPkgHeader(data.header);
  header.pkg_len = sizeof(TransfmtCloseRtc2Rtmp);
  strcpy(data.name,name.c_str());
}


#include <random>

using std::default_random_engine;
using std::uniform_real_distribution;

int Transfmt::getRandomNumber() {
    default_random_engine e;
    uniform_real_distribution<double> u(0, 1);
    return int(u(e) * 1000);
}

int Transfmt::getRandomPort ()
{
    int random = getRandomNumber();
    int port = (random * (config.rtp["maxPort"].get<int>() - config.rtp["minPort"].get<int>() + 1) + config.rtp["minPort"].get<int>());
    return port;
}
int Transfmt::getPort()
{

	int port = getRandomPort();
	return port;

};

json Transfmt::publishRtpStream(std::shared_ptr<Router> router,std::shared_ptr<Peer> peer, std::shared_ptr<Producer> producer)
{
	MS_lOGD("publishRtpStream()");

	// Create the mediasoup RTP Transport used to send media to the GStreamer process
	json rtpTransportConfig = {
		{"listenIp" , config.mediasoup.plainTransportOptions["listenIp"]["announcedIp"]},
		{"rtcpMux"  , true},
		{"comedia"  , false}
	};
  
    MS_lOGD("rtpTransportConfig=%s",rtpTransportConfig.dump().c_str());
    PlainTransportOptions options;
    options.listenIp = config.mediasoup.plainTransportOptions["listenIp"]["announcedIp"];
    options.rtcpMux = true;
    options.comedia = false;
	auto rtpTransport =  router->createPlainTransport(options);

	// Set the receiver RTP ports
	auto remoteRtpPort =  getPort();

	//MS_lOGD("remoteRtpPort = ", remoteRtpPort);

	// Connect the mediasoup RTP transport to the ports used by GStreamer
      json sendRtpConfig = {
          {"ip"   , config.rtp["ip"]},
          {"port" , remoteRtpPort}
      };
        
      rtpTransport->connect(sendRtpConfig);
      MS_lOGD("sendRtpConfig=%s",(sendRtpConfig.dump().c_str()));

	peer->data.transports[rtpTransport->id()] =  rtpTransport;

	json codecs = json::array();
 
	// Codec passed to the RTP Consumer must match the codec in the Mediasoup router rtpCapabilities
	// auto routerCodec = router->rtpCapabilities.codecs.find(
	// 	(codec) => codec.kind == producer->kind
	// );
  json routerCodec;
  for(auto & codec : router->rtpCapabilities().codecs )
  {
      if(codec.kind == producer->kind())
      {
          routerCodec = codec;
          break;
      }
  }

	codecs.push_back(routerCodec);

	json rtpCapabilities = {
		{"codecs",codecs},
		{"rtcpFeedback",json::array()}
	};

	// MS_lOGD(rtpCapabilities);
	// MS_lOGD(codecs[0].parameters);
	// MS_lOGD(rtpTransport->tuple);

	// Start the consumer paused
	// Once the gstreamer process is ready to consume resume and send a keyframe
  ConsumerOptions consumerOptions;
    consumerOptions.producerId = producer->id();
    consumerOptions.rtpCapabilities = rtpCapabilities;
    consumerOptions.paused = true;
	auto rtpConsumer =  rtpTransport->consume(consumerOptions);

	peer->data.consumers[rtpConsumer->id()] =  rtpConsumer;

	return {
		{"remoteRtpPort",remoteRtpPort},
		{"localRtcpPort" , rtpTransport->rtcpTuple().localPort},
		{"rtpCapabilities",rtpCapabilities},
		{"rtpParameters" , rtpConsumer->rtpParameters()}
	};
};

void Transfmt::startRecord(std::shared_ptr<Router> router,std::shared_ptr<Peer> peer, std::shared_ptr<Producer> producer,std::string roomId)
{
	json recordInfo = json::object();

	for (auto &kv : peer->data.producers)
	{
        auto producer = kv.second;
		recordInfo[producer->kind()] =  publishRtpStream(router, peer, producer);
		MS_lOGD("publishRtpStream kind=%s  info=%s",producer->kind().c_str(),recordInfo[producer->kind()].dump().c_str());
	}

  MS_lOGD("startRecord userId=%s  roomId=%s",peer->getPeerId().c_str(),roomId.c_str());
    auto peerId = peer->getPeerId();
  writeSdpFile(peerId, recordInfo);
    TransfmtCreateRtc2Rtmp data;
    getTransfmtCreateRtc2RtmpInfo(peerId,roomId,data);
 // MS_lOGD(buf);
  //auto ret = tcp_client.write(buf);
  //MS_lOGD("write ret="+ret);

	for (auto &kv : peer->data.consumers)
	{
        auto consumer = kv.second;
		 consumer->resume();
	}
	// setTimeout(async () => 
	// {
	// 	for (auto * consumer : peer.data.consumers) 
	// 	{
	// 		 consumer->resume();
	// 	}
	// }, 1000);
};
void Transfmt::stopRecord(std::string peerId)
{
  MS_lOGD("stopRecord userId=%s",peerId.c_str());
  TransfmtCloseRtc2Rtmp data;
  getTransfmtCloseRtc2RtmpInfo(peerId,data);
  //MS_lOGD(buf);
  //auto ret = tcp_client.write(buf);
  //MS_lOGD("write ret="+ret);

	
};


================================================
FILE: demo/Transfmt.hpp
================================================
#pragma once
#include <string>
#include "./rooms/Peer.hpp"
#include "Router.hpp"
#include "Producer.hpp"
#include "json.hpp"
#include "Config.hpp"

#define LIVE_MARK                         0x32505553 // SUP2(sohulive2)
#define LIVE_NAME_SIZE                    64
#define TRANSFMT_CREATE_STREAM_RTC_RTMP 0xb00
#define TRANSFMT_CLOSE_STREAM_RTC_RTMP 0xb01
#define TRANSFMT_CREATE_STREAM_RTMP_RTC 0xb02
#define TRANSFMT_CLOSE_STREAM_RTMP_RTC 0xb03


typedef struct {
    uint32_t pkg_len;
    uint32_t pkg_mark;
    uint16_t pkg_code;
} PkgHeader;

// heart
typedef struct {
    PkgHeader header;
} PkgHeart;

typedef struct TransfmtCreateRtc2Rtmp {
  PkgHeader header;
  char name[LIVE_NAME_SIZE];
  char roomid[LIVE_NAME_SIZE];
  uint8_t is_audio;
  uint8_t is_video;
  uint8_t trans_code;
  uint16_t width;
  uint16_t height;
  uint16_t bitrate;
  uint16_t frame_rate;
  uint16_t gop;
  uint16_t profile;
} TransfmtCreateRtc2Rtmp;

typedef struct TransfmtCloseRtc2Rtmp {
  PkgHeader header;
  char name[LIVE_NAME_SIZE];
} TransfmtCloseRtc2Rtmp;
class Transfmt
{
public:
    Transfmt();
    ~Transfmt();
    
public:
    void stopRecord(std::string peerId);
    void startRecord(std::shared_ptr<Router> router,std::shared_ptr<Peer> peer, std::shared_ptr<Producer> producer,std::string roomId);
    json getCodecInfoFromRtpParameters(std::string kind, json jrtpParameters);
    void getSdpData(json audio,json audioCodecInfo,json video ,json videoCodecInfo,std::string  sdpData);
    json createSdpText(json &rtpParameters);
    void writeSdpFile(std::string &userId,json &rtpParameters);

    void setConfig(Config &config1) {
        //this->config = config;
        this->config.initConfig();
    }
    void getPkgHeader(PkgHeader &header);
    void getTransfmtCreateRtc2RtmpInfo(std::string &name,std::string &roomid,TransfmtCreateRtc2Rtmp & data);
    void getTransfmtCloseRtc2RtmpInfo(std::string &name, TransfmtCloseRtc2Rtmp &data);
    json publishRtpStream(std::shared_ptr<Router> router,std::shared_ptr<Peer> peer, std::shared_ptr<Producer> producer);
    int getRandomPort ();
    int getPort();
    int getRandomNumber();

private:
    
    int minPort = 0;
    int maxPort = 0;
    int mTimeout=400;
    
    Config config;

};



================================================
FILE: demo/config.json
================================================
{
	"domain" : "localhost",
	"https"  :
	{
		"listenIp"   : "0.0.0.0",
		"listenPort" : 4443,
		"tls"        :
		{
			"cert" : "fullchain.pem",
			"key"  : "privkey.pem"
		}
	},
	"http"  :
	{
		"listenIp"   : "0.0.0.0",
		"listenPort" : 8001
	},
	"mediasoup" :
	{
		"numWorkers"     : 4,
		"workerSettings" :
		{
			"logLevel" : "debug",
			"logTags"  :
			[
				"info",
				"ice",
				"dtls",
				"rtp",
				"srtp",
				"rtcp",
				"rtx",
				"bwe",
				"score",
				"simulcast",
				"svc",
				"sctp"
			],
			"rtcMinPort" : 20000,
			"rtcMaxPort" : 21000
		},
		"routerOptions" :
		{
			"mediaCodecs" :
			[
				{
					"kind"      : "audio",
					"mimeType"  : "audio/opus",
					"clockRate" : 48000,
					"channels"  : 2
				},
				{
					"kind"       : "video",
					"mimeType"   : "video/h264",
					"clockRate"  : 90000,
					"parameters" :
					{
						"packetization-mode"      : 1,
						"profile-level-id"        : "42e01f",
						"level-asymmetry-allowed" : 1,
						"x-google-start-bitrate"  : 1000
					}
				},
				{
					"kind"       : "video",
					"mimeType"   : "video/h264",
					"clockRate"  : 90000,
					"parameters" :
						{
							"packetization-mode"      : 1,
							"profile-level-id"        : "4d0032",
							"level-asymmetry-allowed" : 1,
							"x-google-start-bitrate"  : 1000
						}
				},
				{
					"kind"       : "video",
					"mimeType"   : "video/h264",
					"clockRate"  : 90000,
					"parameters" :
					{
						"packetization-mode"      : 1,
						"profile-level-id"        : "42e034",
						"level-asymmetry-allowed" : 1,
						"x-google-start-bitrate"  : 1000
					}
				},
				{
					"kind"       : "video",
					"mimeType"   : "video/VP8",
					"clockRate"  : 90000,
					"parameters" :
						{
							"x-google-start-bitrate" : 1000
						}
				},
				{
					"kind"       : "video",
					"mimeType"   : "video/VP9",
					"clockRate"  : 90000,
					"parameters" :
						{
							"profile-id"             : 2,
							"x-google-start-bitrate" : 1000
						}
				}
			]
		},
		"webRtcTransportOptions" :
		{
			"listenIps" :
			[
				{
					"ip"          : "0.0.0.0",
					"announcedIp" : "104.40.213.112"
				}
			],
			"initialAvailableOutgoingBitrate" : 1000000,
			"minimumAvailableOutgoingBitrate" : 600000,
			"maxSctpMessageSize"              : 262144,
			"maxIncomingBitrate"              : 15000000
		},
		"plainTransportOptions" :
		{
			"listenIp" :
			{
				"ip"          : "0.0.0.0",
				"announcedIp" : "104.40.213.112"
			},
			"maxSctpMessageSize" : 262144
		}
	},
	"rtp" :
	{
		"minPort" : 20000,
		"maxPort" : 29999,
		"ip" : "0.0.0.0",
		"signalPort" : 11111
	},
	"rtmp" :
	{
		"listenIp" : "0.0.0.0",
		"listenPort" : 1935,
		"suffix" : "/live"
	}
}


================================================
FILE: demo/controller/RoomsController.hpp
================================================
/***************************************************************************
 *
 * Project:   ______                ______ _
 *           / _____)              / _____) |          _
 *          | /      ____ ____ ___| /     | | _   ____| |_
 *          | |     / _  |  _ (___) |     | || \ / _  |  _)
 *          | \____( ( | | | | |  | \_____| | | ( ( | | |__
 *           \______)_||_|_| |_|   \______)_| |_|\_||_|\___)
 *
 *
 * Copyright 2020-present, Leonid Stryzhevskyi <lganzzzo@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************************/

#ifndef RoomsController_hpp
#define RoomsController_hpp

#include "../utils/Nickname.hpp"

#include "oatpp-websocket/Handshaker.hpp"

#include "oatpp/web/server/api/ApiController.hpp"
#include "oatpp/network/ConnectionHandler.hpp"

#include "oatpp/core/macro/codegen.hpp"
#include "oatpp/core/macro/component.hpp"

#include OATPP_CODEGEN_BEGIN(ApiController) /// <-- Begin Code-Gen

#define WS_SUBPROTOCOL "protoo"

class RoomsController : public oatpp::web::server::api::ApiController {
private:
  typedef RoomsController __ControllerType;
private:
  OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, websocketConnectionHandler, "websocket");
public:
  RoomsController(OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
    : oatpp::web::server::api::ApiController(objectMapper)
  {}
public:
   
  //this._protooUrl = `ws://192.168.0.106:8001/?roomId=${roomInfo.roomId}&peerId=${roomInfo.userId}&forceH264=true&forceVP9=false`
  ENDPOINT_ASYNC("GET", "/*", WS) {

    ENDPOINT_ASYNC_INIT(WS)

    Action act() override {
        //HEADER(String, subprotocol, "Sec-WebSocket-Protocol");
        String subprotocol = request->getHeader("Sec-WebSocket-Protocol");
        OATPP_ASSERT_HTTP(subprotocol == WS_SUBPROTOCOL, Status::CODE_400, "unknown subprotocol")
        
        auto roomId = request->getQueryParameter("roomId","123456");
        auto peerId = request->getQueryParameter("peerId","123456");
        auto forceH264 = request->getQueryParameter("forceH264","false"); //type is oatpp::string should convert to bool
        auto forceVP9 = request->getQueryParameter("forceVP9","false");

        /* Websocket handshake */
        MS_lOGD("[Room] new connection roomId=%s peerId=%s", roomId->c_str(), peerId->c_str());
        auto response = oatpp::websocket::Handshaker::serversideHandshake(request->getHeaders(), controller->websocketConnectionHandler);

        auto parameters = std::make_shared<oatpp::network::ConnectionHandler::ParameterMap>();

        (*parameters)["roomId"] = roomId;
        (*parameters)["peerId"] = peerId;
        (*parameters)["forceH264"] = forceH264;
        (*parameters)["forceVP9"] = forceVP9;

        /* Set connection upgrade params */
        response->setConnectionUpgradeParameters(parameters);

        response->putHeader("Sec-WebSocket-Protocol", WS_SUBPROTOCOL);

        return _return(response);
    }

  };

};

#include OATPP_CODEGEN_END(ApiController) /// <-- End Code-Gen

#endif /* RoomsController_hpp */



================================================
FILE: demo/controller/StatisticsController.hpp
================================================
/***************************************************************************
 *
 * Project:   ______                ______ _
 *           / _____)              / _____) |          _
 *          | /      ____ ____ ___| /     | | _   ____| |_
 *          | |     / _  |  _ (___) |     | || \ / _  |  _)
 *          | \____( ( | | | | |  | \_____| | | ( ( | | |__
 *           \______)_||_|_| |_|   \______)_| |_|\_||_|\___)
 *
 *
 * Copyright 2020-present, Leonid Stryzhevskyi <lganzzzo@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************************/

#ifndef StatisticsController_hpp
#define StatisticsController_hpp

#include "../dto/ConfigDto.hpp"
#include "../utils/Statistics.hpp"

#include "oatpp/web/server/api/ApiController.hpp"
#include "oatpp/network/ConnectionHandler.hpp"

#include "oatpp/core/macro/codegen.hpp"
#include "oatpp/core/macro/component.hpp"


#include OATPP_CODEGEN_BEGIN(ApiController) /// <-- Begin Code-Gen

class StatisticsController : public oatpp::web::server::api::ApiController {
private:
  typedef StatisticsController __ControllerType;
private:
  OATPP_COMPONENT(oatpp::Object<ConfigDto>, m_appConfig);
  OATPP_COMPONENT(std::shared_ptr<Statistics>, m_statistics);
public:
  StatisticsController(OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
    : oatpp::web::server::api::ApiController(objectMapper)
  {}
public:

  ENDPOINT_ASYNC("GET", m_appConfig->statisticsUrl, Stats) {

    ENDPOINT_ASYNC_INIT(Stats)

    Action act() override {
      auto json = controller->m_statistics->getJsonData();
      auto response = controller->createResponse(Status::CODE_200, json);
      response->putHeader(Header::CONTENT_TYPE, "application/json");
      return _return(response);
    }

  };

};

#include OATPP_CODEGEN_END(ApiController) /// <-- End Code-Gen

#endif /* StatisticsController_hpp */


================================================
FILE: demo/dto/ConfigDto.hpp
================================================
/***************************************************************************
 *
 * Project:   ______                ______ _
 *           / _____)              / _____) |          _
 *          | /      ____ ____ ___| /     | | _   ____| |_
 *          | |     / _  |  _ (___) |     | || \ / _  |  _)
 *          | \____( ( | | | | |  | \_____| | | ( ( | | |__
 *           \______)_||_|_| |_|   \______)_| |_|\_||_|\___)
 *
 *
 * Copyright 2020-present, Leonid Stryzhevskyi <lganzzzo@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************************/

#ifndef ConfigDto_hpp
#define ConfigDto_hpp

#include "oatpp/core/Types.hpp"
#include "oatpp/core/macro/codegen.hpp"

#include "oatpp/core/data/stream/BufferStream.hpp"

#include OATPP_CODEGEN_BEGIN(DTO)

class ConfigDto : public oatpp::DTO {
public:

  DTO_INIT(ConfigDto, DTO)

  DTO_FIELD(String, statisticsUrl);

  DTO_FIELD(String, host);
  DTO_FIELD(UInt16, port);
  DTO_FIELD(Boolean, useTLS) = false;

  /**
   * Path to TLS private key file.
   */
  DTO_FIELD(String, tlsPrivateKeyPath);

  /**
   * Path to TLS certificate chain file.
   */
  DTO_FIELD(String, tlsCertificateChainPath);


  /**
   * Max size of the received bytes. (the whole MessageDto structure).
   * The actual payload is smaller.
   */
  DTO_FIELD(UInt64, maxMessageSizeBytes) = 8 * 1024; // Default - 8Kb

  /**
   * Number of the most recent messages to keep in the room history.
   */
  DTO_FIELD(UInt32, maxRoomHistoryMessages) = 100;

public:

  oatpp::String getHostString() {
    oatpp::data::stream::BufferOutputStream stream(256);
    v_uint16 defPort;
    if(useTLS) {
      defPort = 443;
    } else {
      defPort = 80;
    }
    stream << host;
    if(!port || defPort != port) {
      stream << ":" << port;
    }
    return stream.toString();
  }

  oatpp::String getCanonicalBaseUrl() {
    oatpp::data::stream::BufferOutputStream stream(256);
    v_uint16 defPort;
    if(useTLS) {
      stream << "https://";
      defPort = 443;
    } else {
      stream << "http://";
      defPort = 80;
    }
    stream << host;
    if(!port || defPort != port) {
      stream << ":" << port;
    }
    return stream.toString();
  }

  oatpp::String getWebsocketBaseUrl() {
    oatpp::data::stream::BufferOutputStream stream(256);
    if(useTLS) {
      stream << "wss://";
    } else {
      stream << "ws://";
    }
    stream << host << ":" << port;
    return stream.toString();
  }

  oatpp::String getStatsUrl() {
    return getCanonicalBaseUrl() + "/" + statisticsUrl;
  }

};

#include OATPP_CODEGEN_END(DTO)

#endif // ConfigDto_hpp


================================================
FILE: demo/dto/DTOs.hpp
================================================
/***************************************************************************
 *
 * Project:   ______                ______ _
 *           / _____)              / _____) |          _
 *          | /      ____ ____ ___| /     | | _   ____| |_
 *          | |     / _  |  _ (___) |     | || \ / _  |  _)
 *          | \____( ( | | | | |  | \_____| | | ( ( | | |__
 *           \______)_||_|_| |_|   \______)_| |_|\_||_|\___)
 *
 *
 * Copyright 2020-present, Leonid Stryzhevskyi <lganzzzo@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************************/

#ifndef DTOs_hpp
#define DTOs_hpp

#include "oatpp/core/Types.hpp"
#include "oatpp/core/macro/codegen.hpp"

#include OATPP_CODEGEN_
Download .txt
Showing preview only (1,604K chars total). Download the full file or copy to clipboard to get everything.
gitextract_pi_byr9p/

├── .gitignore
├── CMakeLists.txt
├── LICENSE
├── README.cn.md
├── README.md
├── build.sh
├── builddeps.sh
├── cmake/
│   └── llvm.toolchain.cmake
├── demo/
│   ├── AppComponent.hpp
│   ├── CMakeLists.txt
│   ├── Config.cpp
│   ├── Config.hpp
│   ├── PeerOld.cpp
│   ├── PeerOld.hpp
│   ├── RoomOld.cpp
│   ├── RoomOld.hpp
│   ├── Server.cpp
│   ├── Server.hpp
│   ├── Transfmt.cpp
│   ├── Transfmt.hpp
│   ├── config.json
│   ├── controller/
│   │   ├── RoomsController.hpp
│   │   └── StatisticsController.hpp
│   ├── dto/
│   │   ├── ConfigDto.hpp
│   │   └── DTOs.hpp
│   ├── main.cpp
│   ├── rooms/
│   │   ├── Lobby.cpp
│   │   ├── Lobby.hpp
│   │   ├── Message.cpp
│   │   ├── Message.h
│   │   ├── Peer.cpp
│   │   ├── Peer.hpp
│   │   ├── Room.cpp
│   │   └── Room.hpp
│   └── utils/
│       ├── Nickname.cpp
│       ├── Nickname.hpp
│       ├── Statistics.cpp
│       ├── Statistics.hpp
│       ├── util.cpp
│       └── util.h
├── deps/
│   ├── boost/
│   │   ├── build.bat
│   │   ├── build.sh
│   │   └── include/
│   │       └── boost/
│   │           ├── accumulators/
│   │           │   ├── accumulators.hpp
│   │           │   ├── accumulators_fwd.hpp
│   │           │   ├── framework/
│   │           │   │   ├── accumulator_base.hpp
│   │           │   │   ├── accumulator_concept.hpp
│   │           │   │   ├── accumulator_set.hpp
│   │           │   │   ├── accumulators/
│   │           │   │   │   ├── droppable_accumulator.hpp
│   │           │   │   │   ├── external_accumulator.hpp
│   │           │   │   │   ├── reference_accumulator.hpp
│   │           │   │   │   └── value_accumulator.hpp
│   │           │   │   ├── depends_on.hpp
│   │           │   │   ├── external.hpp
│   │           │   │   ├── extractor.hpp
│   │           │   │   ├── features.hpp
│   │           │   │   └── parameters/
│   │           │   │       ├── accumulator.hpp
│   │           │   │       ├── sample.hpp
│   │           │   │       ├── weight.hpp
│   │           │   │       └── weights.hpp
│   │           │   ├── numeric/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── function1.hpp
│   │           │   │   │   ├── function2.hpp
│   │           │   │   │   ├── function3.hpp
│   │           │   │   │   ├── function4.hpp
│   │           │   │   │   ├── function_n.hpp
│   │           │   │   │   └── pod_singleton.hpp
│   │           │   │   ├── functional/
│   │           │   │   │   ├── complex.hpp
│   │           │   │   │   ├── valarray.hpp
│   │           │   │   │   └── vector.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   └── functional_fwd.hpp
│   │           │   ├── statistics/
│   │           │   │   ├── count.hpp
│   │           │   │   ├── covariance.hpp
│   │           │   │   ├── density.hpp
│   │           │   │   ├── error_of.hpp
│   │           │   │   ├── error_of_mean.hpp
│   │           │   │   ├── extended_p_square.hpp
│   │           │   │   ├── extended_p_square_quantile.hpp
│   │           │   │   ├── kurtosis.hpp
│   │           │   │   ├── max.hpp
│   │           │   │   ├── mean.hpp
│   │           │   │   ├── median.hpp
│   │           │   │   ├── min.hpp
│   │           │   │   ├── moment.hpp
│   │           │   │   ├── p_square_cumul_dist.hpp
│   │           │   │   ├── p_square_cumulative_distribution.hpp
│   │           │   │   ├── p_square_quantile.hpp
│   │           │   │   ├── parameters/
│   │           │   │   │   └── quantile_probability.hpp
│   │           │   │   ├── peaks_over_threshold.hpp
│   │           │   │   ├── pot_quantile.hpp
│   │           │   │   ├── pot_tail_mean.hpp
│   │           │   │   ├── rolling_count.hpp
│   │           │   │   ├── rolling_mean.hpp
│   │           │   │   ├── rolling_moment.hpp
│   │           │   │   ├── rolling_sum.hpp
│   │           │   │   ├── rolling_variance.hpp
│   │           │   │   ├── rolling_window.hpp
│   │           │   │   ├── skewness.hpp
│   │           │   │   ├── stats.hpp
│   │           │   │   ├── sum.hpp
│   │           │   │   ├── sum_kahan.hpp
│   │           │   │   ├── tail.hpp
│   │           │   │   ├── tail_mean.hpp
│   │           │   │   ├── tail_quantile.hpp
│   │           │   │   ├── tail_variate.hpp
│   │           │   │   ├── tail_variate_means.hpp
│   │           │   │   ├── times2_iterator.hpp
│   │           │   │   ├── variance.hpp
│   │           │   │   ├── variates/
│   │           │   │   │   └── covariate.hpp
│   │           │   │   ├── weighted_covariance.hpp
│   │           │   │   ├── weighted_density.hpp
│   │           │   │   ├── weighted_extended_p_square.hpp
│   │           │   │   ├── weighted_kurtosis.hpp
│   │           │   │   ├── weighted_mean.hpp
│   │           │   │   ├── weighted_median.hpp
│   │           │   │   ├── weighted_moment.hpp
│   │           │   │   ├── weighted_p_square_cumul_dist.hpp
│   │           │   │   ├── weighted_p_square_cumulative_distribution.hpp
│   │           │   │   ├── weighted_p_square_quantile.hpp
│   │           │   │   ├── weighted_peaks_over_threshold.hpp
│   │           │   │   ├── weighted_skewness.hpp
│   │           │   │   ├── weighted_sum.hpp
│   │           │   │   ├── weighted_sum_kahan.hpp
│   │           │   │   ├── weighted_tail_mean.hpp
│   │           │   │   ├── weighted_tail_quantile.hpp
│   │           │   │   ├── weighted_tail_variate_means.hpp
│   │           │   │   ├── weighted_variance.hpp
│   │           │   │   └── with_error.hpp
│   │           │   ├── statistics.hpp
│   │           │   └── statistics_fwd.hpp
│   │           ├── algorithm/
│   │           │   ├── algorithm.hpp
│   │           │   ├── apply_permutation.hpp
│   │           │   ├── clamp.hpp
│   │           │   ├── cxx11/
│   │           │   │   ├── all_of.hpp
│   │           │   │   ├── any_of.hpp
│   │           │   │   ├── copy_if.hpp
│   │           │   │   ├── copy_n.hpp
│   │           │   │   ├── find_if_not.hpp
│   │           │   │   ├── iota.hpp
│   │           │   │   ├── is_partitioned.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── none_of.hpp
│   │           │   │   ├── one_of.hpp
│   │           │   │   ├── partition_copy.hpp
│   │           │   │   └── partition_point.hpp
│   │           │   ├── cxx14/
│   │           │   │   ├── equal.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   └── mismatch.hpp
│   │           │   ├── cxx17/
│   │           │   │   ├── exclusive_scan.hpp
│   │           │   │   ├── for_each_n.hpp
│   │           │   │   ├── inclusive_scan.hpp
│   │           │   │   ├── reduce.hpp
│   │           │   │   ├── transform_exclusive_scan.hpp
│   │           │   │   ├── transform_inclusive_scan.hpp
│   │           │   │   └── transform_reduce.hpp
│   │           │   ├── find_backward.hpp
│   │           │   ├── find_not.hpp
│   │           │   ├── gather.hpp
│   │           │   ├── hex.hpp
│   │           │   ├── is_palindrome.hpp
│   │           │   ├── is_partitioned_until.hpp
│   │           │   ├── minmax.hpp
│   │           │   ├── minmax_element.hpp
│   │           │   ├── searching/
│   │           │   │   ├── boyer_moore.hpp
│   │           │   │   ├── boyer_moore_horspool.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── bm_traits.hpp
│   │           │   │   │   └── debugging.hpp
│   │           │   │   └── knuth_morris_pratt.hpp
│   │           │   ├── sort_subrange.hpp
│   │           │   ├── string/
│   │           │   │   ├── case_conv.hpp
│   │           │   │   ├── classification.hpp
│   │           │   │   ├── compare.hpp
│   │           │   │   ├── concept.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── constants.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── case_conv.hpp
│   │           │   │   │   ├── classification.hpp
│   │           │   │   │   ├── find_format.hpp
│   │           │   │   │   ├── find_format_all.hpp
│   │           │   │   │   ├── find_format_store.hpp
│   │           │   │   │   ├── find_iterator.hpp
│   │           │   │   │   ├── finder.hpp
│   │           │   │   │   ├── finder_regex.hpp
│   │           │   │   │   ├── formatter.hpp
│   │           │   │   │   ├── formatter_regex.hpp
│   │           │   │   │   ├── predicate.hpp
│   │           │   │   │   ├── replace_storage.hpp
│   │           │   │   │   ├── sequence.hpp
│   │           │   │   │   ├── trim.hpp
│   │           │   │   │   └── util.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_format.hpp
│   │           │   │   ├── find_iterator.hpp
│   │           │   │   ├── finder.hpp
│   │           │   │   ├── formatter.hpp
│   │           │   │   ├── iter_find.hpp
│   │           │   │   ├── join.hpp
│   │           │   │   ├── predicate.hpp
│   │           │   │   ├── predicate_facade.hpp
│   │           │   │   ├── regex.hpp
│   │           │   │   ├── regex_find_format.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── sequence_traits.hpp
│   │           │   │   ├── split.hpp
│   │           │   │   ├── std/
│   │           │   │   │   ├── list_traits.hpp
│   │           │   │   │   ├── rope_traits.hpp
│   │           │   │   │   ├── slist_traits.hpp
│   │           │   │   │   └── string_traits.hpp
│   │           │   │   ├── std_containers_traits.hpp
│   │           │   │   ├── trim.hpp
│   │           │   │   ├── trim_all.hpp
│   │           │   │   └── yes_no_type.hpp
│   │           │   ├── string.hpp
│   │           │   └── string_regex.hpp
│   │           ├── align/
│   │           │   ├── align.hpp
│   │           │   ├── align_down.hpp
│   │           │   ├── align_up.hpp
│   │           │   ├── aligned_alloc.hpp
│   │           │   ├── aligned_allocator.hpp
│   │           │   ├── aligned_allocator_adaptor.hpp
│   │           │   ├── aligned_allocator_adaptor_forward.hpp
│   │           │   ├── aligned_allocator_forward.hpp
│   │           │   ├── aligned_delete.hpp
│   │           │   ├── aligned_delete_forward.hpp
│   │           │   ├── alignment_of.hpp
│   │           │   ├── alignment_of_forward.hpp
│   │           │   ├── assume_aligned.hpp
│   │           │   ├── detail/
│   │           │   │   ├── add_reference.hpp
│   │           │   │   ├── align.hpp
│   │           │   │   ├── align_cxx11.hpp
│   │           │   │   ├── align_down.hpp
│   │           │   │   ├── align_up.hpp
│   │           │   │   ├── aligned_alloc.hpp
│   │           │   │   ├── aligned_alloc_android.hpp
│   │           │   │   ├── aligned_alloc_macos.hpp
│   │           │   │   ├── aligned_alloc_mingw.hpp
│   │           │   │   ├── aligned_alloc_msvc.hpp
│   │           │   │   ├── aligned_alloc_new.hpp
│   │           │   │   ├── aligned_alloc_posix.hpp
│   │           │   │   ├── aligned_alloc_sunos.hpp
│   │           │   │   ├── alignment_of.hpp
│   │           │   │   ├── alignment_of_clang.hpp
│   │           │   │   ├── alignment_of_codegear.hpp
│   │           │   │   ├── alignment_of_cxx11.hpp
│   │           │   │   ├── alignment_of_gcc.hpp
│   │           │   │   ├── alignment_of_msvc.hpp
│   │           │   │   ├── assume_aligned.hpp
│   │           │   │   ├── assume_aligned_clang.hpp
│   │           │   │   ├── assume_aligned_gcc.hpp
│   │           │   │   ├── assume_aligned_intel.hpp
│   │           │   │   ├── assume_aligned_msvc.hpp
│   │           │   │   ├── element_type.hpp
│   │           │   │   ├── integral_constant.hpp
│   │           │   │   ├── is_aligned.hpp
│   │           │   │   ├── is_alignment.hpp
│   │           │   │   ├── is_alignment_constant.hpp
│   │           │   │   ├── max_align.hpp
│   │           │   │   ├── max_objects.hpp
│   │           │   │   ├── max_size.hpp
│   │           │   │   ├── min_size.hpp
│   │           │   │   ├── not_pointer.hpp
│   │           │   │   └── throw_exception.hpp
│   │           │   └── is_aligned.hpp
│   │           ├── align.hpp
│   │           ├── aligned_storage.hpp
│   │           ├── any.hpp
│   │           ├── archive/
│   │           │   ├── archive_exception.hpp
│   │           │   ├── basic_archive.hpp
│   │           │   ├── basic_binary_iarchive.hpp
│   │           │   ├── basic_binary_iprimitive.hpp
│   │           │   ├── basic_binary_oarchive.hpp
│   │           │   ├── basic_binary_oprimitive.hpp
│   │           │   ├── basic_streambuf_locale_saver.hpp
│   │           │   ├── basic_text_iarchive.hpp
│   │           │   ├── basic_text_iprimitive.hpp
│   │           │   ├── basic_text_oarchive.hpp
│   │           │   ├── basic_text_oprimitive.hpp
│   │           │   ├── basic_xml_archive.hpp
│   │           │   ├── basic_xml_iarchive.hpp
│   │           │   ├── basic_xml_oarchive.hpp
│   │           │   ├── binary_iarchive.hpp
│   │           │   ├── binary_iarchive_impl.hpp
│   │           │   ├── binary_oarchive.hpp
│   │           │   ├── binary_oarchive_impl.hpp
│   │           │   ├── binary_wiarchive.hpp
│   │           │   ├── binary_woarchive.hpp
│   │           │   ├── codecvt_null.hpp
│   │           │   ├── detail/
│   │           │   │   ├── abi_prefix.hpp
│   │           │   │   ├── abi_suffix.hpp
│   │           │   │   ├── archive_serializer_map.hpp
│   │           │   │   ├── auto_link_archive.hpp
│   │           │   │   ├── auto_link_warchive.hpp
│   │           │   │   ├── basic_iarchive.hpp
│   │           │   │   ├── basic_iserializer.hpp
│   │           │   │   ├── basic_oarchive.hpp
│   │           │   │   ├── basic_oserializer.hpp
│   │           │   │   ├── basic_pointer_iserializer.hpp
│   │           │   │   ├── basic_pointer_oserializer.hpp
│   │           │   │   ├── basic_serializer.hpp
│   │           │   │   ├── basic_serializer_map.hpp
│   │           │   │   ├── check.hpp
│   │           │   │   ├── common_iarchive.hpp
│   │           │   │   ├── common_oarchive.hpp
│   │           │   │   ├── decl.hpp
│   │           │   │   ├── helper_collection.hpp
│   │           │   │   ├── interface_iarchive.hpp
│   │           │   │   ├── interface_oarchive.hpp
│   │           │   │   ├── iserializer.hpp
│   │           │   │   ├── oserializer.hpp
│   │           │   │   ├── polymorphic_iarchive_route.hpp
│   │           │   │   ├── polymorphic_oarchive_route.hpp
│   │           │   │   ├── register_archive.hpp
│   │           │   │   └── utf8_codecvt_facet.hpp
│   │           │   ├── dinkumware.hpp
│   │           │   ├── impl/
│   │           │   │   ├── archive_serializer_map.ipp
│   │           │   │   ├── basic_binary_iarchive.ipp
│   │           │   │   ├── basic_binary_iprimitive.ipp
│   │           │   │   ├── basic_binary_oarchive.ipp
│   │           │   │   ├── basic_binary_oprimitive.ipp
│   │           │   │   ├── basic_text_iarchive.ipp
│   │           │   │   ├── basic_text_iprimitive.ipp
│   │           │   │   ├── basic_text_oarchive.ipp
│   │           │   │   ├── basic_text_oprimitive.ipp
│   │           │   │   ├── basic_xml_grammar.hpp
│   │           │   │   ├── basic_xml_iarchive.ipp
│   │           │   │   ├── basic_xml_oarchive.ipp
│   │           │   │   ├── text_iarchive_impl.ipp
│   │           │   │   ├── text_oarchive_impl.ipp
│   │           │   │   ├── text_wiarchive_impl.ipp
│   │           │   │   ├── text_woarchive_impl.ipp
│   │           │   │   ├── xml_iarchive_impl.ipp
│   │           │   │   ├── xml_oarchive_impl.ipp
│   │           │   │   ├── xml_wiarchive_impl.ipp
│   │           │   │   └── xml_woarchive_impl.ipp
│   │           │   ├── iterators/
│   │           │   │   ├── base64_exception.hpp
│   │           │   │   ├── base64_from_binary.hpp
│   │           │   │   ├── binary_from_base64.hpp
│   │           │   │   ├── dataflow.hpp
│   │           │   │   ├── dataflow_exception.hpp
│   │           │   │   ├── escape.hpp
│   │           │   │   ├── insert_linebreaks.hpp
│   │           │   │   ├── istream_iterator.hpp
│   │           │   │   ├── mb_from_wchar.hpp
│   │           │   │   ├── ostream_iterator.hpp
│   │           │   │   ├── remove_whitespace.hpp
│   │           │   │   ├── transform_width.hpp
│   │           │   │   ├── unescape.hpp
│   │           │   │   ├── wchar_from_mb.hpp
│   │           │   │   ├── xml_escape.hpp
│   │           │   │   ├── xml_unescape.hpp
│   │           │   │   └── xml_unescape_exception.hpp
│   │           │   ├── polymorphic_binary_iarchive.hpp
│   │           │   ├── polymorphic_binary_oarchive.hpp
│   │           │   ├── polymorphic_iarchive.hpp
│   │           │   ├── polymorphic_oarchive.hpp
│   │           │   ├── polymorphic_text_iarchive.hpp
│   │           │   ├── polymorphic_text_oarchive.hpp
│   │           │   ├── polymorphic_text_wiarchive.hpp
│   │           │   ├── polymorphic_text_woarchive.hpp
│   │           │   ├── polymorphic_xml_iarchive.hpp
│   │           │   ├── polymorphic_xml_oarchive.hpp
│   │           │   ├── polymorphic_xml_wiarchive.hpp
│   │           │   ├── polymorphic_xml_woarchive.hpp
│   │           │   ├── text_iarchive.hpp
│   │           │   ├── text_oarchive.hpp
│   │           │   ├── text_wiarchive.hpp
│   │           │   ├── text_woarchive.hpp
│   │           │   ├── tmpdir.hpp
│   │           │   ├── wcslen.hpp
│   │           │   ├── xml_archive_exception.hpp
│   │           │   ├── xml_iarchive.hpp
│   │           │   ├── xml_oarchive.hpp
│   │           │   ├── xml_wiarchive.hpp
│   │           │   └── xml_woarchive.hpp
│   │           ├── array.hpp
│   │           ├── asio/
│   │           │   ├── any_io_executor.hpp
│   │           │   ├── associated_allocator.hpp
│   │           │   ├── associated_executor.hpp
│   │           │   ├── async_result.hpp
│   │           │   ├── awaitable.hpp
│   │           │   ├── basic_datagram_socket.hpp
│   │           │   ├── basic_deadline_timer.hpp
│   │           │   ├── basic_io_object.hpp
│   │           │   ├── basic_raw_socket.hpp
│   │           │   ├── basic_seq_packet_socket.hpp
│   │           │   ├── basic_serial_port.hpp
│   │           │   ├── basic_signal_set.hpp
│   │           │   ├── basic_socket.hpp
│   │           │   ├── basic_socket_acceptor.hpp
│   │           │   ├── basic_socket_iostream.hpp
│   │           │   ├── basic_socket_streambuf.hpp
│   │           │   ├── basic_stream_socket.hpp
│   │           │   ├── basic_streambuf.hpp
│   │           │   ├── basic_streambuf_fwd.hpp
│   │           │   ├── basic_waitable_timer.hpp
│   │           │   ├── bind_executor.hpp
│   │           │   ├── buffer.hpp
│   │           │   ├── buffered_read_stream.hpp
│   │           │   ├── buffered_read_stream_fwd.hpp
│   │           │   ├── buffered_stream.hpp
│   │           │   ├── buffered_stream_fwd.hpp
│   │           │   ├── buffered_write_stream.hpp
│   │           │   ├── buffered_write_stream_fwd.hpp
│   │           │   ├── buffers_iterator.hpp
│   │           │   ├── co_spawn.hpp
│   │           │   ├── completion_condition.hpp
│   │           │   ├── compose.hpp
│   │           │   ├── connect.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── deadline_timer.hpp
│   │           │   ├── defer.hpp
│   │           │   ├── detached.hpp
│   │           │   ├── detail/
│   │           │   │   ├── array.hpp
│   │           │   │   ├── array_fwd.hpp
│   │           │   │   ├── assert.hpp
│   │           │   │   ├── atomic_count.hpp
│   │           │   │   ├── base_from_completion_cond.hpp
│   │           │   │   ├── bind_handler.hpp
│   │           │   │   ├── blocking_executor_op.hpp
│   │           │   │   ├── buffer_resize_guard.hpp
│   │           │   │   ├── buffer_sequence_adapter.hpp
│   │           │   │   ├── buffered_stream_storage.hpp
│   │           │   │   ├── bulk_executor_op.hpp
│   │           │   │   ├── call_stack.hpp
│   │           │   │   ├── chrono.hpp
│   │           │   │   ├── chrono_time_traits.hpp
│   │           │   │   ├── completion_handler.hpp
│   │           │   │   ├── concurrency_hint.hpp
│   │           │   │   ├── conditionally_enabled_event.hpp
│   │           │   │   ├── conditionally_enabled_mutex.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── consuming_buffers.hpp
│   │           │   │   ├── cstddef.hpp
│   │           │   │   ├── cstdint.hpp
│   │           │   │   ├── date_time_fwd.hpp
│   │           │   │   ├── deadline_timer_service.hpp
│   │           │   │   ├── dependent_type.hpp
│   │           │   │   ├── descriptor_ops.hpp
│   │           │   │   ├── descriptor_read_op.hpp
│   │           │   │   ├── descriptor_write_op.hpp
│   │           │   │   ├── dev_poll_reactor.hpp
│   │           │   │   ├── epoll_reactor.hpp
│   │           │   │   ├── event.hpp
│   │           │   │   ├── eventfd_select_interrupter.hpp
│   │           │   │   ├── executor_function.hpp
│   │           │   │   ├── executor_op.hpp
│   │           │   │   ├── fd_set_adapter.hpp
│   │           │   │   ├── fenced_block.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── future.hpp
│   │           │   │   ├── gcc_arm_fenced_block.hpp
│   │           │   │   ├── gcc_hppa_fenced_block.hpp
│   │           │   │   ├── gcc_sync_fenced_block.hpp
│   │           │   │   ├── gcc_x86_fenced_block.hpp
│   │           │   │   ├── global.hpp
│   │           │   │   ├── handler_alloc_helpers.hpp
│   │           │   │   ├── handler_cont_helpers.hpp
│   │           │   │   ├── handler_invoke_helpers.hpp
│   │           │   │   ├── handler_tracking.hpp
│   │           │   │   ├── handler_type_requirements.hpp
│   │           │   │   ├── handler_work.hpp
│   │           │   │   ├── hash_map.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── buffer_sequence_adapter.ipp
│   │           │   │   │   ├── descriptor_ops.ipp
│   │           │   │   │   ├── dev_poll_reactor.hpp
│   │           │   │   │   ├── dev_poll_reactor.ipp
│   │           │   │   │   ├── epoll_reactor.hpp
│   │           │   │   │   ├── epoll_reactor.ipp
│   │           │   │   │   ├── eventfd_select_interrupter.ipp
│   │           │   │   │   ├── handler_tracking.ipp
│   │           │   │   │   ├── kqueue_reactor.hpp
│   │           │   │   │   ├── kqueue_reactor.ipp
│   │           │   │   │   ├── null_event.ipp
│   │           │   │   │   ├── pipe_select_interrupter.ipp
│   │           │   │   │   ├── posix_event.ipp
│   │           │   │   │   ├── posix_mutex.ipp
│   │           │   │   │   ├── posix_thread.ipp
│   │           │   │   │   ├── posix_tss_ptr.ipp
│   │           │   │   │   ├── reactive_descriptor_service.ipp
│   │           │   │   │   ├── reactive_serial_port_service.ipp
│   │           │   │   │   ├── reactive_socket_service_base.ipp
│   │           │   │   │   ├── resolver_service_base.ipp
│   │           │   │   │   ├── scheduler.ipp
│   │           │   │   │   ├── select_reactor.hpp
│   │           │   │   │   ├── select_reactor.ipp
│   │           │   │   │   ├── service_registry.hpp
│   │           │   │   │   ├── service_registry.ipp
│   │           │   │   │   ├── signal_set_service.ipp
│   │           │   │   │   ├── socket_ops.ipp
│   │           │   │   │   ├── socket_select_interrupter.ipp
│   │           │   │   │   ├── strand_executor_service.hpp
│   │           │   │   │   ├── strand_executor_service.ipp
│   │           │   │   │   ├── strand_service.hpp
│   │           │   │   │   ├── strand_service.ipp
│   │           │   │   │   ├── throw_error.ipp
│   │           │   │   │   ├── timer_queue_ptime.ipp
│   │           │   │   │   ├── timer_queue_set.ipp
│   │           │   │   │   ├── win_event.ipp
│   │           │   │   │   ├── win_iocp_handle_service.ipp
│   │           │   │   │   ├── win_iocp_io_context.hpp
│   │           │   │   │   ├── win_iocp_io_context.ipp
│   │           │   │   │   ├── win_iocp_serial_port_service.ipp
│   │           │   │   │   ├── win_iocp_socket_service_base.ipp
│   │           │   │   │   ├── win_mutex.ipp
│   │           │   │   │   ├── win_object_handle_service.ipp
│   │           │   │   │   ├── win_static_mutex.ipp
│   │           │   │   │   ├── win_thread.ipp
│   │           │   │   │   ├── win_tss_ptr.ipp
│   │           │   │   │   ├── winrt_ssocket_service_base.ipp
│   │           │   │   │   ├── winrt_timer_scheduler.hpp
│   │           │   │   │   ├── winrt_timer_scheduler.ipp
│   │           │   │   │   └── winsock_init.ipp
│   │           │   │   ├── io_control.hpp
│   │           │   │   ├── io_object_impl.hpp
│   │           │   │   ├── is_buffer_sequence.hpp
│   │           │   │   ├── is_executor.hpp
│   │           │   │   ├── keyword_tss_ptr.hpp
│   │           │   │   ├── kqueue_reactor.hpp
│   │           │   │   ├── limits.hpp
│   │           │   │   ├── local_free_on_block_exit.hpp
│   │           │   │   ├── macos_fenced_block.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── non_const_lvalue.hpp
│   │           │   │   ├── noncopyable.hpp
│   │           │   │   ├── null_event.hpp
│   │           │   │   ├── null_fenced_block.hpp
│   │           │   │   ├── null_global.hpp
│   │           │   │   ├── null_mutex.hpp
│   │           │   │   ├── null_reactor.hpp
│   │           │   │   ├── null_signal_blocker.hpp
│   │           │   │   ├── null_socket_service.hpp
│   │           │   │   ├── null_static_mutex.hpp
│   │           │   │   ├── null_thread.hpp
│   │           │   │   ├── null_tss_ptr.hpp
│   │           │   │   ├── object_pool.hpp
│   │           │   │   ├── old_win_sdk_compat.hpp
│   │           │   │   ├── op_queue.hpp
│   │           │   │   ├── operation.hpp
│   │           │   │   ├── pipe_select_interrupter.hpp
│   │           │   │   ├── pop_options.hpp
│   │           │   │   ├── posix_event.hpp
│   │           │   │   ├── posix_fd_set_adapter.hpp
│   │           │   │   ├── posix_global.hpp
│   │           │   │   ├── posix_mutex.hpp
│   │           │   │   ├── posix_signal_blocker.hpp
│   │           │   │   ├── posix_static_mutex.hpp
│   │           │   │   ├── posix_thread.hpp
│   │           │   │   ├── posix_tss_ptr.hpp
│   │           │   │   ├── push_options.hpp
│   │           │   │   ├── reactive_descriptor_service.hpp
│   │           │   │   ├── reactive_null_buffers_op.hpp
│   │           │   │   ├── reactive_serial_port_service.hpp
│   │           │   │   ├── reactive_socket_accept_op.hpp
│   │           │   │   ├── reactive_socket_connect_op.hpp
│   │           │   │   ├── reactive_socket_recv_op.hpp
│   │           │   │   ├── reactive_socket_recvfrom_op.hpp
│   │           │   │   ├── reactive_socket_recvmsg_op.hpp
│   │           │   │   ├── reactive_socket_send_op.hpp
│   │           │   │   ├── reactive_socket_sendto_op.hpp
│   │           │   │   ├── reactive_socket_service.hpp
│   │           │   │   ├── reactive_socket_service_base.hpp
│   │           │   │   ├── reactive_wait_op.hpp
│   │           │   │   ├── reactor.hpp
│   │           │   │   ├── reactor_fwd.hpp
│   │           │   │   ├── reactor_op.hpp
│   │           │   │   ├── reactor_op_queue.hpp
│   │           │   │   ├── recycling_allocator.hpp
│   │           │   │   ├── regex_fwd.hpp
│   │           │   │   ├── resolve_endpoint_op.hpp
│   │           │   │   ├── resolve_op.hpp
│   │           │   │   ├── resolve_query_op.hpp
│   │           │   │   ├── resolver_service.hpp
│   │           │   │   ├── resolver_service_base.hpp
│   │           │   │   ├── scheduler.hpp
│   │           │   │   ├── scheduler_operation.hpp
│   │           │   │   ├── scheduler_thread_info.hpp
│   │           │   │   ├── scoped_lock.hpp
│   │           │   │   ├── scoped_ptr.hpp
│   │           │   │   ├── select_interrupter.hpp
│   │           │   │   ├── select_reactor.hpp
│   │           │   │   ├── service_registry.hpp
│   │           │   │   ├── signal_blocker.hpp
│   │           │   │   ├── signal_handler.hpp
│   │           │   │   ├── signal_init.hpp
│   │           │   │   ├── signal_op.hpp
│   │           │   │   ├── signal_set_service.hpp
│   │           │   │   ├── socket_holder.hpp
│   │           │   │   ├── socket_ops.hpp
│   │           │   │   ├── socket_option.hpp
│   │           │   │   ├── socket_select_interrupter.hpp
│   │           │   │   ├── socket_types.hpp
│   │           │   │   ├── solaris_fenced_block.hpp
│   │           │   │   ├── source_location.hpp
│   │           │   │   ├── static_mutex.hpp
│   │           │   │   ├── std_event.hpp
│   │           │   │   ├── std_fenced_block.hpp
│   │           │   │   ├── std_global.hpp
│   │           │   │   ├── std_mutex.hpp
│   │           │   │   ├── std_static_mutex.hpp
│   │           │   │   ├── std_thread.hpp
│   │           │   │   ├── strand_executor_service.hpp
│   │           │   │   ├── strand_service.hpp
│   │           │   │   ├── string_view.hpp
│   │           │   │   ├── thread.hpp
│   │           │   │   ├── thread_context.hpp
│   │           │   │   ├── thread_group.hpp
│   │           │   │   ├── thread_info_base.hpp
│   │           │   │   ├── throw_error.hpp
│   │           │   │   ├── throw_exception.hpp
│   │           │   │   ├── timer_queue.hpp
│   │           │   │   ├── timer_queue_base.hpp
│   │           │   │   ├── timer_queue_ptime.hpp
│   │           │   │   ├── timer_queue_set.hpp
│   │           │   │   ├── timer_scheduler.hpp
│   │           │   │   ├── timer_scheduler_fwd.hpp
│   │           │   │   ├── tss_ptr.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── variadic_templates.hpp
│   │           │   │   ├── wait_handler.hpp
│   │           │   │   ├── wait_op.hpp
│   │           │   │   ├── win_event.hpp
│   │           │   │   ├── win_fd_set_adapter.hpp
│   │           │   │   ├── win_fenced_block.hpp
│   │           │   │   ├── win_global.hpp
│   │           │   │   ├── win_iocp_handle_read_op.hpp
│   │           │   │   ├── win_iocp_handle_service.hpp
│   │           │   │   ├── win_iocp_handle_write_op.hpp
│   │           │   │   ├── win_iocp_io_context.hpp
│   │           │   │   ├── win_iocp_null_buffers_op.hpp
│   │           │   │   ├── win_iocp_operation.hpp
│   │           │   │   ├── win_iocp_overlapped_op.hpp
│   │           │   │   ├── win_iocp_overlapped_ptr.hpp
│   │           │   │   ├── win_iocp_serial_port_service.hpp
│   │           │   │   ├── win_iocp_socket_accept_op.hpp
│   │           │   │   ├── win_iocp_socket_connect_op.hpp
│   │           │   │   ├── win_iocp_socket_recv_op.hpp
│   │           │   │   ├── win_iocp_socket_recvfrom_op.hpp
│   │           │   │   ├── win_iocp_socket_recvmsg_op.hpp
│   │           │   │   ├── win_iocp_socket_send_op.hpp
│   │           │   │   ├── win_iocp_socket_service.hpp
│   │           │   │   ├── win_iocp_socket_service_base.hpp
│   │           │   │   ├── win_iocp_thread_info.hpp
│   │           │   │   ├── win_iocp_wait_op.hpp
│   │           │   │   ├── win_mutex.hpp
│   │           │   │   ├── win_object_handle_service.hpp
│   │           │   │   ├── win_static_mutex.hpp
│   │           │   │   ├── win_thread.hpp
│   │           │   │   ├── win_tss_ptr.hpp
│   │           │   │   ├── winapp_thread.hpp
│   │           │   │   ├── wince_thread.hpp
│   │           │   │   ├── winrt_async_manager.hpp
│   │           │   │   ├── winrt_async_op.hpp
│   │           │   │   ├── winrt_resolve_op.hpp
│   │           │   │   ├── winrt_resolver_service.hpp
│   │           │   │   ├── winrt_socket_connect_op.hpp
│   │           │   │   ├── winrt_socket_recv_op.hpp
│   │           │   │   ├── winrt_socket_send_op.hpp
│   │           │   │   ├── winrt_ssocket_service.hpp
│   │           │   │   ├── winrt_ssocket_service_base.hpp
│   │           │   │   ├── winrt_timer_scheduler.hpp
│   │           │   │   ├── winrt_utils.hpp
│   │           │   │   ├── winsock_init.hpp
│   │           │   │   ├── work_dispatcher.hpp
│   │           │   │   └── wrapped_handler.hpp
│   │           │   ├── dispatch.hpp
│   │           │   ├── error.hpp
│   │           │   ├── execution/
│   │           │   │   ├── allocator.hpp
│   │           │   │   ├── any_executor.hpp
│   │           │   │   ├── bad_executor.hpp
│   │           │   │   ├── blocking.hpp
│   │           │   │   ├── blocking_adaptation.hpp
│   │           │   │   ├── bulk_execute.hpp
│   │           │   │   ├── bulk_guarantee.hpp
│   │           │   │   ├── connect.hpp
│   │           │   │   ├── context.hpp
│   │           │   │   ├── context_as.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── as_invocable.hpp
│   │           │   │   │   ├── as_operation.hpp
│   │           │   │   │   ├── as_receiver.hpp
│   │           │   │   │   ├── bulk_sender.hpp
│   │           │   │   │   ├── submit_receiver.hpp
│   │           │   │   │   └── void_receiver.hpp
│   │           │   │   ├── execute.hpp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── bad_executor.ipp
│   │           │   │   │   └── receiver_invocation_error.ipp
│   │           │   │   ├── invocable_archetype.hpp
│   │           │   │   ├── mapping.hpp
│   │           │   │   ├── occupancy.hpp
│   │           │   │   ├── operation_state.hpp
│   │           │   │   ├── outstanding_work.hpp
│   │           │   │   ├── prefer_only.hpp
│   │           │   │   ├── receiver.hpp
│   │           │   │   ├── receiver_invocation_error.hpp
│   │           │   │   ├── relationship.hpp
│   │           │   │   ├── schedule.hpp
│   │           │   │   ├── scheduler.hpp
│   │           │   │   ├── sender.hpp
│   │           │   │   ├── set_done.hpp
│   │           │   │   ├── set_error.hpp
│   │           │   │   ├── set_value.hpp
│   │           │   │   ├── start.hpp
│   │           │   │   └── submit.hpp
│   │           │   ├── execution.hpp
│   │           │   ├── execution_context.hpp
│   │           │   ├── executor.hpp
│   │           │   ├── executor_work_guard.hpp
│   │           │   ├── generic/
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── datagram_protocol.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── endpoint.ipp
│   │           │   │   ├── raw_protocol.hpp
│   │           │   │   ├── seq_packet_protocol.hpp
│   │           │   │   └── stream_protocol.hpp
│   │           │   ├── handler_alloc_hook.hpp
│   │           │   ├── handler_continuation_hook.hpp
│   │           │   ├── handler_invoke_hook.hpp
│   │           │   ├── high_resolution_timer.hpp
│   │           │   ├── impl/
│   │           │   │   ├── awaitable.hpp
│   │           │   │   ├── buffered_read_stream.hpp
│   │           │   │   ├── buffered_write_stream.hpp
│   │           │   │   ├── co_spawn.hpp
│   │           │   │   ├── compose.hpp
│   │           │   │   ├── connect.hpp
│   │           │   │   ├── defer.hpp
│   │           │   │   ├── detached.hpp
│   │           │   │   ├── dispatch.hpp
│   │           │   │   ├── error.ipp
│   │           │   │   ├── execution_context.hpp
│   │           │   │   ├── execution_context.ipp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── executor.ipp
│   │           │   │   ├── handler_alloc_hook.ipp
│   │           │   │   ├── io_context.hpp
│   │           │   │   ├── io_context.ipp
│   │           │   │   ├── multiple_exceptions.ipp
│   │           │   │   ├── post.hpp
│   │           │   │   ├── read.hpp
│   │           │   │   ├── read_at.hpp
│   │           │   │   ├── read_until.hpp
│   │           │   │   ├── redirect_error.hpp
│   │           │   │   ├── serial_port_base.hpp
│   │           │   │   ├── serial_port_base.ipp
│   │           │   │   ├── spawn.hpp
│   │           │   │   ├── src.cpp
│   │           │   │   ├── src.hpp
│   │           │   │   ├── system_context.hpp
│   │           │   │   ├── system_context.ipp
│   │           │   │   ├── system_executor.hpp
│   │           │   │   ├── thread_pool.hpp
│   │           │   │   ├── thread_pool.ipp
│   │           │   │   ├── use_awaitable.hpp
│   │           │   │   ├── use_future.hpp
│   │           │   │   ├── write.hpp
│   │           │   │   └── write_at.hpp
│   │           │   ├── io_context.hpp
│   │           │   ├── io_context_strand.hpp
│   │           │   ├── io_service.hpp
│   │           │   ├── io_service_strand.hpp
│   │           │   ├── ip/
│   │           │   │   ├── address.hpp
│   │           │   │   ├── address_v4.hpp
│   │           │   │   ├── address_v4_iterator.hpp
│   │           │   │   ├── address_v4_range.hpp
│   │           │   │   ├── address_v6.hpp
│   │           │   │   ├── address_v6_iterator.hpp
│   │           │   │   ├── address_v6_range.hpp
│   │           │   │   ├── bad_address_cast.hpp
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── basic_resolver.hpp
│   │           │   │   ├── basic_resolver_entry.hpp
│   │           │   │   ├── basic_resolver_iterator.hpp
│   │           │   │   ├── basic_resolver_query.hpp
│   │           │   │   ├── basic_resolver_results.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   └── endpoint.ipp
│   │           │   │   │   └── socket_option.hpp
│   │           │   │   ├── host_name.hpp
│   │           │   │   ├── icmp.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── address.hpp
│   │           │   │   │   ├── address.ipp
│   │           │   │   │   ├── address_v4.hpp
│   │           │   │   │   ├── address_v4.ipp
│   │           │   │   │   ├── address_v6.hpp
│   │           │   │   │   ├── address_v6.ipp
│   │           │   │   │   ├── basic_endpoint.hpp
│   │           │   │   │   ├── host_name.ipp
│   │           │   │   │   ├── network_v4.hpp
│   │           │   │   │   ├── network_v4.ipp
│   │           │   │   │   ├── network_v6.hpp
│   │           │   │   │   └── network_v6.ipp
│   │           │   │   ├── multicast.hpp
│   │           │   │   ├── network_v4.hpp
│   │           │   │   ├── network_v6.hpp
│   │           │   │   ├── resolver_base.hpp
│   │           │   │   ├── resolver_query_base.hpp
│   │           │   │   ├── tcp.hpp
│   │           │   │   ├── udp.hpp
│   │           │   │   ├── unicast.hpp
│   │           │   │   └── v6_only.hpp
│   │           │   ├── is_applicable_property.hpp
│   │           │   ├── is_executor.hpp
│   │           │   ├── is_read_buffered.hpp
│   │           │   ├── is_write_buffered.hpp
│   │           │   ├── local/
│   │           │   │   ├── basic_endpoint.hpp
│   │           │   │   ├── connect_pair.hpp
│   │           │   │   ├── datagram_protocol.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── endpoint.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── endpoint.ipp
│   │           │   │   └── stream_protocol.hpp
│   │           │   ├── multiple_exceptions.hpp
│   │           │   ├── packaged_task.hpp
│   │           │   ├── placeholders.hpp
│   │           │   ├── posix/
│   │           │   │   ├── basic_descriptor.hpp
│   │           │   │   ├── basic_stream_descriptor.hpp
│   │           │   │   ├── descriptor.hpp
│   │           │   │   ├── descriptor_base.hpp
│   │           │   │   └── stream_descriptor.hpp
│   │           │   ├── post.hpp
│   │           │   ├── prefer.hpp
│   │           │   ├── query.hpp
│   │           │   ├── read.hpp
│   │           │   ├── read_at.hpp
│   │           │   ├── read_until.hpp
│   │           │   ├── redirect_error.hpp
│   │           │   ├── require.hpp
│   │           │   ├── require_concept.hpp
│   │           │   ├── serial_port.hpp
│   │           │   ├── serial_port_base.hpp
│   │           │   ├── signal_set.hpp
│   │           │   ├── socket_base.hpp
│   │           │   ├── spawn.hpp
│   │           │   ├── ssl/
│   │           │   │   ├── context.hpp
│   │           │   │   ├── context_base.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── buffered_handshake_op.hpp
│   │           │   │   │   ├── engine.hpp
│   │           │   │   │   ├── handshake_op.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── engine.ipp
│   │           │   │   │   │   └── openssl_init.ipp
│   │           │   │   │   ├── io.hpp
│   │           │   │   │   ├── openssl_init.hpp
│   │           │   │   │   ├── openssl_types.hpp
│   │           │   │   │   ├── password_callback.hpp
│   │           │   │   │   ├── read_op.hpp
│   │           │   │   │   ├── shutdown_op.hpp
│   │           │   │   │   ├── stream_core.hpp
│   │           │   │   │   ├── verify_callback.hpp
│   │           │   │   │   └── write_op.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── host_name_verification.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── context.hpp
│   │           │   │   │   ├── context.ipp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── host_name_verification.ipp
│   │           │   │   │   ├── rfc2818_verification.ipp
│   │           │   │   │   └── src.hpp
│   │           │   │   ├── rfc2818_verification.hpp
│   │           │   │   ├── stream.hpp
│   │           │   │   ├── stream_base.hpp
│   │           │   │   ├── verify_context.hpp
│   │           │   │   └── verify_mode.hpp
│   │           │   ├── ssl.hpp
│   │           │   ├── static_thread_pool.hpp
│   │           │   ├── steady_timer.hpp
│   │           │   ├── strand.hpp
│   │           │   ├── streambuf.hpp
│   │           │   ├── system_context.hpp
│   │           │   ├── system_executor.hpp
│   │           │   ├── system_timer.hpp
│   │           │   ├── this_coro.hpp
│   │           │   ├── thread_pool.hpp
│   │           │   ├── time_traits.hpp
│   │           │   ├── traits/
│   │           │   │   ├── bulk_execute_free.hpp
│   │           │   │   ├── bulk_execute_member.hpp
│   │           │   │   ├── connect_free.hpp
│   │           │   │   ├── connect_member.hpp
│   │           │   │   ├── equality_comparable.hpp
│   │           │   │   ├── execute_free.hpp
│   │           │   │   ├── execute_member.hpp
│   │           │   │   ├── prefer_free.hpp
│   │           │   │   ├── prefer_member.hpp
│   │           │   │   ├── query_free.hpp
│   │           │   │   ├── query_member.hpp
│   │           │   │   ├── query_static_constexpr_member.hpp
│   │           │   │   ├── require_concept_free.hpp
│   │           │   │   ├── require_concept_member.hpp
│   │           │   │   ├── require_free.hpp
│   │           │   │   ├── require_member.hpp
│   │           │   │   ├── schedule_free.hpp
│   │           │   │   ├── schedule_member.hpp
│   │           │   │   ├── set_done_free.hpp
│   │           │   │   ├── set_done_member.hpp
│   │           │   │   ├── set_error_free.hpp
│   │           │   │   ├── set_error_member.hpp
│   │           │   │   ├── set_value_free.hpp
│   │           │   │   ├── set_value_member.hpp
│   │           │   │   ├── start_free.hpp
│   │           │   │   ├── start_member.hpp
│   │           │   │   ├── static_query.hpp
│   │           │   │   ├── static_require.hpp
│   │           │   │   ├── static_require_concept.hpp
│   │           │   │   ├── submit_free.hpp
│   │           │   │   └── submit_member.hpp
│   │           │   ├── ts/
│   │           │   │   ├── buffer.hpp
│   │           │   │   ├── executor.hpp
│   │           │   │   ├── internet.hpp
│   │           │   │   ├── io_context.hpp
│   │           │   │   ├── net.hpp
│   │           │   │   ├── netfwd.hpp
│   │           │   │   ├── socket.hpp
│   │           │   │   └── timer.hpp
│   │           │   ├── unyield.hpp
│   │           │   ├── use_awaitable.hpp
│   │           │   ├── use_future.hpp
│   │           │   ├── uses_executor.hpp
│   │           │   ├── version.hpp
│   │           │   ├── wait_traits.hpp
│   │           │   ├── windows/
│   │           │   │   ├── basic_object_handle.hpp
│   │           │   │   ├── basic_overlapped_handle.hpp
│   │           │   │   ├── basic_random_access_handle.hpp
│   │           │   │   ├── basic_stream_handle.hpp
│   │           │   │   ├── object_handle.hpp
│   │           │   │   ├── overlapped_handle.hpp
│   │           │   │   ├── overlapped_ptr.hpp
│   │           │   │   ├── random_access_handle.hpp
│   │           │   │   └── stream_handle.hpp
│   │           │   ├── write.hpp
│   │           │   ├── write_at.hpp
│   │           │   └── yield.hpp
│   │           ├── asio.hpp
│   │           ├── assert/
│   │           │   └── source_location.hpp
│   │           ├── assert.hpp
│   │           ├── assign/
│   │           │   ├── assignment_exception.hpp
│   │           │   ├── list_inserter.hpp
│   │           │   ├── list_of.hpp
│   │           │   ├── ptr_list_inserter.hpp
│   │           │   ├── ptr_list_of.hpp
│   │           │   ├── ptr_map_inserter.hpp
│   │           │   ├── std/
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── queue.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── slist.hpp
│   │           │   │   ├── stack.hpp
│   │           │   │   └── vector.hpp
│   │           │   └── std.hpp
│   │           ├── assign.hpp
│   │           ├── atomic/
│   │           │   ├── atomic.hpp
│   │           │   ├── atomic_flag.hpp
│   │           │   ├── atomic_ref.hpp
│   │           │   ├── capabilities.hpp
│   │           │   ├── detail/
│   │           │   │   ├── addressof.hpp
│   │           │   │   ├── aligned_variable.hpp
│   │           │   │   ├── atomic_flag_impl.hpp
│   │           │   │   ├── atomic_impl.hpp
│   │           │   │   ├── atomic_ref_impl.hpp
│   │           │   │   ├── bitwise_cast.hpp
│   │           │   │   ├── bitwise_fp_cast.hpp
│   │           │   │   ├── capabilities.hpp
│   │           │   │   ├── caps_arch_gcc_aarch32.hpp
│   │           │   │   ├── caps_arch_gcc_aarch64.hpp
│   │           │   │   ├── caps_arch_gcc_alpha.hpp
│   │           │   │   ├── caps_arch_gcc_arm.hpp
│   │           │   │   ├── caps_arch_gcc_ppc.hpp
│   │           │   │   ├── caps_arch_gcc_sparc.hpp
│   │           │   │   ├── caps_arch_gcc_x86.hpp
│   │           │   │   ├── caps_arch_msvc_arm.hpp
│   │           │   │   ├── caps_arch_msvc_x86.hpp
│   │           │   │   ├── caps_gcc_atomic.hpp
│   │           │   │   ├── caps_gcc_sync.hpp
│   │           │   │   ├── caps_linux_arm.hpp
│   │           │   │   ├── caps_windows.hpp
│   │           │   │   ├── cas_based_exchange.hpp
│   │           │   │   ├── classify.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── core_arch_operations.hpp
│   │           │   │   ├── core_arch_operations_fwd.hpp
│   │           │   │   ├── core_arch_ops_gcc_aarch32.hpp
│   │           │   │   ├── core_arch_ops_gcc_aarch64.hpp
│   │           │   │   ├── core_arch_ops_gcc_alpha.hpp
│   │           │   │   ├── core_arch_ops_gcc_arm.hpp
│   │           │   │   ├── core_arch_ops_gcc_ppc.hpp
│   │           │   │   ├── core_arch_ops_gcc_sparc.hpp
│   │           │   │   ├── core_arch_ops_gcc_x86.hpp
│   │           │   │   ├── core_arch_ops_msvc_arm.hpp
│   │           │   │   ├── core_arch_ops_msvc_x86.hpp
│   │           │   │   ├── core_operations.hpp
│   │           │   │   ├── core_operations_emulated.hpp
│   │           │   │   ├── core_operations_emulated_fwd.hpp
│   │           │   │   ├── core_operations_fwd.hpp
│   │           │   │   ├── core_ops_cas_based.hpp
│   │           │   │   ├── core_ops_gcc_atomic.hpp
│   │           │   │   ├── core_ops_gcc_sync.hpp
│   │           │   │   ├── core_ops_linux_arm.hpp
│   │           │   │   ├── core_ops_windows.hpp
│   │           │   │   ├── extending_cas_based_arithmetic.hpp
│   │           │   │   ├── extra_fp_operations.hpp
│   │           │   │   ├── extra_fp_operations_fwd.hpp
│   │           │   │   ├── extra_fp_ops_emulated.hpp
│   │           │   │   ├── extra_fp_ops_generic.hpp
│   │           │   │   ├── extra_operations.hpp
│   │           │   │   ├── extra_operations_fwd.hpp
│   │           │   │   ├── extra_ops_emulated.hpp
│   │           │   │   ├── extra_ops_gcc_aarch32.hpp
│   │           │   │   ├── extra_ops_gcc_aarch64.hpp
│   │           │   │   ├── extra_ops_gcc_arm.hpp
│   │           │   │   ├── extra_ops_gcc_ppc.hpp
│   │           │   │   ├── extra_ops_gcc_x86.hpp
│   │           │   │   ├── extra_ops_generic.hpp
│   │           │   │   ├── extra_ops_msvc_arm.hpp
│   │           │   │   ├── extra_ops_msvc_x86.hpp
│   │           │   │   ├── fence_arch_operations.hpp
│   │           │   │   ├── fence_arch_ops_gcc_aarch32.hpp
│   │           │   │   ├── fence_arch_ops_gcc_aarch64.hpp
│   │           │   │   ├── fence_arch_ops_gcc_alpha.hpp
│   │           │   │   ├── fence_arch_ops_gcc_arm.hpp
│   │           │   │   ├── fence_arch_ops_gcc_ppc.hpp
│   │           │   │   ├── fence_arch_ops_gcc_sparc.hpp
│   │           │   │   ├── fence_arch_ops_gcc_x86.hpp
│   │           │   │   ├── fence_arch_ops_msvc_arm.hpp
│   │           │   │   ├── fence_arch_ops_msvc_x86.hpp
│   │           │   │   ├── fence_operations.hpp
│   │           │   │   ├── fence_operations_emulated.hpp
│   │           │   │   ├── fence_ops_gcc_atomic.hpp
│   │           │   │   ├── fence_ops_gcc_sync.hpp
│   │           │   │   ├── fence_ops_linux_arm.hpp
│   │           │   │   ├── fence_ops_windows.hpp
│   │           │   │   ├── float_sizes.hpp
│   │           │   │   ├── footer.hpp
│   │           │   │   ├── fp_operations.hpp
│   │           │   │   ├── fp_operations_fwd.hpp
│   │           │   │   ├── fp_ops_emulated.hpp
│   │           │   │   ├── fp_ops_generic.hpp
│   │           │   │   ├── futex.hpp
│   │           │   │   ├── gcc_arm_asm_common.hpp
│   │           │   │   ├── gcc_atomic_memory_order_utils.hpp
│   │           │   │   ├── header.hpp
│   │           │   │   ├── int_sizes.hpp
│   │           │   │   ├── integral_conversions.hpp
│   │           │   │   ├── interlocked.hpp
│   │           │   │   ├── intptr.hpp
│   │           │   │   ├── link.hpp
│   │           │   │   ├── lock_pool.hpp
│   │           │   │   ├── memory_order_utils.hpp
│   │           │   │   ├── once_flag.hpp
│   │           │   │   ├── ops_gcc_aarch32_common.hpp
│   │           │   │   ├── ops_gcc_aarch64_common.hpp
│   │           │   │   ├── ops_gcc_arm_common.hpp
│   │           │   │   ├── ops_gcc_ppc_common.hpp
│   │           │   │   ├── ops_msvc_common.hpp
│   │           │   │   ├── pause.hpp
│   │           │   │   ├── platform.hpp
│   │           │   │   ├── storage_traits.hpp
│   │           │   │   ├── string_ops.hpp
│   │           │   │   ├── type_traits/
│   │           │   │   │   ├── alignment_of.hpp
│   │           │   │   │   ├── conditional.hpp
│   │           │   │   │   ├── integral_constant.hpp
│   │           │   │   │   ├── is_floating_point.hpp
│   │           │   │   │   ├── is_function.hpp
│   │           │   │   │   ├── is_iec559.hpp
│   │           │   │   │   ├── is_integral.hpp
│   │           │   │   │   ├── is_signed.hpp
│   │           │   │   │   ├── is_trivially_copyable.hpp
│   │           │   │   │   ├── is_trivially_default_constructible.hpp
│   │           │   │   │   ├── make_signed.hpp
│   │           │   │   │   └── make_unsigned.hpp
│   │           │   │   ├── wait_capabilities.hpp
│   │           │   │   ├── wait_caps_dragonfly_umtx.hpp
│   │           │   │   ├── wait_caps_freebsd_umtx.hpp
│   │           │   │   ├── wait_caps_futex.hpp
│   │           │   │   ├── wait_caps_windows.hpp
│   │           │   │   ├── wait_operations.hpp
│   │           │   │   ├── wait_operations_fwd.hpp
│   │           │   │   ├── wait_ops_dragonfly_umtx.hpp
│   │           │   │   ├── wait_ops_emulated.hpp
│   │           │   │   ├── wait_ops_freebsd_umtx.hpp
│   │           │   │   ├── wait_ops_futex.hpp
│   │           │   │   ├── wait_ops_generic.hpp
│   │           │   │   └── wait_ops_windows.hpp
│   │           │   ├── fences.hpp
│   │           │   ├── ipc_atomic.hpp
│   │           │   ├── ipc_atomic_flag.hpp
│   │           │   └── ipc_atomic_ref.hpp
│   │           ├── atomic.hpp
│   │           ├── beast/
│   │           │   ├── _experimental/
│   │           │   │   ├── http/
│   │           │   │   │   ├── icy_stream.hpp
│   │           │   │   │   └── impl/
│   │           │   │   │       └── icy_stream.hpp
│   │           │   │   ├── test/
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── fail_count.hpp
│   │           │   │   │   ├── handler.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── error.hpp
│   │           │   │   │   │   ├── error.ipp
│   │           │   │   │   │   ├── fail_count.ipp
│   │           │   │   │   │   ├── stream.hpp
│   │           │   │   │   │   └── stream.ipp
│   │           │   │   │   ├── stream.hpp
│   │           │   │   │   └── tcp.hpp
│   │           │   │   └── unit_test/
│   │           │   │       ├── amount.hpp
│   │           │   │       ├── detail/
│   │           │   │       │   └── const_container.hpp
│   │           │   │       ├── dstream.hpp
│   │           │   │       ├── global_suites.hpp
│   │           │   │       ├── main.ipp
│   │           │   │       ├── match.hpp
│   │           │   │       ├── recorder.hpp
│   │           │   │       ├── reporter.hpp
│   │           │   │       ├── results.hpp
│   │           │   │       ├── runner.hpp
│   │           │   │       ├── suite.hpp
│   │           │   │       ├── suite_info.hpp
│   │           │   │       └── suite_list.hpp
│   │           │   ├── core/
│   │           │   │   ├── async_base.hpp
│   │           │   │   ├── basic_stream.hpp
│   │           │   │   ├── bind_handler.hpp
│   │           │   │   ├── buffer_traits.hpp
│   │           │   │   ├── buffered_read_stream.hpp
│   │           │   │   ├── buffers_adaptor.hpp
│   │           │   │   ├── buffers_cat.hpp
│   │           │   │   ├── buffers_prefix.hpp
│   │           │   │   ├── buffers_range.hpp
│   │           │   │   ├── buffers_suffix.hpp
│   │           │   │   ├── buffers_to_string.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── allocator.hpp
│   │           │   │   │   ├── async_base.hpp
│   │           │   │   │   ├── base64.hpp
│   │           │   │   │   ├── base64.ipp
│   │           │   │   │   ├── bind_continuation.hpp
│   │           │   │   │   ├── bind_default_executor.hpp
│   │           │   │   │   ├── bind_handler.hpp
│   │           │   │   │   ├── buffer.hpp
│   │           │   │   │   ├── buffer_traits.hpp
│   │           │   │   │   ├── buffers_pair.hpp
│   │           │   │   │   ├── buffers_range_adaptor.hpp
│   │           │   │   │   ├── buffers_ref.hpp
│   │           │   │   │   ├── chacha.hpp
│   │           │   │   │   ├── char_buffer.hpp
│   │           │   │   │   ├── clamp.hpp
│   │           │   │   │   ├── config.hpp
│   │           │   │   │   ├── cpu_info.hpp
│   │           │   │   │   ├── flat_stream.hpp
│   │           │   │   │   ├── get_io_context.hpp
│   │           │   │   │   ├── impl/
│   │           │   │   │   │   ├── read.hpp
│   │           │   │   │   │   └── temporary_buffer.ipp
│   │           │   │   │   ├── is_invocable.hpp
│   │           │   │   │   ├── ostream.hpp
│   │           │   │   │   ├── pcg.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── remap_post_to_defer.hpp
│   │           │   │   │   ├── service_base.hpp
│   │           │   │   │   ├── sha1.hpp
│   │           │   │   │   ├── sha1.ipp
│   │           │   │   │   ├── static_const.hpp
│   │           │   │   │   ├── static_ostream.hpp
│   │           │   │   │   ├── static_string.hpp
│   │           │   │   │   ├── stream_base.hpp
│   │           │   │   │   ├── stream_traits.hpp
│   │           │   │   │   ├── string.hpp
│   │           │   │   │   ├── temporary_buffer.hpp
│   │           │   │   │   ├── tuple.hpp
│   │           │   │   │   ├── type_traits.hpp
│   │           │   │   │   ├── variant.hpp
│   │           │   │   │   ├── varint.hpp
│   │           │   │   │   ├── win32_unicode_path.hpp
│   │           │   │   │   └── work_guard.hpp
│   │           │   │   ├── detect_ssl.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── file.hpp
│   │           │   │   ├── file_base.hpp
│   │           │   │   ├── file_posix.hpp
│   │           │   │   ├── file_stdio.hpp
│   │           │   │   ├── file_win32.hpp
│   │           │   │   ├── flat_buffer.hpp
│   │           │   │   ├── flat_static_buffer.hpp
│   │           │   │   ├── flat_stream.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── async_base.hpp
│   │           │   │   │   ├── basic_stream.hpp
│   │           │   │   │   ├── buffered_read_stream.hpp
│   │           │   │   │   ├── buffers_adaptor.hpp
│   │           │   │   │   ├── buffers_cat.hpp
│   │           │   │   │   ├── buffers_prefix.hpp
│   │           │   │   │   ├── buffers_suffix.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── file_posix.ipp
│   │           │   │   │   ├── file_stdio.ipp
│   │           │   │   │   ├── file_win32.ipp
│   │           │   │   │   ├── flat_buffer.hpp
│   │           │   │   │   ├── flat_static_buffer.hpp
│   │           │   │   │   ├── flat_static_buffer.ipp
│   │           │   │   │   ├── flat_stream.hpp
│   │           │   │   │   ├── multi_buffer.hpp
│   │           │   │   │   ├── read_size.hpp
│   │           │   │   │   ├── saved_handler.hpp
│   │           │   │   │   ├── saved_handler.ipp
│   │           │   │   │   ├── static_buffer.hpp
│   │           │   │   │   ├── static_buffer.ipp
│   │           │   │   │   ├── static_string.hpp
│   │           │   │   │   ├── string.ipp
│   │           │   │   │   └── string_param.hpp
│   │           │   │   ├── make_printable.hpp
│   │           │   │   ├── multi_buffer.hpp
│   │           │   │   ├── ostream.hpp
│   │           │   │   ├── rate_policy.hpp
│   │           │   │   ├── read_size.hpp
│   │           │   │   ├── role.hpp
│   │           │   │   ├── saved_handler.hpp
│   │           │   │   ├── span.hpp
│   │           │   │   ├── static_buffer.hpp
│   │           │   │   ├── static_string.hpp
│   │           │   │   ├── stream_traits.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── string_param.hpp
│   │           │   │   ├── string_type.hpp
│   │           │   │   └── tcp_stream.hpp
│   │           │   ├── core.hpp
│   │           │   ├── http/
│   │           │   │   ├── basic_dynamic_body.hpp
│   │           │   │   ├── basic_file_body.hpp
│   │           │   │   ├── basic_parser.hpp
│   │           │   │   ├── buffer_body.hpp
│   │           │   │   ├── chunk_encode.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── basic_parsed_list.hpp
│   │           │   │   │   ├── basic_parser.hpp
│   │           │   │   │   ├── basic_parser.ipp
│   │           │   │   │   ├── chunk_encode.hpp
│   │           │   │   │   ├── rfc7230.hpp
│   │           │   │   │   ├── rfc7230.ipp
│   │           │   │   │   └── type_traits.hpp
│   │           │   │   ├── dynamic_body.hpp
│   │           │   │   ├── empty_body.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── field.hpp
│   │           │   │   ├── fields.hpp
│   │           │   │   ├── file_body.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── basic_parser.hpp
│   │           │   │   │   ├── basic_parser.ipp
│   │           │   │   │   ├── chunk_encode.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── field.ipp
│   │           │   │   │   ├── fields.hpp
│   │           │   │   │   ├── fields.ipp
│   │           │   │   │   ├── file_body_win32.hpp
│   │           │   │   │   ├── message.hpp
│   │           │   │   │   ├── parser.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── rfc7230.hpp
│   │           │   │   │   ├── rfc7230.ipp
│   │           │   │   │   ├── serializer.hpp
│   │           │   │   │   ├── status.ipp
│   │           │   │   │   ├── verb.ipp
│   │           │   │   │   └── write.hpp
│   │           │   │   ├── message.hpp
│   │           │   │   ├── parser.hpp
│   │           │   │   ├── read.hpp
│   │           │   │   ├── rfc7230.hpp
│   │           │   │   ├── serializer.hpp
│   │           │   │   ├── span_body.hpp
│   │           │   │   ├── status.hpp
│   │           │   │   ├── string_body.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── vector_body.hpp
│   │           │   │   ├── verb.hpp
│   │           │   │   └── write.hpp
│   │           │   ├── http.hpp
│   │           │   ├── src.hpp
│   │           │   ├── ssl/
│   │           │   │   └── ssl_stream.hpp
│   │           │   ├── ssl.hpp
│   │           │   ├── version.hpp
│   │           │   ├── websocket/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── decorator.hpp
│   │           │   │   │   ├── frame.hpp
│   │           │   │   │   ├── hybi13.hpp
│   │           │   │   │   ├── hybi13.ipp
│   │           │   │   │   ├── impl_base.hpp
│   │           │   │   │   ├── mask.hpp
│   │           │   │   │   ├── mask.ipp
│   │           │   │   │   ├── pmd_extension.hpp
│   │           │   │   │   ├── pmd_extension.ipp
│   │           │   │   │   ├── prng.hpp
│   │           │   │   │   ├── prng.ipp
│   │           │   │   │   ├── service.hpp
│   │           │   │   │   ├── service.ipp
│   │           │   │   │   ├── soft_mutex.hpp
│   │           │   │   │   ├── type_traits.hpp
│   │           │   │   │   ├── utf8_checker.hpp
│   │           │   │   │   └── utf8_checker.ipp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── accept.hpp
│   │           │   │   │   ├── close.hpp
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   ├── error.ipp
│   │           │   │   │   ├── handshake.hpp
│   │           │   │   │   ├── ping.hpp
│   │           │   │   │   ├── read.hpp
│   │           │   │   │   ├── rfc6455.hpp
│   │           │   │   │   ├── ssl.hpp
│   │           │   │   │   ├── stream.hpp
│   │           │   │   │   ├── stream_impl.hpp
│   │           │   │   │   ├── teardown.hpp
│   │           │   │   │   └── write.hpp
│   │           │   │   ├── option.hpp
│   │           │   │   ├── rfc6455.hpp
│   │           │   │   ├── ssl.hpp
│   │           │   │   ├── stream.hpp
│   │           │   │   ├── stream_base.hpp
│   │           │   │   ├── stream_fwd.hpp
│   │           │   │   └── teardown.hpp
│   │           │   ├── websocket.hpp
│   │           │   ├── zlib/
│   │           │   │   ├── deflate_stream.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── bitstream.hpp
│   │           │   │   │   ├── deflate_stream.hpp
│   │           │   │   │   ├── deflate_stream.ipp
│   │           │   │   │   ├── inflate_stream.hpp
│   │           │   │   │   ├── inflate_stream.ipp
│   │           │   │   │   ├── ranges.hpp
│   │           │   │   │   └── window.hpp
│   │           │   │   ├── error.hpp
│   │           │   │   ├── impl/
│   │           │   │   │   ├── error.hpp
│   │           │   │   │   └── error.ipp
│   │           │   │   ├── inflate_stream.hpp
│   │           │   │   └── zlib.hpp
│   │           │   └── zlib.hpp
│   │           ├── beast.hpp
│   │           ├── bimap/
│   │           │   ├── bimap.hpp
│   │           │   ├── container_adaptor/
│   │           │   │   ├── associative_container_adaptor.hpp
│   │           │   │   ├── container_adaptor.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── comparison_adaptor.hpp
│   │           │   │   │   ├── functor_bag.hpp
│   │           │   │   │   ├── identity_converters.hpp
│   │           │   │   │   ├── key_extractor.hpp
│   │           │   │   │   └── non_unique_container_helper.hpp
│   │           │   │   ├── list_adaptor.hpp
│   │           │   │   ├── list_map_adaptor.hpp
│   │           │   │   ├── map_adaptor.hpp
│   │           │   │   ├── multimap_adaptor.hpp
│   │           │   │   ├── multiset_adaptor.hpp
│   │           │   │   ├── ordered_associative_container_adaptor.hpp
│   │           │   │   ├── sequence_container_adaptor.hpp
│   │           │   │   ├── set_adaptor.hpp
│   │           │   │   ├── support/
│   │           │   │   │   └── iterator_facade_converters.hpp
│   │           │   │   ├── unordered_associative_container_adaptor.hpp
│   │           │   │   ├── unordered_map_adaptor.hpp
│   │           │   │   ├── unordered_multimap_adaptor.hpp
│   │           │   │   ├── unordered_multiset_adaptor.hpp
│   │           │   │   ├── unordered_set_adaptor.hpp
│   │           │   │   ├── vector_adaptor.hpp
│   │           │   │   └── vector_map_adaptor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── bimap_core.hpp
│   │           │   │   ├── concept_tags.hpp
│   │           │   │   ├── debug/
│   │           │   │   │   └── static_error.hpp
│   │           │   │   ├── generate_index_binder.hpp
│   │           │   │   ├── generate_relation_binder.hpp
│   │           │   │   ├── generate_view_binder.hpp
│   │           │   │   ├── is_set_type_of.hpp
│   │           │   │   ├── manage_additional_parameters.hpp
│   │           │   │   ├── manage_bimap_key.hpp
│   │           │   │   ├── map_view_base.hpp
│   │           │   │   ├── map_view_iterator.hpp
│   │           │   │   ├── modifier_adaptor.hpp
│   │           │   │   ├── non_unique_views_helper.hpp
│   │           │   │   ├── set_view_base.hpp
│   │           │   │   ├── set_view_iterator.hpp
│   │           │   │   ├── test/
│   │           │   │   │   └── check_metadata.hpp
│   │           │   │   └── user_interface_config.hpp
│   │           │   ├── list_of.hpp
│   │           │   ├── multiset_of.hpp
│   │           │   ├── property_map/
│   │           │   │   ├── set_support.hpp
│   │           │   │   └── unordered_set_support.hpp
│   │           │   ├── relation/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── access_builder.hpp
│   │           │   │   │   ├── metadata_access_builder.hpp
│   │           │   │   │   ├── mutant.hpp
│   │           │   │   │   ├── static_access_builder.hpp
│   │           │   │   │   └── to_mutable_relation_functor.hpp
│   │           │   │   ├── member_at.hpp
│   │           │   │   ├── mutant_relation.hpp
│   │           │   │   ├── pair_layout.hpp
│   │           │   │   ├── structured_pair.hpp
│   │           │   │   ├── support/
│   │           │   │   │   ├── data_extractor.hpp
│   │           │   │   │   ├── get.hpp
│   │           │   │   │   ├── get_pair_functor.hpp
│   │           │   │   │   ├── is_tag_of_member_at.hpp
│   │           │   │   │   ├── member_with_tag.hpp
│   │           │   │   │   ├── opposite_tag.hpp
│   │           │   │   │   ├── pair_by.hpp
│   │           │   │   │   ├── pair_type_by.hpp
│   │           │   │   │   └── value_type_of.hpp
│   │           │   │   └── symmetrical_base.hpp
│   │           │   ├── set_of.hpp
│   │           │   ├── support/
│   │           │   │   ├── data_type_by.hpp
│   │           │   │   ├── iterator_type_by.hpp
│   │           │   │   ├── key_type_by.hpp
│   │           │   │   ├── lambda.hpp
│   │           │   │   ├── map_by.hpp
│   │           │   │   ├── map_type_by.hpp
│   │           │   │   └── value_type_by.hpp
│   │           │   ├── tags/
│   │           │   │   ├── support/
│   │           │   │   │   ├── apply_to_value_type.hpp
│   │           │   │   │   ├── default_tagged.hpp
│   │           │   │   │   ├── is_tagged.hpp
│   │           │   │   │   ├── overwrite_tagged.hpp
│   │           │   │   │   ├── tag_of.hpp
│   │           │   │   │   └── value_type_of.hpp
│   │           │   │   └── tagged.hpp
│   │           │   ├── unconstrained_set_of.hpp
│   │           │   ├── unordered_multiset_of.hpp
│   │           │   ├── unordered_set_of.hpp
│   │           │   ├── vector_of.hpp
│   │           │   └── views/
│   │           │       ├── list_map_view.hpp
│   │           │       ├── list_set_view.hpp
│   │           │       ├── map_view.hpp
│   │           │       ├── multimap_view.hpp
│   │           │       ├── multiset_view.hpp
│   │           │       ├── set_view.hpp
│   │           │       ├── unconstrained_map_view.hpp
│   │           │       ├── unconstrained_set_view.hpp
│   │           │       ├── unordered_map_view.hpp
│   │           │       ├── unordered_multimap_view.hpp
│   │           │       ├── unordered_multiset_view.hpp
│   │           │       ├── unordered_set_view.hpp
│   │           │       ├── vector_map_view.hpp
│   │           │       └── vector_set_view.hpp
│   │           ├── bimap.hpp
│   │           ├── bind/
│   │           │   ├── apply.hpp
│   │           │   ├── arg.hpp
│   │           │   ├── bind.hpp
│   │           │   ├── bind_cc.hpp
│   │           │   ├── bind_mf2_cc.hpp
│   │           │   ├── bind_mf_cc.hpp
│   │           │   ├── bind_template.hpp
│   │           │   ├── make_adaptable.hpp
│   │           │   ├── mem_fn.hpp
│   │           │   ├── mem_fn_cc.hpp
│   │           │   ├── mem_fn_template.hpp
│   │           │   ├── mem_fn_vw.hpp
│   │           │   ├── placeholders.hpp
│   │           │   ├── protect.hpp
│   │           │   └── storage.hpp
│   │           ├── bind.hpp
│   │           ├── blank.hpp
│   │           ├── blank_fwd.hpp
│   │           ├── call_traits.hpp
│   │           ├── callable_traits/
│   │           │   ├── add_member_const.hpp
│   │           │   ├── add_member_cv.hpp
│   │           │   ├── add_member_lvalue_reference.hpp
│   │           │   ├── add_member_rvalue_reference.hpp
│   │           │   ├── add_member_volatile.hpp
│   │           │   ├── add_noexcept.hpp
│   │           │   ├── add_transaction_safe.hpp
│   │           │   ├── add_varargs.hpp
│   │           │   ├── apply_member_pointer.hpp
│   │           │   ├── apply_return.hpp
│   │           │   ├── args.hpp
│   │           │   ├── class_of.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── core.hpp
│   │           │   │   ├── default_callable_traits.hpp
│   │           │   │   ├── forward_declarations.hpp
│   │           │   │   ├── function.hpp
│   │           │   │   ├── function_object.hpp
│   │           │   │   ├── is_invocable_impl.hpp
│   │           │   │   ├── parameter_index_helper.hpp
│   │           │   │   ├── pmd.hpp
│   │           │   │   ├── pmf.hpp
│   │           │   │   ├── polyfills/
│   │           │   │   │   ├── disjunction.hpp
│   │           │   │   │   └── make_index_sequence.hpp
│   │           │   │   ├── qualifier_flags.hpp
│   │           │   │   ├── set_function_qualifiers.hpp
│   │           │   │   ├── sfinae_errors.hpp
│   │           │   │   ├── traits.hpp
│   │           │   │   ├── unguarded/
│   │           │   │   │   ├── function.hpp
│   │           │   │   │   ├── function_2.hpp
│   │           │   │   │   ├── function_3.hpp
│   │           │   │   │   ├── function_ptr.hpp
│   │           │   │   │   ├── function_ptr_2.hpp
│   │           │   │   │   ├── function_ptr_3.hpp
│   │           │   │   │   ├── function_ptr_varargs.hpp
│   │           │   │   │   ├── function_ptr_varargs_2.hpp
│   │           │   │   │   ├── function_ptr_varargs_3.hpp
│   │           │   │   │   ├── pmf.hpp
│   │           │   │   │   ├── pmf_2.hpp
│   │           │   │   │   ├── pmf_3.hpp
│   │           │   │   │   ├── pmf_4.hpp
│   │           │   │   │   ├── pmf_varargs.hpp
│   │           │   │   │   ├── pmf_varargs_2.hpp
│   │           │   │   │   ├── pmf_varargs_3.hpp
│   │           │   │   │   └── pmf_varargs_4.hpp
│   │           │   │   └── utility.hpp
│   │           │   ├── function_type.hpp
│   │           │   ├── has_member_qualifiers.hpp
│   │           │   ├── has_varargs.hpp
│   │           │   ├── has_void_return.hpp
│   │           │   ├── is_const_member.hpp
│   │           │   ├── is_cv_member.hpp
│   │           │   ├── is_invocable.hpp
│   │           │   ├── is_lvalue_reference_member.hpp
│   │           │   ├── is_noexcept.hpp
│   │           │   ├── is_reference_member.hpp
│   │           │   ├── is_rvalue_reference_member.hpp
│   │           │   ├── is_transaction_safe.hpp
│   │           │   ├── is_volatile_member.hpp
│   │           │   ├── qualified_class_of.hpp
│   │           │   ├── remove_member_const.hpp
│   │           │   ├── remove_member_cv.hpp
│   │           │   ├── remove_member_reference.hpp
│   │           │   ├── remove_member_volatile.hpp
│   │           │   ├── remove_noexcept.hpp
│   │           │   ├── remove_transaction_safe.hpp
│   │           │   ├── remove_varargs.hpp
│   │           │   └── return_type.hpp
│   │           ├── callable_traits.hpp
│   │           ├── cast.hpp
│   │           ├── cerrno.hpp
│   │           ├── checked_delete.hpp
│   │           ├── chrono/
│   │           │   ├── ceil.hpp
│   │           │   ├── chrono.hpp
│   │           │   ├── chrono_io.hpp
│   │           │   ├── clock_string.hpp
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── inlined/
│   │           │   │   │   ├── chrono.hpp
│   │           │   │   │   ├── mac/
│   │           │   │   │   │   ├── chrono.hpp
│   │           │   │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   │   └── thread_clock.hpp
│   │           │   │   │   ├── posix/
│   │           │   │   │   │   ├── chrono.hpp
│   │           │   │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   │   └── thread_clock.hpp
│   │           │   │   │   ├── process_cpu_clocks.hpp
│   │           │   │   │   ├── thread_clock.hpp
│   │           │   │   │   └── win/
│   │           │   │   │       ├── chrono.hpp
│   │           │   │   │       ├── process_cpu_clocks.hpp
│   │           │   │   │       └── thread_clock.hpp
│   │           │   │   ├── is_evenly_divisible_by.hpp
│   │           │   │   ├── no_warning/
│   │           │   │   │   └── signed_unsigned_cmp.hpp
│   │           │   │   ├── scan_keyword.hpp
│   │           │   │   ├── static_assert.hpp
│   │           │   │   └── system.hpp
│   │           │   ├── duration.hpp
│   │           │   ├── floor.hpp
│   │           │   ├── include.hpp
│   │           │   ├── io/
│   │           │   │   ├── duration_get.hpp
│   │           │   │   ├── duration_io.hpp
│   │           │   │   ├── duration_put.hpp
│   │           │   │   ├── duration_style.hpp
│   │           │   │   ├── duration_units.hpp
│   │           │   │   ├── ios_base_state.hpp
│   │           │   │   ├── time_point_get.hpp
│   │           │   │   ├── time_point_io.hpp
│   │           │   │   ├── time_point_put.hpp
│   │           │   │   ├── time_point_units.hpp
│   │           │   │   ├── timezone.hpp
│   │           │   │   └── utility/
│   │           │   │       ├── ios_base_state_ptr.hpp
│   │           │   │       ├── manip_base.hpp
│   │           │   │       └── to_string.hpp
│   │           │   ├── io_v1/
│   │           │   │   └── chrono_io.hpp
│   │           │   ├── process_cpu_clocks.hpp
│   │           │   ├── round.hpp
│   │           │   ├── system_clocks.hpp
│   │           │   ├── thread_clock.hpp
│   │           │   ├── time_point.hpp
│   │           │   └── typeof/
│   │           │       └── boost/
│   │           │           ├── chrono/
│   │           │           │   └── chrono.hpp
│   │           │           └── ratio.hpp
│   │           ├── chrono.hpp
│   │           ├── circular_buffer/
│   │           │   ├── base.hpp
│   │           │   ├── debug.hpp
│   │           │   ├── details.hpp
│   │           │   └── space_optimized.hpp
│   │           ├── circular_buffer.hpp
│   │           ├── circular_buffer_fwd.hpp
│   │           ├── compatibility/
│   │           │   └── cpp_c_headers/
│   │           │       ├── cassert
│   │           │       ├── cctype
│   │           │       ├── cerrno
│   │           │       ├── cfloat
│   │           │       ├── climits
│   │           │       ├── clocale
│   │           │       ├── cmath
│   │           │       ├── csetjmp
│   │           │       ├── csignal
│   │           │       ├── cstdarg
│   │           │       ├── cstddef
│   │           │       ├── cstdio
│   │           │       ├── cstdlib
│   │           │       ├── cstring
│   │           │       ├── ctime
│   │           │       ├── cwchar
│   │           │       └── cwctype
│   │           ├── compressed_pair.hpp
│   │           ├── compute/
│   │           │   ├── algorithm/
│   │           │   │   ├── accumulate.hpp
│   │           │   │   ├── adjacent_difference.hpp
│   │           │   │   ├── adjacent_find.hpp
│   │           │   │   ├── all_of.hpp
│   │           │   │   ├── any_of.hpp
│   │           │   │   ├── binary_search.hpp
│   │           │   │   ├── copy.hpp
│   │           │   │   ├── copy_if.hpp
│   │           │   │   ├── copy_n.hpp
│   │           │   │   ├── count.hpp
│   │           │   │   ├── count_if.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── balanced_path.hpp
│   │           │   │   │   ├── binary_find.hpp
│   │           │   │   │   ├── compact.hpp
│   │           │   │   │   ├── copy_on_device.hpp
│   │           │   │   │   ├── copy_to_device.hpp
│   │           │   │   │   ├── copy_to_host.hpp
│   │           │   │   │   ├── count_if_with_ballot.hpp
│   │           │   │   │   ├── count_if_with_reduce.hpp
│   │           │   │   │   ├── count_if_with_threads.hpp
│   │           │   │   │   ├── find_extrema.hpp
│   │           │   │   │   ├── find_extrema_on_cpu.hpp
│   │           │   │   │   ├── find_extrema_with_atomics.hpp
│   │           │   │   │   ├── find_extrema_with_reduce.hpp
│   │           │   │   │   ├── find_if_with_atomics.hpp
│   │           │   │   │   ├── inplace_reduce.hpp
│   │           │   │   │   ├── insertion_sort.hpp
│   │           │   │   │   ├── merge_path.hpp
│   │           │   │   │   ├── merge_sort_on_cpu.hpp
│   │           │   │   │   ├── merge_sort_on_gpu.hpp
│   │           │   │   │   ├── merge_with_merge_path.hpp
│   │           │   │   │   ├── radix_sort.hpp
│   │           │   │   │   ├── random_fill.hpp
│   │           │   │   │   ├── reduce_by_key.hpp
│   │           │   │   │   ├── reduce_by_key_with_scan.hpp
│   │           │   │   │   ├── reduce_on_cpu.hpp
│   │           │   │   │   ├── reduce_on_gpu.hpp
│   │           │   │   │   ├── scan.hpp
│   │           │   │   │   ├── scan_on_cpu.hpp
│   │           │   │   │   ├── scan_on_gpu.hpp
│   │           │   │   │   ├── search_all.hpp
│   │           │   │   │   ├── serial_accumulate.hpp
│   │           │   │   │   ├── serial_count_if.hpp
│   │           │   │   │   ├── serial_find_extrema.hpp
│   │           │   │   │   ├── serial_merge.hpp
│   │           │   │   │   ├── serial_reduce.hpp
│   │           │   │   │   ├── serial_reduce_by_key.hpp
│   │           │   │   │   └── serial_scan.hpp
│   │           │   │   ├── equal.hpp
│   │           │   │   ├── equal_range.hpp
│   │           │   │   ├── exclusive_scan.hpp
│   │           │   │   ├── fill.hpp
│   │           │   │   ├── fill_n.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_end.hpp
│   │           │   │   ├── find_if.hpp
│   │           │   │   ├── find_if_not.hpp
│   │           │   │   ├── for_each.hpp
│   │           │   │   ├── for_each_n.hpp
│   │           │   │   ├── gather.hpp
│   │           │   │   ├── generate.hpp
│   │           │   │   ├── generate_n.hpp
│   │           │   │   ├── includes.hpp
│   │           │   │   ├── inclusive_scan.hpp
│   │           │   │   ├── inner_product.hpp
│   │           │   │   ├── inplace_merge.hpp
│   │           │   │   ├── iota.hpp
│   │           │   │   ├── is_partitioned.hpp
│   │           │   │   ├── is_permutation.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── lexicographical_compare.hpp
│   │           │   │   ├── lower_bound.hpp
│   │           │   │   ├── max_element.hpp
│   │           │   │   ├── merge.hpp
│   │           │   │   ├── min_element.hpp
│   │           │   │   ├── minmax_element.hpp
│   │           │   │   ├── mismatch.hpp
│   │           │   │   ├── next_permutation.hpp
│   │           │   │   ├── none_of.hpp
│   │           │   │   ├── nth_element.hpp
│   │           │   │   ├── partial_sum.hpp
│   │           │   │   ├── partition.hpp
│   │           │   │   ├── partition_copy.hpp
│   │           │   │   ├── partition_point.hpp
│   │           │   │   ├── prev_permutation.hpp
│   │           │   │   ├── random_shuffle.hpp
│   │           │   │   ├── reduce.hpp
│   │           │   │   ├── reduce_by_key.hpp
│   │           │   │   ├── remove.hpp
│   │           │   │   ├── remove_if.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── replace_copy.hpp
│   │           │   │   ├── reverse.hpp
│   │           │   │   ├── reverse_copy.hpp
│   │           │   │   ├── rotate.hpp
│   │           │   │   ├── rotate_copy.hpp
│   │           │   │   ├── scatter.hpp
│   │           │   │   ├── scatter_if.hpp
│   │           │   │   ├── search.hpp
│   │           │   │   ├── search_n.hpp
│   │           │   │   ├── set_difference.hpp
│   │           │   │   ├── set_intersection.hpp
│   │           │   │   ├── set_symmetric_difference.hpp
│   │           │   │   ├── set_union.hpp
│   │           │   │   ├── sort.hpp
│   │           │   │   ├── sort_by_key.hpp
│   │           │   │   ├── stable_partition.hpp
│   │           │   │   ├── stable_sort.hpp
│   │           │   │   ├── stable_sort_by_key.hpp
│   │           │   │   ├── swap_ranges.hpp
│   │           │   │   ├── transform.hpp
│   │           │   │   ├── transform_if.hpp
│   │           │   │   ├── transform_reduce.hpp
│   │           │   │   ├── unique.hpp
│   │           │   │   ├── unique_copy.hpp
│   │           │   │   └── upper_bound.hpp
│   │           │   ├── algorithm.hpp
│   │           │   ├── allocator/
│   │           │   │   ├── buffer_allocator.hpp
│   │           │   │   └── pinned_allocator.hpp
│   │           │   ├── allocator.hpp
│   │           │   ├── async/
│   │           │   │   ├── future.hpp
│   │           │   │   ├── wait.hpp
│   │           │   │   └── wait_guard.hpp
│   │           │   ├── async.hpp
│   │           │   ├── buffer.hpp
│   │           │   ├── cl.hpp
│   │           │   ├── cl_ext.hpp
│   │           │   ├── closure.hpp
│   │           │   ├── command_queue.hpp
│   │           │   ├── config.hpp
│   │           │   ├── container/
│   │           │   │   ├── array.hpp
│   │           │   │   ├── basic_string.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── scalar.hpp
│   │           │   │   ├── dynamic_bitset.hpp
│   │           │   │   ├── flat_map.hpp
│   │           │   │   ├── flat_set.hpp
│   │           │   │   ├── mapped_view.hpp
│   │           │   │   ├── stack.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── valarray.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── container.hpp
│   │           │   ├── context.hpp
│   │           │   ├── core.hpp
│   │           │   ├── detail/
│   │           │   │   ├── assert_cl_success.hpp
│   │           │   │   ├── buffer_value.hpp
│   │           │   │   ├── cl_versions.hpp
│   │           │   │   ├── device_ptr.hpp
│   │           │   │   ├── diagnostic.hpp
│   │           │   │   ├── duration.hpp
│   │           │   │   ├── get_object_info.hpp
│   │           │   │   ├── getenv.hpp
│   │           │   │   ├── global_static.hpp
│   │           │   │   ├── is_buffer_iterator.hpp
│   │           │   │   ├── is_contiguous_iterator.hpp
│   │           │   │   ├── iterator_plus_distance.hpp
│   │           │   │   ├── iterator_range_size.hpp
│   │           │   │   ├── iterator_traits.hpp
│   │           │   │   ├── literal.hpp
│   │           │   │   ├── lru_cache.hpp
│   │           │   │   ├── meta_kernel.hpp
│   │           │   │   ├── mpl_vector_to_tuple.hpp
│   │           │   │   ├── nvidia_compute_capability.hpp
│   │           │   │   ├── parameter_cache.hpp
│   │           │   │   ├── path.hpp
│   │           │   │   ├── print_range.hpp
│   │           │   │   ├── read_write_single_value.hpp
│   │           │   │   ├── sha1.hpp
│   │           │   │   ├── variadic_macros.hpp
│   │           │   │   ├── vendor.hpp
│   │           │   │   └── work_size.hpp
│   │           │   ├── device.hpp
│   │           │   ├── event.hpp
│   │           │   ├── exception/
│   │           │   │   ├── context_error.hpp
│   │           │   │   ├── no_device_found.hpp
│   │           │   │   ├── opencl_error.hpp
│   │           │   │   ├── program_build_failure.hpp
│   │           │   │   └── unsupported_extension_error.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── experimental/
│   │           │   │   ├── clamp_range.hpp
│   │           │   │   ├── malloc.hpp
│   │           │   │   ├── sort_by_transform.hpp
│   │           │   │   └── tabulate.hpp
│   │           │   ├── function.hpp
│   │           │   ├── functional/
│   │           │   │   ├── as.hpp
│   │           │   │   ├── atomic.hpp
│   │           │   │   ├── bind.hpp
│   │           │   │   ├── common.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── macros.hpp
│   │           │   │   │   ├── nvidia_ballot.hpp
│   │           │   │   │   ├── nvidia_popcount.hpp
│   │           │   │   │   └── unpack.hpp
│   │           │   │   ├── field.hpp
│   │           │   │   ├── geometry.hpp
│   │           │   │   ├── get.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── identity.hpp
│   │           │   │   ├── integer.hpp
│   │           │   │   ├── logical.hpp
│   │           │   │   ├── math.hpp
│   │           │   │   ├── operator.hpp
│   │           │   │   ├── popcount.hpp
│   │           │   │   └── relational.hpp
│   │           │   ├── functional.hpp
│   │           │   ├── image/
│   │           │   │   ├── image1d.hpp
│   │           │   │   ├── image2d.hpp
│   │           │   │   ├── image3d.hpp
│   │           │   │   ├── image_format.hpp
│   │           │   │   ├── image_object.hpp
│   │           │   │   └── image_sampler.hpp
│   │           │   ├── image.hpp
│   │           │   ├── image2d.hpp
│   │           │   ├── image3d.hpp
│   │           │   ├── image_format.hpp
│   │           │   ├── image_sampler.hpp
│   │           │   ├── interop/
│   │           │   │   ├── eigen/
│   │           │   │   │   └── core.hpp
│   │           │   │   ├── eigen.hpp
│   │           │   │   ├── opencv/
│   │           │   │   │   ├── core.hpp
│   │           │   │   │   ├── highgui.hpp
│   │           │   │   │   └── ocl.hpp
│   │           │   │   ├── opencv.hpp
│   │           │   │   ├── opengl/
│   │           │   │   │   ├── acquire.hpp
│   │           │   │   │   ├── cl_gl.hpp
│   │           │   │   │   ├── cl_gl_ext.hpp
│   │           │   │   │   ├── context.hpp
│   │           │   │   │   ├── gl.hpp
│   │           │   │   │   ├── opengl_buffer.hpp
│   │           │   │   │   ├── opengl_renderbuffer.hpp
│   │           │   │   │   └── opengl_texture.hpp
│   │           │   │   ├── opengl.hpp
│   │           │   │   ├── qt/
│   │           │   │   │   ├── qimage.hpp
│   │           │   │   │   ├── qpoint.hpp
│   │           │   │   │   ├── qpointf.hpp
│   │           │   │   │   ├── qtcore.hpp
│   │           │   │   │   ├── qtgui.hpp
│   │           │   │   │   └── qvector.hpp
│   │           │   │   ├── qt.hpp
│   │           │   │   ├── vtk/
│   │           │   │   │   ├── bounds.hpp
│   │           │   │   │   ├── data_array.hpp
│   │           │   │   │   ├── matrix4x4.hpp
│   │           │   │   │   └── points.hpp
│   │           │   │   └── vtk.hpp
│   │           │   ├── iterator/
│   │           │   │   ├── buffer_iterator.hpp
│   │           │   │   ├── constant_buffer_iterator.hpp
│   │           │   │   ├── constant_iterator.hpp
│   │           │   │   ├── counting_iterator.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── get_base_iterator_buffer.hpp
│   │           │   │   │   └── swizzle_iterator.hpp
│   │           │   │   ├── discard_iterator.hpp
│   │           │   │   ├── function_input_iterator.hpp
│   │           │   │   ├── permutation_iterator.hpp
│   │           │   │   ├── strided_iterator.hpp
│   │           │   │   ├── transform_iterator.hpp
│   │           │   │   └── zip_iterator.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── kernel.hpp
│   │           │   ├── lambda/
│   │           │   │   ├── context.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── get.hpp
│   │           │   │   ├── make_pair.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── placeholder.hpp
│   │           │   │   ├── placeholders.hpp
│   │           │   │   └── result_of.hpp
│   │           │   ├── lambda.hpp
│   │           │   ├── memory/
│   │           │   │   ├── local_buffer.hpp
│   │           │   │   └── svm_ptr.hpp
│   │           │   ├── memory.hpp
│   │           │   ├── memory_object.hpp
│   │           │   ├── pipe.hpp
│   │           │   ├── platform.hpp
│   │           │   ├── program.hpp
│   │           │   ├── random/
│   │           │   │   ├── bernoulli_distribution.hpp
│   │           │   │   ├── default_random_engine.hpp
│   │           │   │   ├── discrete_distribution.hpp
│   │           │   │   ├── linear_congruential_engine.hpp
│   │           │   │   ├── mersenne_twister_engine.hpp
│   │           │   │   ├── normal_distribution.hpp
│   │           │   │   ├── threefry_engine.hpp
│   │           │   │   ├── uniform_int_distribution.hpp
│   │           │   │   └── uniform_real_distribution.hpp
│   │           │   ├── random.hpp
│   │           │   ├── source.hpp
│   │           │   ├── svm.hpp
│   │           │   ├── system.hpp
│   │           │   ├── type_traits/
│   │           │   │   ├── common_type.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── capture_traits.hpp
│   │           │   │   ├── is_device_iterator.hpp
│   │           │   │   ├── is_fundamental.hpp
│   │           │   │   ├── is_vector_type.hpp
│   │           │   │   ├── make_vector_type.hpp
│   │           │   │   ├── result_of.hpp
│   │           │   │   ├── scalar_type.hpp
│   │           │   │   ├── type_definition.hpp
│   │           │   │   ├── type_name.hpp
│   │           │   │   └── vector_size.hpp
│   │           │   ├── type_traits.hpp
│   │           │   ├── types/
│   │           │   │   ├── builtin.hpp
│   │           │   │   ├── complex.hpp
│   │           │   │   ├── fundamental.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── size_t.hpp
│   │           │   │   ├── struct.hpp
│   │           │   │   └── tuple.hpp
│   │           │   ├── types.hpp
│   │           │   ├── user_event.hpp
│   │           │   ├── utility/
│   │           │   │   ├── dim.hpp
│   │           │   │   ├── extents.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── program_cache.hpp
│   │           │   │   ├── source.hpp
│   │           │   │   └── wait_list.hpp
│   │           │   ├── utility.hpp
│   │           │   ├── version.hpp
│   │           │   └── wait_list.hpp
│   │           ├── compute.hpp
│   │           ├── concept/
│   │           │   ├── assert.hpp
│   │           │   ├── detail/
│   │           │   │   ├── backward_compatibility.hpp
│   │           │   │   ├── borland.hpp
│   │           │   │   ├── concept_def.hpp
│   │           │   │   ├── concept_undef.hpp
│   │           │   │   ├── general.hpp
│   │           │   │   ├── has_constraints.hpp
│   │           │   │   └── msvc.hpp
│   │           │   ├── requires.hpp
│   │           │   └── usage.hpp
│   │           ├── concept_archetype.hpp
│   │           ├── concept_check/
│   │           │   ├── borland.hpp
│   │           │   ├── general.hpp
│   │           │   ├── has_constraints.hpp
│   │           │   └── msvc.hpp
│   │           ├── concept_check.hpp
│   │           ├── config/
│   │           │   ├── abi/
│   │           │   │   ├── borland_prefix.hpp
│   │           │   │   ├── borland_suffix.hpp
│   │           │   │   ├── msvc_prefix.hpp
│   │           │   │   └── msvc_suffix.hpp
│   │           │   ├── abi_prefix.hpp
│   │           │   ├── abi_suffix.hpp
│   │           │   ├── auto_link.hpp
│   │           │   ├── compiler/
│   │           │   │   ├── borland.hpp
│   │           │   │   ├── clang.hpp
│   │           │   │   ├── codegear.hpp
│   │           │   │   ├── comeau.hpp
│   │           │   │   ├── common_edg.hpp
│   │           │   │   ├── compaq_cxx.hpp
│   │           │   │   ├── cray.hpp
│   │           │   │   ├── diab.hpp
│   │           │   │   ├── digitalmars.hpp
│   │           │   │   ├── gcc.hpp
│   │           │   │   ├── gcc_xml.hpp
│   │           │   │   ├── greenhills.hpp
│   │           │   │   ├── hp_acc.hpp
│   │           │   │   ├── intel.hpp
│   │           │   │   ├── kai.hpp
│   │           │   │   ├── metrowerks.hpp
│   │           │   │   ├── mpw.hpp
│   │           │   │   ├── nvcc.hpp
│   │           │   │   ├── pathscale.hpp
│   │           │   │   ├── pgi.hpp
│   │           │   │   ├── sgi_mipspro.hpp
│   │           │   │   ├── sunpro_cc.hpp
│   │           │   │   ├── vacpp.hpp
│   │           │   │   ├── visualc.hpp
│   │           │   │   ├── xlcpp.hpp
│   │           │   │   └── xlcpp_zos.hpp
│   │           │   ├── detail/
│   │           │   │   ├── posix_features.hpp
│   │           │   │   ├── select_compiler_config.hpp
│   │           │   │   ├── select_platform_config.hpp
│   │           │   │   ├── select_stdlib_config.hpp
│   │           │   │   └── suffix.hpp
│   │           │   ├── header_deprecated.hpp
│   │           │   ├── helper_macros.hpp
│   │           │   ├── no_tr1/
│   │           │   │   ├── cmath.hpp
│   │           │   │   ├── complex.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   └── utility.hpp
│   │           │   ├── platform/
│   │           │   │   ├── aix.hpp
│   │           │   │   ├── amigaos.hpp
│   │           │   │   ├── beos.hpp
│   │           │   │   ├── bsd.hpp
│   │           │   │   ├── cloudabi.hpp
│   │           │   │   ├── cray.hpp
│   │           │   │   ├── cygwin.hpp
│   │           │   │   ├── haiku.hpp
│   │           │   │   ├── hpux.hpp
│   │           │   │   ├── irix.hpp
│   │           │   │   ├── linux.hpp
│   │           │   │   ├── macos.hpp
│   │           │   │   ├── qnxnto.hpp
│   │           │   │   ├── solaris.hpp
│   │           │   │   ├── symbian.hpp
│   │           │   │   ├── vms.hpp
│   │           │   │   ├── vxworks.hpp
│   │           │   │   ├── win32.hpp
│   │           │   │   └── zos.hpp
│   │           │   ├── pragma_message.hpp
│   │           │   ├── requires_threads.hpp
│   │           │   ├── stdlib/
│   │           │   │   ├── dinkumware.hpp
│   │           │   │   ├── libcomo.hpp
│   │           │   │   ├── libcpp.hpp
│   │           │   │   ├── libstdcpp3.hpp
│   │           │   │   ├── modena.hpp
│   │           │   │   ├── msl.hpp
│   │           │   │   ├── roguewave.hpp
│   │           │   │   ├── sgi.hpp
│   │           │   │   ├── stlport.hpp
│   │           │   │   ├── vacpp.hpp
│   │           │   │   └── xlcpp_zos.hpp
│   │           │   ├── user.hpp
│   │           │   ├── warning_disable.hpp
│   │           │   └── workaround.hpp
│   │           ├── config.hpp
│   │           ├── container/
│   │           │   ├── adaptive_pool.hpp
│   │           │   ├── allocator.hpp
│   │           │   ├── allocator_traits.hpp
│   │           │   ├── container_fwd.hpp
│   │           │   ├── deque.hpp
│   │           │   ├── detail/
│   │           │   │   ├── adaptive_node_pool.hpp
│   │           │   │   ├── adaptive_node_pool_impl.hpp
│   │           │   │   ├── addressof.hpp
│   │           │   │   ├── advanced_insert_int.hpp
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── alloc_helpers.hpp
│   │           │   │   ├── alloc_lib.h
│   │           │   │   ├── allocation_type.hpp
│   │           │   │   ├── allocator_version_traits.hpp
│   │           │   │   ├── auto_link.hpp
│   │           │   │   ├── block_list.hpp
│   │           │   │   ├── block_slist.hpp
│   │           │   │   ├── compare_functors.hpp
│   │           │   │   ├── config_begin.hpp
│   │           │   │   ├── config_end.hpp
│   │           │   │   ├── construct_in_place.hpp
│   │           │   │   ├── container_or_allocator_rebind.hpp
│   │           │   │   ├── container_rebind.hpp
│   │           │   │   ├── copy_move_algo.hpp
│   │           │   │   ├── destroyers.hpp
│   │           │   │   ├── dispatch_uses_allocator.hpp
│   │           │   │   ├── dlmalloc.hpp
│   │           │   │   ├── flat_tree.hpp
│   │           │   │   ├── function_detector.hpp
│   │           │   │   ├── is_container.hpp
│   │           │   │   ├── is_contiguous_container.hpp
│   │           │   │   ├── is_sorted.hpp
│   │           │   │   ├── iterator.hpp
│   │           │   │   ├── iterator_to_raw_pointer.hpp
│   │           │   │   ├── iterators.hpp
│   │           │   │   ├── math_functions.hpp
│   │           │   │   ├── min_max.hpp
│   │           │   │   ├── minimal_char_traits_header.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── multiallocation_chain.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── next_capacity.hpp
│   │           │   │   ├── node_alloc_holder.hpp
│   │           │   │   ├── node_pool.hpp
│   │           │   │   ├── node_pool_impl.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── pair_key_mapped_of_value.hpp
│   │           │   │   ├── placement_new.hpp
│   │           │   │   ├── pool_common.hpp
│   │           │   │   ├── pool_common_alloc.hpp
│   │           │   │   ├── pool_resource.hpp
│   │           │   │   ├── singleton.hpp
│   │           │   │   ├── std_fwd.hpp
│   │           │   │   ├── thread_mutex.hpp
│   │           │   │   ├── transform_iterator.hpp
│   │           │   │   ├── tree.hpp
│   │           │   │   ├── type_traits.hpp
│   │           │   │   ├── value_functors.hpp
│   │           │   │   ├── value_init.hpp
│   │           │   │   ├── variadic_templates_tools.hpp
│   │           │   │   ├── version_type.hpp
│   │           │   │   └── workaround.hpp
│   │           │   ├── flat_map.hpp
│   │           │   ├── flat_set.hpp
│   │           │   ├── list.hpp
│   │           │   ├── map.hpp
│   │           │   ├── new_allocator.hpp
│   │           │   ├── node_allocator.hpp
│   │           │   ├── node_handle.hpp
│   │           │   ├── options.hpp
│   │           │   ├── pmr/
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── flat_map.hpp
│   │           │   │   ├── flat_set.hpp
│   │           │   │   ├── global_resource.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── memory_resource.hpp
│   │           │   │   ├── monotonic_buffer_resource.hpp
│   │           │   │   ├── polymorphic_allocator.hpp
│   │           │   │   ├── pool_options.hpp
│   │           │   │   ├── resource_adaptor.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── slist.hpp
│   │           │   │   ├── small_vector.hpp
│   │           │   │   ├── stable_vector.hpp
│   │           │   │   ├── string.hpp
│   │           │   │   ├── synchronized_pool_resource.hpp
│   │           │   │   ├── unsynchronized_pool_resource.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── scoped_allocator.hpp
│   │           │   ├── scoped_allocator_fwd.hpp
│   │           │   ├── set.hpp
│   │           │   ├── slist.hpp
│   │           │   ├── small_vector.hpp
│   │           │   ├── stable_vector.hpp
│   │           │   ├── static_vector.hpp
│   │           │   ├── string.hpp
│   │           │   ├── throw_exception.hpp
│   │           │   ├── uses_allocator.hpp
│   │           │   ├── uses_allocator_fwd.hpp
│   │           │   └── vector.hpp
│   │           ├── container_hash/
│   │           │   ├── detail/
│   │           │   │   ├── float_functions.hpp
│   │           │   │   ├── hash_float.hpp
│   │           │   │   └── limits.hpp
│   │           │   ├── extensions.hpp
│   │           │   ├── hash.hpp
│   │           │   └── hash_fwd.hpp
│   │           ├── context/
│   │           │   ├── all.hpp
│   │           │   ├── continuation.hpp
│   │           │   ├── continuation_fcontext.hpp
│   │           │   ├── continuation_ucontext.hpp
│   │           │   ├── continuation_winfib.hpp
│   │           │   ├── detail/
│   │           │   │   ├── apply.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── exchange.hpp
│   │           │   │   ├── externc.hpp
│   │           │   │   ├── fcontext.hpp
│   │           │   │   ├── index_sequence.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── prefetch.hpp
│   │           │   │   └── tuple.hpp
│   │           │   ├── fiber.hpp
│   │           │   ├── fiber_fcontext.hpp
│   │           │   ├── fiber_ucontext.hpp
│   │           │   ├── fiber_winfib.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── flags.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── posix/
│   │           │   │   ├── protected_fixedsize_stack.hpp
│   │           │   │   └── segmented_stack.hpp
│   │           │   ├── preallocated.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   ├── segmented_stack.hpp
│   │           │   ├── stack_context.hpp
│   │           │   ├── stack_traits.hpp
│   │           │   └── windows/
│   │           │       └── protected_fixedsize_stack.hpp
│   │           ├── contract/
│   │           │   ├── assert.hpp
│   │           │   ├── base_types.hpp
│   │           │   ├── call_if.hpp
│   │           │   ├── check.hpp
│   │           │   ├── constructor.hpp
│   │           │   ├── core/
│   │           │   │   ├── access.hpp
│   │           │   │   ├── check_macro.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── constructor_precondition.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── specify.hpp
│   │           │   │   └── virtual.hpp
│   │           │   ├── destructor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── assert.hpp
│   │           │   │   ├── auto_ptr.hpp
│   │           │   │   ├── check.hpp
│   │           │   │   ├── checking.hpp
│   │           │   │   ├── condition/
│   │           │   │   │   ├── cond_base.hpp
│   │           │   │   │   ├── cond_inv.hpp
│   │           │   │   │   ├── cond_post.hpp
│   │           │   │   │   └── cond_subcontracting.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── debug.hpp
│   │           │   │   ├── decl.hpp
│   │           │   │   ├── declspec.hpp
│   │           │   │   ├── exception.hpp
│   │           │   │   ├── inlined/
│   │           │   │   │   ├── core/
│   │           │   │   │   │   └── exception.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── checking.hpp
│   │           │   │   │   └── old.hpp
│   │           │   │   ├── inlined.hpp
│   │           │   │   ├── name.hpp
│   │           │   │   ├── none.hpp
│   │           │   │   ├── noop.hpp
│   │           │   │   ├── operation/
│   │           │   │   │   ├── constructor.hpp
│   │           │   │   │   ├── destructor.hpp
│   │           │   │   │   ├── function.hpp
│   │           │   │   │   ├── public_function.hpp
│   │           │   │   │   └── static_public_function.hpp
│   │           │   │   ├── operator_safe_bool.hpp
│   │           │   │   ├── preprocessor/
│   │           │   │   │   └── keyword/
│   │           │   │   │       ├── private.hpp
│   │           │   │   │       ├── protected.hpp
│   │           │   │   │       ├── public.hpp
│   │           │   │   │       ├── utility/
│   │           │   │   │       │   └── is.hpp
│   │           │   │   │       └── virtual.hpp
│   │           │   │   ├── static_local_var.hpp
│   │           │   │   ├── tvariadic.hpp
│   │           │   │   └── type_traits/
│   │           │   │       ├── member_function_types.hpp
│   │           │   │       ├── mirror.hpp
│   │           │   │       └── optional.hpp
│   │           │   ├── function.hpp
│   │           │   ├── old.hpp
│   │           │   ├── override.hpp
│   │           │   └── public_function.hpp
│   │           ├── contract.hpp
│   │           ├── contract_macro.hpp
│   │           ├── convert/
│   │           │   ├── base.hpp
│   │           │   ├── detail/
│   │           │   │   ├── char.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── has_member.hpp
│   │           │   │   ├── is_callable.hpp
│   │           │   │   ├── is_converter.hpp
│   │           │   │   ├── is_fun.hpp
│   │           │   │   ├── is_string.hpp
│   │           │   │   └── range.hpp
│   │           │   ├── lexical_cast.hpp
│   │           │   ├── parameters.hpp
│   │           │   ├── printf.hpp
│   │           │   ├── spirit.hpp
│   │           │   ├── stream.hpp
│   │           │   └── strtol.hpp
│   │           ├── convert.hpp
│   │           ├── core/
│   │           │   ├── addressof.hpp
│   │           │   ├── alloc_construct.hpp
│   │           │   ├── allocator_access.hpp
│   │           │   ├── checked_delete.hpp
│   │           │   ├── default_allocator.hpp
│   │           │   ├── demangle.hpp
│   │           │   ├── empty_value.hpp
│   │           │   ├── enable_if.hpp
│   │           │   ├── exchange.hpp
│   │           │   ├── explicit_operator_bool.hpp
│   │           │   ├── first_scalar.hpp
│   │           │   ├── ignore_unused.hpp
│   │           │   ├── is_same.hpp
│   │           │   ├── lightweight_test.hpp
│   │           │   ├── lightweight_test_trait.hpp
│   │           │   ├── no_exceptions_support.hpp
│   │           │   ├── noinit_adaptor.hpp
│   │           │   ├── noncopyable.hpp
│   │           │   ├── null_deleter.hpp
│   │           │   ├── nvp.hpp
│   │           │   ├── pointer_traits.hpp
│   │           │   ├── quick_exit.hpp
│   │           │   ├── ref.hpp
│   │           │   ├── scoped_enum.hpp
│   │           │   ├── swap.hpp
│   │           │   ├── typeinfo.hpp
│   │           │   ├── uncaught_exceptions.hpp
│   │           │   ├── underlying_type.hpp
│   │           │   └── use_default.hpp
│   │           ├── coroutine/
│   │           │   ├── all.hpp
│   │           │   ├── asymmetric_coroutine.hpp
│   │           │   ├── attributes.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── coroutine_context.hpp
│   │           │   │   ├── data.hpp
│   │           │   │   ├── flags.hpp
│   │           │   │   ├── parameters.hpp
│   │           │   │   ├── preallocated.hpp
│   │           │   │   ├── pull_coroutine_impl.hpp
│   │           │   │   ├── pull_coroutine_object.hpp
│   │           │   │   ├── pull_coroutine_synthesized.hpp
│   │           │   │   ├── push_coroutine_impl.hpp
│   │           │   │   ├── push_coroutine_object.hpp
│   │           │   │   ├── push_coroutine_synthesized.hpp
│   │           │   │   ├── setup.hpp
│   │           │   │   ├── symmetric_coroutine_call.hpp
│   │           │   │   ├── symmetric_coroutine_impl.hpp
│   │           │   │   ├── symmetric_coroutine_object.hpp
│   │           │   │   ├── symmetric_coroutine_yield.hpp
│   │           │   │   ├── trampoline.hpp
│   │           │   │   ├── trampoline_pull.hpp
│   │           │   │   └── trampoline_push.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── flags.hpp
│   │           │   ├── posix/
│   │           │   │   ├── protected_stack_allocator.hpp
│   │           │   │   └── segmented_stack_allocator.hpp
│   │           │   ├── protected_stack_allocator.hpp
│   │           │   ├── segmented_stack_allocator.hpp
│   │           │   ├── stack_allocator.hpp
│   │           │   ├── stack_context.hpp
│   │           │   ├── stack_traits.hpp
│   │           │   ├── standard_stack_allocator.hpp
│   │           │   ├── symmetric_coroutine.hpp
│   │           │   └── windows/
│   │           │       └── protected_stack_allocator.hpp
│   │           ├── coroutine2/
│   │           │   ├── all.hpp
│   │           │   ├── coroutine.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── coroutine.hpp
│   │           │   │   ├── create_control_block.ipp
│   │           │   │   ├── decay_copy.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── pull_control_block_cc.hpp
│   │           │   │   ├── pull_control_block_cc.ipp
│   │           │   │   ├── pull_coroutine.hpp
│   │           │   │   ├── pull_coroutine.ipp
│   │           │   │   ├── push_control_block_cc.hpp
│   │           │   │   ├── push_control_block_cc.ipp
│   │           │   │   ├── push_coroutine.hpp
│   │           │   │   ├── push_coroutine.ipp
│   │           │   │   ├── state.hpp
│   │           │   │   └── wrap.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   └── segmented_stack.hpp
│   │           ├── crc.hpp
│   │           ├── cregex.hpp
│   │           ├── cstdfloat.hpp
│   │           ├── cstdint.hpp
│   │           ├── cstdlib.hpp
│   │           ├── current_function.hpp
│   │           ├── cxx11_char_types.hpp
│   │           ├── date_time/
│   │           │   ├── adjust_functors.hpp
│   │           │   ├── c_local_time_adjustor.hpp
│   │           │   ├── c_time.hpp
│   │           │   ├── compiler_config.hpp
│   │           │   ├── constrained_value.hpp
│   │           │   ├── date.hpp
│   │           │   ├── date_clock_device.hpp
│   │           │   ├── date_defs.hpp
│   │           │   ├── date_duration.hpp
│   │           │   ├── date_duration_types.hpp
│   │           │   ├── date_facet.hpp
│   │           │   ├── date_format_simple.hpp
│   │           │   ├── date_formatting.hpp
│   │           │   ├── date_formatting_limited.hpp
│   │           │   ├── date_formatting_locales.hpp
│   │           │   ├── date_generator_formatter.hpp
│   │           │   ├── date_generator_parser.hpp
│   │           │   ├── date_generators.hpp
│   │           │   ├── date_iterator.hpp
│   │           │   ├── date_names_put.hpp
│   │           │   ├── date_parsing.hpp
│   │           │   ├── dst_rules.hpp
│   │           │   ├── dst_transition_generators.hpp
│   │           │   ├── filetime_functions.hpp
│   │           │   ├── find_match.hpp
│   │           │   ├── format_date_parser.hpp
│   │           │   ├── gregorian/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── formatters.hpp
│   │           │   │   ├── formatters_limited.hpp
│   │           │   │   ├── greg_calendar.hpp
│   │           │   │   ├── greg_date.hpp
│   │           │   │   ├── greg_day.hpp
│   │           │   │   ├── greg_day_of_year.hpp
│   │           │   │   ├── greg_duration.hpp
│   │           │   │   ├── greg_duration_types.hpp
│   │           │   │   ├── greg_facet.hpp
│   │           │   │   ├── greg_month.hpp
│   │           │   │   ├── greg_serialize.hpp
│   │           │   │   ├── greg_weekday.hpp
│   │           │   │   ├── greg_year.hpp
│   │           │   │   ├── greg_ymd.hpp
│   │           │   │   ├── gregorian.hpp
│   │           │   │   ├── gregorian_io.hpp
│   │           │   │   ├── gregorian_types.hpp
│   │           │   │   └── parsers.hpp
│   │           │   ├── gregorian_calendar.hpp
│   │           │   ├── gregorian_calendar.ipp
│   │           │   ├── int_adapter.hpp
│   │           │   ├── iso_format.hpp
│   │           │   ├── local_time/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── custom_time_zone.hpp
│   │           │   │   ├── date_duration_operators.hpp
│   │           │   │   ├── dst_transition_day_rules.hpp
│   │           │   │   ├── local_date_time.hpp
│   │           │   │   ├── local_time.hpp
│   │           │   │   ├── local_time_io.hpp
│   │           │   │   ├── local_time_types.hpp
│   │           │   │   ├── posix_time_zone.hpp
│   │           │   │   └── tz_database.hpp
│   │           │   ├── local_time_adjustor.hpp
│   │           │   ├── local_timezone_defs.hpp
│   │           │   ├── locale_config.hpp
│   │           │   ├── microsec_time_clock.hpp
│   │           │   ├── parse_format_base.hpp
│   │           │   ├── period.hpp
│   │           │   ├── period_formatter.hpp
│   │           │   ├── period_parser.hpp
│   │           │   ├── posix_time/
│   │           │   │   ├── conversion.hpp
│   │           │   │   ├── date_duration_operators.hpp
│   │           │   │   ├── posix_time.hpp
│   │           │   │   ├── posix_time_config.hpp
│   │           │   │   ├── posix_time_duration.hpp
│   │           │   │   ├── posix_time_io.hpp
│   │           │   │   ├── posix_time_legacy_io.hpp
│   │           │   │   ├── posix_time_system.hpp
│   │           │   │   ├── posix_time_types.hpp
│   │           │   │   ├── ptime.hpp
│   │           │   │   ├── time_formatters.hpp
│   │           │   │   ├── time_formatters_limited.hpp
│   │           │   │   ├── time_parsers.hpp
│   │           │   │   ├── time_period.hpp
│   │           │   │   └── time_serialize.hpp
│   │           │   ├── special_defs.hpp
│   │           │   ├── special_values_formatter.hpp
│   │           │   ├── special_values_parser.hpp
│   │           │   ├── string_convert.hpp
│   │           │   ├── string_parse_tree.hpp
│   │           │   ├── strings_from_facet.hpp
│   │           │   ├── time.hpp
│   │           │   ├── time_clock.hpp
│   │           │   ├── time_defs.hpp
│   │           │   ├── time_duration.hpp
│   │           │   ├── time_facet.hpp
│   │           │   ├── time_formatting_streams.hpp
│   │           │   ├── time_iterator.hpp
│   │           │   ├── time_parsing.hpp
│   │           │   ├── time_resolution_traits.hpp
│   │           │   ├── time_system_counted.hpp
│   │           │   ├── time_system_split.hpp
│   │           │   ├── time_zone_base.hpp
│   │           │   ├── time_zone_names.hpp
│   │           │   ├── tz_db_base.hpp
│   │           │   ├── wrapping_int.hpp
│   │           │   └── year_month_day.hpp
│   │           ├── date_time.hpp
│   │           ├── detail/
│   │           │   ├── algorithm.hpp
│   │           │   ├── allocator_utilities.hpp
│   │           │   ├── atomic_count.hpp
│   │           │   ├── basic_pointerbuf.hpp
│   │           │   ├── binary_search.hpp
│   │           │   ├── bitmask.hpp
│   │           │   ├── call_traits.hpp
│   │           │   ├── catch_exceptions.hpp
│   │           │   ├── compressed_pair.hpp
│   │           │   ├── container_fwd.hpp
│   │           │   ├── fenv.hpp
│   │           │   ├── has_default_constructor.hpp
│   │           │   ├── identifier.hpp
│   │           │   ├── indirect_traits.hpp
│   │           │   ├── interlocked.hpp
│   │           │   ├── is_incrementable.hpp
│   │           │   ├── is_sorted.hpp
│   │           │   ├── is_xxx.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── lcast_precision.hpp
│   │           │   ├── lightweight_main.hpp
│   │           │   ├── lightweight_mutex.hpp
│   │           │   ├── lightweight_test.hpp
│   │           │   ├── lightweight_test_report.hpp
│   │           │   ├── lightweight_thread.hpp
│   │           │   ├── named_template_params.hpp
│   │           │   ├── no_exceptions_support.hpp
│   │           │   ├── numeric_traits.hpp
│   │           │   ├── ob_compressed_pair.hpp
│   │           │   ├── quick_allocator.hpp
│   │           │   ├── reference_content.hpp
│   │           │   ├── scoped_enum_emulation.hpp
│   │           │   ├── select_type.hpp
│   │           │   ├── sp_typeinfo.hpp
│   │           │   ├── templated_streams.hpp
│   │           │   ├── utf8_codecvt_facet.hpp
│   │           │   ├── utf8_codecvt_facet.ipp
│   │           │   ├── winapi/
│   │           │   │   ├── access_rights.hpp
│   │           │   │   ├── apc.hpp
│   │           │   │   ├── basic_types.hpp
│   │           │   │   ├── bcrypt.hpp
│   │           │   │   ├── character_code_conversion.hpp
│   │           │   │   ├── condition_variable.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── critical_section.hpp
│   │           │   │   ├── crypt.hpp
│   │           │   │   ├── dbghelp.hpp
│   │           │   │   ├── debugapi.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── deprecated_namespace.hpp
│   │           │   │   ├── directory_management.hpp
│   │           │   │   ├── dll.hpp
│   │           │   │   ├── environment.hpp
│   │           │   │   ├── error_codes.hpp
│   │           │   │   ├── error_handling.hpp
│   │           │   │   ├── event.hpp
│   │           │   │   ├── file_management.hpp
│   │           │   │   ├── file_mapping.hpp
│   │           │   │   ├── get_current_process.hpp
│   │           │   │   ├── get_current_process_id.hpp
│   │           │   │   ├── get_current_thread.hpp
│   │           │   │   ├── get_current_thread_id.hpp
│   │           │   │   ├── get_last_error.hpp
│   │           │   │   ├── get_process_times.hpp
│   │           │   │   ├── get_system_directory.hpp
│   │           │   │   ├── get_thread_times.hpp
│   │           │   │   ├── handle_info.hpp
│   │           │   │   ├── handles.hpp
│   │           │   │   ├── heap_memory.hpp
│   │           │   │   ├── init_once.hpp
│   │           │   │   ├── jobs.hpp
│   │           │   │   ├── limits.hpp
│   │           │   │   ├── local_memory.hpp
│   │           │   │   ├── memory.hpp
│   │           │   │   ├── mutex.hpp
│   │           │   │   ├── overlapped.hpp
│   │           │   │   ├── page_protection_flags.hpp
│   │           │   │   ├── pipes.hpp
│   │           │   │   ├── priority_class.hpp
│   │           │   │   ├── process.hpp
│   │           │   │   ├── security.hpp
│   │           │   │   ├── semaphore.hpp
│   │           │   │   ├── shell.hpp
│   │           │   │   ├── show_window.hpp
│   │           │   │   ├── srw_lock.hpp
│   │           │   │   ├── stack_backtrace.hpp
│   │           │   │   ├── synchronization.hpp
│   │           │   │   ├── system.hpp
│   │           │   │   ├── thread.hpp
│   │           │   │   ├── thread_pool.hpp
│   │           │   │   ├── time.hpp
│   │           │   │   ├── timers.hpp
│   │           │   │   ├── tls.hpp
│   │           │   │   ├── wait.hpp
│   │           │   │   └── waitable_timer.hpp
│   │           │   └── workaround.hpp
│   │           ├── dll/
│   │           │   ├── alias.hpp
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── aggressive_ptr_cast.hpp
│   │           │   │   ├── ctor_dtor.hpp
│   │           │   │   ├── demangling/
│   │           │   │   │   ├── demangle_symbol.hpp
│   │           │   │   │   ├── itanium.hpp
│   │           │   │   │   ├── mangled_storage_base.hpp
│   │           │   │   │   └── msvc.hpp
│   │           │   │   ├── elf_info.hpp
│   │           │   │   ├── get_mem_fn_type.hpp
│   │           │   │   ├── import_mangled_helpers.hpp
│   │           │   │   ├── macho_info.hpp
│   │           │   │   ├── pe_info.hpp
│   │           │   │   ├── posix/
│   │           │   │   │   ├── path_from_handle.hpp
│   │           │   │   │   ├── program_location_impl.hpp
│   │           │   │   │   └── shared_library_impl.hpp
│   │           │   │   ├── system_error.hpp
│   │           │   │   ├── type_info.hpp
│   │           │   │   └── windows/
│   │           │   │       ├── path_from_handle.hpp
│   │           │   │       └── shared_library_impl.hpp
│   │           │   ├── import.hpp
│   │           │   ├── import_class.hpp
│   │           │   ├── import_mangled.hpp
│   │           │   ├── library_info.hpp
│   │           │   ├── runtime_symbol_info.hpp
│   │           │   ├── shared_library.hpp
│   │           │   ├── shared_library_load_mode.hpp
│   │           │   └── smart_library.hpp
│   │           ├── dll.hpp
│   │           ├── dynamic_bitset/
│   │           │   ├── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── dynamic_bitset.hpp
│   │           │   │   └── lowest_bit.hpp
│   │           │   ├── dynamic_bitset.hpp
│   │           │   └── serialization.hpp
│   │           ├── dynamic_bitset.hpp
│   │           ├── dynamic_bitset_fwd.hpp
│   │           ├── enable_shared_from_this.hpp
│   │           ├── endian/
│   │           │   ├── arithmetic.hpp
│   │           │   ├── buffers.hpp
│   │           │   ├── conversion.hpp
│   │           │   ├── detail/
│   │           │   │   ├── disable_warnings.hpp
│   │           │   │   ├── disable_warnings_pop.hpp
│   │           │   │   ├── endian_load.hpp
│   │           │   │   ├── endian_reverse.hpp
│   │           │   │   ├── endian_store.hpp
│   │           │   │   ├── integral_by_size.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── is_scoped_enum.hpp
│   │           │   │   ├── is_trivially_copyable.hpp
│   │           │   │   └── order.hpp
│   │           │   └── endian.hpp
│   │           ├── endian.hpp
│   │           ├── exception/
│   │           │   ├── all.hpp
│   │           │   ├── current_exception_cast.hpp
│   │           │   ├── detail/
│   │           │   │   ├── clone_current_exception.hpp
│   │           │   │   ├── error_info_impl.hpp
│   │           │   │   ├── exception_ptr.hpp
│   │           │   │   ├── is_output_streamable.hpp
│   │           │   │   ├── object_hex_dump.hpp
│   │           │   │   ├── shared_ptr.hpp
│   │           │   │   └── type_info.hpp
│   │           │   ├── diagnostic_information.hpp
│   │           │   ├── enable_current_exception.hpp
│   │           │   ├── enable_error_info.hpp
│   │           │   ├── errinfo_api_function.hpp
│   │           │   ├── errinfo_at_line.hpp
│   │           │   ├── errinfo_errno.hpp
│   │           │   ├── errinfo_file_handle.hpp
│   │           │   ├── errinfo_file_name.hpp
│   │           │   ├── errinfo_file_open_mode.hpp
│   │           │   ├── errinfo_nested_exception.hpp
│   │           │   ├── errinfo_type_info_name.hpp
│   │           │   ├── error_info.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── get_error_info.hpp
│   │           │   ├── info.hpp
│   │           │   ├── info_tuple.hpp
│   │           │   ├── to_string.hpp
│   │           │   └── to_string_stub.hpp
│   │           ├── exception_ptr.hpp
│   │           ├── fiber/
│   │           │   ├── algo/
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── round_robin.hpp
│   │           │   │   ├── shared_work.hpp
│   │           │   │   └── work_stealing.hpp
│   │           │   ├── all.hpp
│   │           │   ├── barrier.hpp
│   │           │   ├── buffered_channel.hpp
│   │           │   ├── channel_op_status.hpp
│   │           │   ├── condition_variable.hpp
│   │           │   ├── context.hpp
│   │           │   ├── cuda/
│   │           │   │   └── waitfor.hpp
│   │           │   ├── detail/
│   │           │   │   ├── config.hpp
│   │           │   │   ├── context_spinlock_queue.hpp
│   │           │   │   ├── context_spmc_queue.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── cpu_relax.hpp
│   │           │   │   ├── data.hpp
│   │           │   │   ├── decay_copy.hpp
│   │           │   │   ├── disable_overload.hpp
│   │           │   │   ├── exchange.hpp
│   │           │   │   ├── fss.hpp
│   │           │   │   ├── futex.hpp
│   │           │   │   ├── is_all_same.hpp
│   │           │   │   ├── rtm.hpp
│   │           │   │   ├── spinlock.hpp
│   │           │   │   ├── spinlock_rtm.hpp
│   │           │   │   ├── spinlock_status.hpp
│   │           │   │   ├── spinlock_ttas.hpp
│   │           │   │   ├── spinlock_ttas_adaptive.hpp
│   │           │   │   ├── spinlock_ttas_adaptive_futex.hpp
│   │           │   │   ├── spinlock_ttas_futex.hpp
│   │           │   │   └── thread_barrier.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── fiber.hpp
│   │           │   ├── fixedsize_stack.hpp
│   │           │   ├── fss.hpp
│   │           │   ├── future/
│   │           │   │   ├── async.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── shared_state.hpp
│   │           │   │   │   ├── shared_state_object.hpp
│   │           │   │   │   ├── task_base.hpp
│   │           │   │   │   └── task_object.hpp
│   │           │   │   ├── future.hpp
│   │           │   │   ├── future_status.hpp
│   │           │   │   ├── packaged_task.hpp
│   │           │   │   └── promise.hpp
│   │           │   ├── future.hpp
│   │           │   ├── hip/
│   │           │   │   └── waitfor.hpp
│   │           │   ├── mutex.hpp
│   │           │   ├── numa/
│   │           │   │   ├── algo/
│   │           │   │   │   └── work_stealing.hpp
│   │           │   │   ├── all.hpp
│   │           │   │   ├── pin_thread.hpp
│   │           │   │   └── topology.hpp
│   │           │   ├── operations.hpp
│   │           │   ├── policy.hpp
│   │           │   ├── pooled_fixedsize_stack.hpp
│   │           │   ├── properties.hpp
│   │           │   ├── protected_fixedsize_stack.hpp
│   │           │   ├── recursive_mutex.hpp
│   │           │   ├── recursive_timed_mutex.hpp
│   │           │   ├── scheduler.hpp
│   │           │   ├── segmented_stack.hpp
│   │           │   ├── timed_mutex.hpp
│   │           │   ├── type.hpp
│   │           │   └── unbuffered_channel.hpp
│   │           ├── filesystem/
│   │           │   ├── config.hpp
│   │           │   ├── convenience.hpp
│   │           │   ├── detail/
│   │           │   │   ├── macro_value.hpp
│   │           │   │   └── utf8_codecvt_facet.hpp
│   │           │   ├── directory.hpp
│   │           │   ├── exception.hpp
│   │           │   ├── file_status.hpp
│   │           │   ├── fstream.hpp
│   │           │   ├── operations.hpp
│   │           │   ├── path.hpp
│   │           │   ├── path_traits.hpp
│   │           │   └── string_file.hpp
│   │           ├── filesystem.hpp
│   │           ├── flyweight/
│   │           │   ├── assoc_container_factory.hpp
│   │           │   ├── assoc_container_factory_fwd.hpp
│   │           │   ├── detail/
│   │           │   │   ├── archive_constructed.hpp
│   │           │   │   ├── default_value_policy.hpp
│   │           │   │   ├── dyn_perfect_fwd.hpp
│   │           │   │   ├── flyweight_core.hpp
│   │           │   │   ├── is_placeholder_expr.hpp
│   │           │   │   ├── nested_xxx_if_not_ph.hpp
│   │           │   │   ├── not_placeholder_expr.hpp
│   │           │   │   ├── perfect_fwd.hpp
│   │           │   │   ├── pp_perfect_fwd.hpp
│   │           │   │   ├── recursive_lw_mutex.hpp
│   │           │   │   ├── serialization_helper.hpp
│   │           │   │   └── value_tag.hpp
│   │           │   ├── factory_tag.hpp
│   │           │   ├── flyweight.hpp
│   │           │   ├── flyweight_fwd.hpp
│   │           │   ├── hashed_factory.hpp
│   │           │   ├── hashed_factory_fwd.hpp
│   │           │   ├── holder_tag.hpp
│   │           │   ├── intermodule_holder.hpp
│   │           │   ├── intermodule_holder_fwd.hpp
│   │           │   ├── key_value.hpp
│   │           │   ├── key_value_fwd.hpp
│   │           │   ├── locking_tag.hpp
│   │           │   ├── no_locking.hpp
│   │           │   ├── no_locking_fwd.hpp
│   │           │   ├── no_tracking.hpp
│   │           │   ├── no_tracking_fwd.hpp
│   │           │   ├── refcounted.hpp
│   │           │   ├── refcounted_fwd.hpp
│   │           │   ├── serialize.hpp
│   │           │   ├── set_factory.hpp
│   │           │   ├── set_factory_fwd.hpp
│   │           │   ├── simple_locking.hpp
│   │           │   ├── simple_locking_fwd.hpp
│   │           │   ├── static_holder.hpp
│   │           │   ├── static_holder_fwd.hpp
│   │           │   ├── tag.hpp
│   │           │   └── tracking_tag.hpp
│   │           ├── flyweight.hpp
│   │           ├── foreach.hpp
│   │           ├── foreach_fwd.hpp
│   │           ├── format/
│   │           │   ├── alt_sstream.hpp
│   │           │   ├── alt_sstream_impl.hpp
│   │           │   ├── detail/
│   │           │   │   ├── compat_workarounds.hpp
│   │           │   │   ├── config_macros.hpp
│   │           │   │   ├── msvc_disambiguater.hpp
│   │           │   │   ├── unset_macros.hpp
│   │           │   │   ├── workarounds_gcc-2_95.hpp
│   │           │   │   └── workarounds_stlport.hpp
│   │           │   ├── exceptions.hpp
│   │           │   ├── feed_args.hpp
│   │           │   ├── format_class.hpp
│   │           │   ├── format_fwd.hpp
│   │           │   ├── format_implementation.hpp
│   │           │   ├── free_funcs.hpp
│   │           │   ├── group.hpp
│   │           │   ├── internals.hpp
│   │           │   ├── internals_fwd.hpp
│   │           │   └── parsing.hpp
│   │           ├── format.hpp
│   │           ├── function/
│   │           │   ├── detail/
│   │           │   │   ├── function_iterate.hpp
│   │           │   │   ├── gen_maybe_include.pl
│   │           │   │   ├── maybe_include.hpp
│   │           │   │   └── prologue.hpp
│   │           │   ├── function0.hpp
│   │           │   ├── function1.hpp
│   │           │   ├── function10.hpp
│   │           │   ├── function2.hpp
│   │           │   ├── function3.hpp
│   │           │   ├── function4.hpp
│   │           │   ├── function5.hpp
│   │           │   ├── function6.hpp
│   │           │   ├── function7.hpp
│   │           │   ├── function8.hpp
│   │           │   ├── function9.hpp
│   │           │   ├── function_base.hpp
│   │           │   ├── function_fwd.hpp
│   │           │   ├── function_template.hpp
│   │           │   ├── function_typeof.hpp
│   │           │   └── gen_function_N.pl
│   │           ├── function.hpp
│   │           ├── function_equal.hpp
│   │           ├── function_output_iterator.hpp
│   │           ├── function_types/
│   │           │   ├── components.hpp
│   │           │   ├── config/
│   │           │   │   ├── cc_names.hpp
│   │           │   │   ├── compiler.hpp
│   │           │   │   └── config.hpp
│   │           │   ├── detail/
│   │           │   │   ├── class_transform.hpp
│   │           │   │   ├── classifier.hpp
│   │           │   │   ├── classifier_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   ├── components_as_mpl_sequence.hpp
│   │           │   │   ├── components_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   ├── cv_traits.hpp
│   │           │   │   ├── encoding/
│   │           │   │   │   ├── aliases_def.hpp
│   │           │   │   │   ├── aliases_undef.hpp
│   │           │   │   │   ├── def.hpp
│   │           │   │   │   └── undef.hpp
│   │           │   │   ├── pp_arity_loop.hpp
│   │           │   │   ├── pp_cc_loop/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_loop.hpp
│   │           │   │   ├── pp_retag_default_cc/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_tags/
│   │           │   │   │   ├── cc_tag.hpp
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── pp_variate_loop/
│   │           │   │   │   ├── master.hpp
│   │           │   │   │   └── preprocessed.hpp
│   │           │   │   ├── retag_default_cc.hpp
│   │           │   │   ├── synthesize.hpp
│   │           │   │   ├── synthesize_impl/
│   │           │   │   │   ├── arity10_0.hpp
│   │           │   │   │   ├── arity10_1.hpp
│   │           │   │   │   ├── arity20_0.hpp
│   │           │   │   │   ├── arity20_1.hpp
│   │           │   │   │   ├── arity30_0.hpp
│   │           │   │   │   ├── arity30_1.hpp
│   │           │   │   │   ├── arity40_0.hpp
│   │           │   │   │   ├── arity40_1.hpp
│   │           │   │   │   ├── arity50_0.hpp
│   │           │   │   │   ├── arity50_1.hpp
│   │           │   │   │   └── master.hpp
│   │           │   │   └── to_sequence.hpp
│   │           │   ├── function_arity.hpp
│   │           │   ├── function_pointer.hpp
│   │           │   ├── function_reference.hpp
│   │           │   ├── function_type.hpp
│   │           │   ├── is_callable_builtin.hpp
│   │           │   ├── is_function.hpp
│   │           │   ├── is_function_pointer.hpp
│   │           │   ├── is_function_reference.hpp
│   │           │   ├── is_member_function_pointer.hpp
│   │           │   ├── is_member_object_pointer.hpp
│   │           │   ├── is_member_pointer.hpp
│   │           │   ├── is_nonmember_callable_builtin.hpp
│   │           │   ├── member_function_pointer.hpp
│   │           │   ├── member_object_pointer.hpp
│   │           │   ├── parameter_types.hpp
│   │           │   ├── property_tags.hpp
│   │           │   └── result_type.hpp
│   │           ├── functional/
│   │           │   ├── factory.hpp
│   │           │   ├── forward_adapter.hpp
│   │           │   ├── hash/
│   │           │   │   ├── extensions.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   └── hash_fwd.hpp
│   │           │   ├── hash.hpp
│   │           │   ├── hash_fwd.hpp
│   │           │   ├── lightweight_forward_adapter.hpp
│   │           │   ├── overloaded_function/
│   │           │   │   ├── config.hpp
│   │           │   │   └── detail/
│   │           │   │       ├── base.hpp
│   │           │   │       └── function_type.hpp
│   │           │   ├── overloaded_function.hpp
│   │           │   └── value_factory.hpp
│   │           ├── functional.hpp
│   │           ├── fusion/
│   │           │   ├── adapted/
│   │           │   │   ├── adt/
│   │           │   │   │   ├── adapt_adt.hpp
│   │           │   │   │   ├── adapt_adt_named.hpp
│   │           │   │   │   ├── adapt_assoc_adt.hpp
│   │           │   │   │   ├── adapt_assoc_adt_named.hpp
│   │           │   │   │   └── detail/
│   │           │   │   │       ├── adapt_base.hpp
│   │           │   │   │       ├── adapt_base_assoc_attr_filler.hpp
│   │           │   │   │       ├── adapt_base_attr_filler.hpp
│   │           │   │   │       └── extension.hpp
│   │           │   │   ├── adt.hpp
│   │           │   │   ├── array/
│   │           │   │   │   ├── at_impl.hpp
│   │           │   │   │   ├── begin_impl.hpp
│   │           │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   ├── deref_impl.hpp
│   │           │   │   │   ├── end_impl.hpp
│   │           │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   ├── size_impl.hpp
│   │           │   │   │   ├── tag_of.hpp
│   │           │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   └── value_of_impl.hpp
│   │           │   │   ├── array.hpp
│   │           │   │   ├── boost_array/
│   │           │   │   │   ├── array_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── boost_array.hpp
│   │           │   │   ├── boost_tuple/
│   │           │   │   │   ├── boost_tuple_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_cons.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── mpl/
│   │           │   │   │   │   └── clear.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── boost_tuple.hpp
│   │           │   │   ├── mpl/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── empty_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── has_key_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── mpl_iterator.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── std_array/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── array_size.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── std_array_iterator.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── std_array.hpp
│   │           │   │   ├── std_pair.hpp
│   │           │   │   ├── std_tuple/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_std_tuple.hpp
│   │           │   │   │   │   ├── category_of_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── is_view_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   ├── mpl/
│   │           │   │   │   │   └── clear.hpp
│   │           │   │   │   ├── std_tuple_iterator.hpp
│   │           │   │   │   └── tag_of.hpp
│   │           │   │   ├── std_tuple.hpp
│   │           │   │   ├── struct/
│   │           │   │   │   ├── adapt_assoc_struct.hpp
│   │           │   │   │   ├── adapt_assoc_struct_named.hpp
│   │           │   │   │   ├── adapt_struct.hpp
│   │           │   │   │   ├── adapt_struct_named.hpp
│   │           │   │   │   ├── define_assoc_struct.hpp
│   │           │   │   │   ├── define_struct.hpp
│   │           │   │   │   ├── define_struct_inline.hpp
│   │           │   │   │   └── detail/
│   │           │   │   │       ├── adapt_auto.hpp
│   │           │   │   │       ├── adapt_base.hpp
│   │           │   │   │       ├── adapt_base_assoc_attr_filler.hpp
│   │           │   │   │       ├── adapt_base_attr_filler.hpp
│   │           │   │   │       ├── adapt_is_tpl.hpp
│   │           │   │   │       ├── at_impl.hpp
│   │           │   │   │       ├── begin_impl.hpp
│   │           │   │   │       ├── category_of_impl.hpp
│   │           │   │   │       ├── define_struct.hpp
│   │           │   │   │       ├── define_struct_inline.hpp
│   │           │   │   │       ├── deref_data_impl.hpp
│   │           │   │   │       ├── deref_impl.hpp
│   │           │   │   │       ├── end_impl.hpp
│   │           │   │   │       ├── extension.hpp
│   │           │   │   │       ├── is_sequence_impl.hpp
│   │           │   │   │       ├── is_view_impl.hpp
│   │           │   │   │       ├── key_of_impl.hpp
│   │           │   │   │       ├── namespace.hpp
│   │           │   │   │       ├── preprocessor/
│   │           │   │   │       │   └── is_seq.hpp
│   │           │   │   │       ├── proxy_type.hpp
│   │           │   │   │       ├── size_impl.hpp
│   │           │   │   │       ├── value_at_impl.hpp
│   │           │   │   │       ├── value_of_data_impl.hpp
│   │           │   │   │       └── value_of_impl.hpp
│   │           │   │   └── struct.hpp
│   │           │   ├── adapted.hpp
│   │           │   ├── algorithm/
│   │           │   │   ├── auxiliary/
│   │           │   │   │   ├── copy.hpp
│   │           │   │   │   └── move.hpp
│   │           │   │   ├── auxiliary.hpp
│   │           │   │   ├── iteration/
│   │           │   │   │   ├── accumulate.hpp
│   │           │   │   │   ├── accumulate_fwd.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── fold.hpp
│   │           │   │   │   │   ├── for_each.hpp
│   │           │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   ├── fold.hpp
│   │           │   │   │   │   │   ├── iter_fold.hpp
│   │           │   │   │   │   │   ├── reverse_fold.hpp
│   │           │   │   │   │   │   └── reverse_iter_fold.hpp
│   │           │   │   │   │   ├── segmented_fold.hpp
│   │           │   │   │   │   └── segmented_for_each.hpp
│   │           │   │   │   ├── fold.hpp
│   │           │   │   │   ├── fold_fwd.hpp
│   │           │   │   │   ├── for_each.hpp
│   │           │   │   │   ├── for_each_fwd.hpp
│   │           │   │   │   ├── iter_fold.hpp
│   │           │   │   │   ├── iter_fold_fwd.hpp
│   │           │   │   │   ├── reverse_fold.hpp
│   │           │   │   │   ├── reverse_fold_fwd.hpp
│   │           │   │   │   ├── reverse_iter_fold.hpp
│   │           │   │   │   └── reverse_iter_fold_fwd.hpp
│   │           │   │   ├── iteration.hpp
│   │           │   │   ├── query/
│   │           │   │   │   ├── all.hpp
│   │           │   │   │   ├── any.hpp
│   │           │   │   │   ├── count.hpp
│   │           │   │   │   ├── count_if.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── all.hpp
│   │           │   │   │   │   ├── any.hpp
│   │           │   │   │   │   ├── count.hpp
│   │           │   │   │   │   ├── count_if.hpp
│   │           │   │   │   │   ├── find_if.hpp
│   │           │   │   │   │   ├── segmented_find.hpp
│   │           │   │   │   │   └── segmented_find_if.hpp
│   │           │   │   │   ├── find.hpp
│   │           │   │   │   ├── find_fwd.hpp
│   │           │   │   │   ├── find_if.hpp
│   │           │   │   │   ├── find_if_fwd.hpp
│   │           │   │   │   └── none.hpp
│   │           │   │   ├── query.hpp
│   │           │   │   ├── transformation/
│   │           │   │   │   ├── clear.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   ├── zip.hpp
│   │           │   │   │   │   │   ├── zip10.hpp
│   │           │   │   │   │   │   ├── zip20.hpp
│   │           │   │   │   │   │   ├── zip30.hpp
│   │           │   │   │   │   │   ├── zip40.hpp
│   │           │   │   │   │   │   └── zip50.hpp
│   │           │   │   │   │   ├── replace.hpp
│   │           │   │   │   │   └── replace_if.hpp
│   │           │   │   │   ├── erase.hpp
│   │           │   │   │   ├── erase_key.hpp
│   │           │   │   │   ├── filter.hpp
│   │           │   │   │   ├── filter_if.hpp
│   │           │   │   │   ├── flatten.hpp
│   │           │   │   │   ├── insert.hpp
│   │           │   │   │   ├── insert_range.hpp
│   │           │   │   │   ├── join.hpp
│   │           │   │   │   ├── pop_back.hpp
│   │           │   │   │   ├── pop_front.hpp
│   │           │   │   │   ├── push_back.hpp
│   │           │   │   │   ├── push_front.hpp
│   │           │   │   │   ├── remove.hpp
│   │           │   │   │   ├── remove_if.hpp
│   │           │   │   │   ├── replace.hpp
│   │           │   │   │   ├── replace_if.hpp
│   │           │   │   │   ├── reverse.hpp
│   │           │   │   │   ├── transform.hpp
│   │           │   │   │   └── zip.hpp
│   │           │   │   └── transformation.hpp
│   │           │   ├── algorithm.hpp
│   │           │   ├── container/
│   │           │   │   ├── deque/
│   │           │   │   │   ├── back_extended_deque.hpp
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── deque.hpp
│   │           │   │   │   ├── deque_fwd.hpp
│   │           │   │   │   ├── deque_iterator.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_deque.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_deque.hpp
│   │           │   │   │   │   │   ├── build_deque.hpp
│   │           │   │   │   │   │   ├── deque.hpp
│   │           │   │   │   │   │   ├── deque_forward_ctor.hpp
│   │           │   │   │   │   │   ├── deque_fwd.hpp
│   │           │   │   │   │   │   ├── deque_initial_size.hpp
│   │           │   │   │   │   │   ├── deque_keyed_values.hpp
│   │           │   │   │   │   │   ├── deque_keyed_values_call.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   └── preprocessed/
│   │           │   │   │   │   │       ├── as_deque.hpp
│   │           │   │   │   │   │       ├── as_deque10.hpp
│   │           │   │   │   │   │       ├── as_deque20.hpp
│   │           │   │   │   │   │       ├── as_deque30.hpp
│   │           │   │   │   │   │       ├── as_deque40.hpp
│   │           │   │   │   │   │       ├── as_deque50.hpp
│   │           │   │   │   │   │       ├── deque.hpp
│   │           │   │   │   │   │       ├── deque10.hpp
│   │           │   │   │   │   │       ├── deque10_fwd.hpp
│   │           │   │   │   │   │       ├── deque20.hpp
│   │           │   │   │   │   │       ├── deque20_fwd.hpp
│   │           │   │   │   │   │       ├── deque30.hpp
│   │           │   │   │   │   │       ├── deque30_fwd.hpp
│   │           │   │   │   │   │       ├── deque40.hpp
│   │           │   │   │   │   │       ├── deque40_fwd.hpp
│   │           │   │   │   │   │       ├── deque50.hpp
│   │           │   │   │   │   │       ├── deque50_fwd.hpp
│   │           │   │   │   │   │       ├── deque_fwd.hpp
│   │           │   │   │   │   │       ├── deque_initial_size.hpp
│   │           │   │   │   │   │       ├── deque_initial_size10.hpp
│   │           │   │   │   │   │       ├── deque_initial_size20.hpp
│   │           │   │   │   │   │       ├── deque_initial_size30.hpp
│   │           │   │   │   │   │       ├── deque_initial_size40.hpp
│   │           │   │   │   │   │       ├── deque_initial_size50.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values10.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values20.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values30.hpp
│   │           │   │   │   │   │       ├── deque_keyed_values40.hpp
│   │           │   │   │   │   │       └── deque_keyed_values50.hpp
│   │           │   │   │   │   ├── deque_keyed_values.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_sequence_impl.hpp
│   │           │   │   │   │   ├── keyed_element.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── front_extended_deque.hpp
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── generation/
│   │           │   │   │   ├── cons_tie.hpp
│   │           │   │   │   ├── deque_tie.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── pp_deque_tie.hpp
│   │           │   │   │   │   ├── pp_list_tie.hpp
│   │           │   │   │   │   ├── pp_make_deque.hpp
│   │           │   │   │   │   ├── pp_make_list.hpp
│   │           │   │   │   │   ├── pp_make_map.hpp
│   │           │   │   │   │   ├── pp_make_set.hpp
│   │           │   │   │   │   ├── pp_make_vector.hpp
│   │           │   │   │   │   ├── pp_map_tie.hpp
│   │           │   │   │   │   ├── pp_vector_tie.hpp
│   │           │   │   │   │   └── preprocessed/
│   │           │   │   │   │       ├── deque_tie.hpp
│   │           │   │   │   │       ├── deque_tie10.hpp
│   │           │   │   │   │       ├── deque_tie20.hpp
│   │           │   │   │   │       ├── deque_tie30.hpp
│   │           │   │   │   │       ├── deque_tie40.hpp
│   │           │   │   │   │       ├── deque_tie50.hpp
│   │           │   │   │   │       ├── list_tie.hpp
│   │           │   │   │   │       ├── list_tie10.hpp
│   │           │   │   │   │       ├── list_tie20.hpp
│   │           │   │   │   │       ├── list_tie30.hpp
│   │           │   │   │   │       ├── list_tie40.hpp
│   │           │   │   │   │       ├── list_tie50.hpp
│   │           │   │   │   │       ├── make_deque.hpp
│   │           │   │   │   │       ├── make_deque10.hpp
│   │           │   │   │   │       ├── make_deque20.hpp
│   │           │   │   │   │       ├── make_deque30.hpp
│   │           │   │   │   │       ├── make_deque40.hpp
│   │           │   │   │   │       ├── make_deque50.hpp
│   │           │   │   │   │       ├── make_list.hpp
│   │           │   │   │   │       ├── make_list10.hpp
│   │           │   │   │   │       ├── make_list20.hpp
│   │           │   │   │   │       ├── make_list30.hpp
│   │           │   │   │   │       ├── make_list40.hpp
│   │           │   │   │   │       ├── make_list50.hpp
│   │           │   │   │   │       ├── make_map.hpp
│   │           │   │   │   │       ├── make_map10.hpp
│   │           │   │   │   │       ├── make_map20.hpp
│   │           │   │   │   │       ├── make_map30.hpp
│   │           │   │   │   │       ├── make_map40.hpp
│   │           │   │   │   │       ├── make_map50.hpp
│   │           │   │   │   │       ├── make_set.hpp
│   │           │   │   │   │       ├── make_set10.hpp
│   │           │   │   │   │       ├── make_set20.hpp
│   │           │   │   │   │       ├── make_set30.hpp
│   │           │   │   │   │       ├── make_set40.hpp
│   │           │   │   │   │       ├── make_set50.hpp
│   │           │   │   │   │       ├── make_vector.hpp
│   │           │   │   │   │       ├── make_vector10.hpp
│   │           │   │   │   │       ├── make_vector20.hpp
│   │           │   │   │   │       ├── make_vector30.hpp
│   │           │   │   │   │       ├── make_vector40.hpp
│   │           │   │   │   │       ├── make_vector50.hpp
│   │           │   │   │   │       ├── map_tie.hpp
│   │           │   │   │   │       ├── map_tie10.hpp
│   │           │   │   │   │       ├── map_tie20.hpp
│   │           │   │   │   │       ├── map_tie30.hpp
│   │           │   │   │   │       ├── map_tie40.hpp
│   │           │   │   │   │       ├── map_tie50.hpp
│   │           │   │   │   │       ├── vector_tie.hpp
│   │           │   │   │   │       ├── vector_tie10.hpp
│   │           │   │   │   │       ├── vector_tie20.hpp
│   │           │   │   │   │       ├── vector_tie30.hpp
│   │           │   │   │   │       ├── vector_tie40.hpp
│   │           │   │   │   │       └── vector_tie50.hpp
│   │           │   │   │   ├── ignore.hpp
│   │           │   │   │   ├── list_tie.hpp
│   │           │   │   │   ├── make_cons.hpp
│   │           │   │   │   ├── make_deque.hpp
│   │           │   │   │   ├── make_list.hpp
│   │           │   │   │   ├── make_map.hpp
│   │           │   │   │   ├── make_set.hpp
│   │           │   │   │   ├── make_vector.hpp
│   │           │   │   │   ├── map_tie.hpp
│   │           │   │   │   ├── pair_tie.hpp
│   │           │   │   │   └── vector_tie.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── list/
│   │           │   │   │   ├── cons.hpp
│   │           │   │   │   ├── cons_fwd.hpp
│   │           │   │   │   ├── cons_iterator.hpp
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_cons.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── list.hpp
│   │           │   │   │   │   │   ├── list_forward_ctor.hpp
│   │           │   │   │   │   │   ├── list_fwd.hpp
│   │           │   │   │   │   │   ├── list_to_cons.hpp
│   │           │   │   │   │   │   ├── list_to_cons_call.hpp
│   │           │   │   │   │   │   └── preprocessed/
│   │           │   │   │   │   │       ├── list.hpp
│   │           │   │   │   │   │       ├── list10.hpp
│   │           │   │   │   │   │       ├── list10_fwd.hpp
│   │           │   │   │   │   │       ├── list20.hpp
│   │           │   │   │   │   │       ├── list20_fwd.hpp
│   │           │   │   │   │   │       ├── list30.hpp
│   │           │   │   │   │   │       ├── list30_fwd.hpp
│   │           │   │   │   │   │       ├── list40.hpp
│   │           │   │   │   │   │       ├── list40_fwd.hpp
│   │           │   │   │   │   │       ├── list50.hpp
│   │           │   │   │   │   │       ├── list50_fwd.hpp
│   │           │   │   │   │   │       ├── list_fwd.hpp
│   │           │   │   │   │   │       ├── list_to_cons.hpp
│   │           │   │   │   │   │       ├── list_to_cons10.hpp
│   │           │   │   │   │   │       ├── list_to_cons20.hpp
│   │           │   │   │   │   │       ├── list_to_cons30.hpp
│   │           │   │   │   │   │       ├── list_to_cons40.hpp
│   │           │   │   │   │   │       └── list_to_cons50.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── empty_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── list_to_cons.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── reverse_cons.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── list.hpp
│   │           │   │   │   ├── list_fwd.hpp
│   │           │   │   │   └── nil.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── map/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── at_key_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── build_map.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_map.hpp
│   │           │   │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   │   ├── convert.hpp
│   │           │   │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── map.hpp
│   │           │   │   │   │   │   ├── map_forward_ctor.hpp
│   │           │   │   │   │   │   ├── map_fwd.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_map.hpp
│   │           │   │   │   │   │   │   ├── as_map10.hpp
│   │           │   │   │   │   │   │   ├── as_map20.hpp
│   │           │   │   │   │   │   │   ├── as_map30.hpp
│   │           │   │   │   │   │   │   ├── as_map40.hpp
│   │           │   │   │   │   │   │   ├── as_map50.hpp
│   │           │   │   │   │   │   │   ├── map.hpp
│   │           │   │   │   │   │   │   ├── map10.hpp
│   │           │   │   │   │   │   │   ├── map10_fwd.hpp
│   │           │   │   │   │   │   │   ├── map20.hpp
│   │           │   │   │   │   │   │   ├── map20_fwd.hpp
│   │           │   │   │   │   │   │   ├── map30.hpp
│   │           │   │   │   │   │   │   ├── map30_fwd.hpp
│   │           │   │   │   │   │   │   ├── map40.hpp
│   │           │   │   │   │   │   │   ├── map40_fwd.hpp
│   │           │   │   │   │   │   │   ├── map50.hpp
│   │           │   │   │   │   │   │   ├── map50_fwd.hpp
│   │           │   │   │   │   │   │   └── map_fwd.hpp
│   │           │   │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── map_impl.hpp
│   │           │   │   │   │   ├── map_index.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_at_key_impl.hpp
│   │           │   │   │   ├── map.hpp
│   │           │   │   │   ├── map_fwd.hpp
│   │           │   │   │   └── map_iterator.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── set/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_set.hpp
│   │           │   │   │   │   │   │   ├── as_set10.hpp
│   │           │   │   │   │   │   │   ├── as_set20.hpp
│   │           │   │   │   │   │   │   ├── as_set30.hpp
│   │           │   │   │   │   │   │   ├── as_set40.hpp
│   │           │   │   │   │   │   │   ├── as_set50.hpp
│   │           │   │   │   │   │   │   ├── set.hpp
│   │           │   │   │   │   │   │   ├── set10.hpp
│   │           │   │   │   │   │   │   ├── set10_fwd.hpp
│   │           │   │   │   │   │   │   ├── set20.hpp
│   │           │   │   │   │   │   │   ├── set20_fwd.hpp
│   │           │   │   │   │   │   │   ├── set30.hpp
│   │           │   │   │   │   │   │   ├── set30_fwd.hpp
│   │           │   │   │   │   │   │   ├── set40.hpp
│   │           │   │   │   │   │   │   ├── set40_fwd.hpp
│   │           │   │   │   │   │   │   ├── set50.hpp
│   │           │   │   │   │   │   │   ├── set50_fwd.hpp
│   │           │   │   │   │   │   │   └── set_fwd.hpp
│   │           │   │   │   │   │   ├── set.hpp
│   │           │   │   │   │   │   ├── set_forward_ctor.hpp
│   │           │   │   │   │   │   └── set_fwd.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── set.hpp
│   │           │   │   │   └── set_fwd.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── vector/
│   │           │   │   │   ├── convert.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── config.hpp
│   │           │   │   │   │   ├── convert_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   │   ├── limits.hpp
│   │           │   │   │   │   │   ├── preprocessed/
│   │           │   │   │   │   │   │   ├── as_vector.hpp
│   │           │   │   │   │   │   │   ├── as_vector10.hpp
│   │           │   │   │   │   │   │   ├── as_vector20.hpp
│   │           │   │   │   │   │   │   ├── as_vector30.hpp
│   │           │   │   │   │   │   │   ├── as_vector40.hpp
│   │           │   │   │   │   │   │   ├── as_vector50.hpp
│   │           │   │   │   │   │   │   ├── vector.hpp
│   │           │   │   │   │   │   │   ├── vector10.hpp
│   │           │   │   │   │   │   │   ├── vector10_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector20.hpp
│   │           │   │   │   │   │   │   ├── vector20_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector30.hpp
│   │           │   │   │   │   │   │   ├── vector30_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector40.hpp
│   │           │   │   │   │   │   │   ├── vector40_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector50.hpp
│   │           │   │   │   │   │   │   ├── vector50_fwd.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser10.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser20.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser30.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser40.hpp
│   │           │   │   │   │   │   │   ├── vector_chooser50.hpp
│   │           │   │   │   │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector10.hpp
│   │           │   │   │   │   │   │   ├── vvector10_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector20.hpp
│   │           │   │   │   │   │   │   ├── vvector20_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector30.hpp
│   │           │   │   │   │   │   │   ├── vvector30_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector40.hpp
│   │           │   │   │   │   │   │   ├── vvector40_fwd.hpp
│   │           │   │   │   │   │   │   ├── vvector50.hpp
│   │           │   │   │   │   │   │   └── vvector50_fwd.hpp
│   │           │   │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   │   ├── vector.hpp
│   │           │   │   │   │   │   ├── vector10.hpp
│   │           │   │   │   │   │   ├── vector10_fwd.hpp
│   │           │   │   │   │   │   ├── vector20.hpp
│   │           │   │   │   │   │   ├── vector20_fwd.hpp
│   │           │   │   │   │   │   ├── vector30.hpp
│   │           │   │   │   │   │   ├── vector30_fwd.hpp
│   │           │   │   │   │   │   ├── vector40.hpp
│   │           │   │   │   │   │   ├── vector40_fwd.hpp
│   │           │   │   │   │   │   ├── vector50.hpp
│   │           │   │   │   │   │   ├── vector50_fwd.hpp
│   │           │   │   │   │   │   ├── vector_forward_ctor.hpp
│   │           │   │   │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   │   │   ├── vector_n.hpp
│   │           │   │   │   │   │   └── vector_n_chooser.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── vector.hpp
│   │           │   │   │   ├── vector10.hpp
│   │           │   │   │   ├── vector20.hpp
│   │           │   │   │   ├── vector30.hpp
│   │           │   │   │   ├── vector40.hpp
│   │           │   │   │   ├── vector50.hpp
│   │           │   │   │   ├── vector_fwd.hpp
│   │           │   │   │   └── vector_iterator.hpp
│   │           │   │   └── vector.hpp
│   │           │   ├── container.hpp
│   │           │   ├── functional/
│   │           │   │   ├── adapter/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── access.hpp
│   │           │   │   │   ├── fused.hpp
│   │           │   │   │   ├── fused_function_object.hpp
│   │           │   │   │   ├── fused_procedure.hpp
│   │           │   │   │   ├── limits.hpp
│   │           │   │   │   ├── unfused.hpp
│   │           │   │   │   └── unfused_typed.hpp
│   │           │   │   ├── adapter.hpp
│   │           │   │   ├── generation/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── gen_make_adapter.hpp
│   │           │   │   │   ├── make_fused.hpp
│   │           │   │   │   ├── make_fused_function_object.hpp
│   │           │   │   │   ├── make_fused_procedure.hpp
│   │           │   │   │   └── make_unfused.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── invocation/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   └── that_ptr.hpp
│   │           │   │   │   ├── invoke.hpp
│   │           │   │   │   ├── invoke_function_object.hpp
│   │           │   │   │   ├── invoke_procedure.hpp
│   │           │   │   │   └── limits.hpp
│   │           │   │   └── invocation.hpp
│   │           │   ├── functional.hpp
│   │           │   ├── include/
│   │           │   │   ├── accumulate.hpp
│   │           │   │   ├── adapt_adt.hpp
│   │           │   │   ├── adapt_adt_named.hpp
│   │           │   │   ├── adapt_assoc_adt.hpp
│   │           │   │   ├── adapt_assoc_adt_named.hpp
│   │           │   │   ├── adapt_assoc_struct.hpp
│   │           │   │   ├── adapt_assoc_struct_named.hpp
│   │           │   │   ├── adapt_struct.hpp
│   │           │   │   ├── adapt_struct_named.hpp
│   │           │   │   ├── adapted.hpp
│   │           │   │   ├── adapter.hpp
│   │           │   │   ├── advance.hpp
│   │           │   │   ├── algorithm.hpp
│   │           │   │   ├── all.hpp
│   │           │   │   ├── any.hpp
│   │           │   │   ├── array.hpp
│   │           │   │   ├── as_deque.hpp
│   │           │   │   ├── as_list.hpp
│   │           │   │   ├── as_map.hpp
│   │           │   │   ├── as_set.hpp
│   │           │   │   ├── as_vector.hpp
│   │           │   │   ├── at.hpp
│   │           │   │   ├── at_c.hpp
│   │           │   │   ├── at_key.hpp
│   │           │   │   ├── auxiliary.hpp
│   │           │   │   ├── back.hpp
│   │           │   │   ├── begin.hpp
│   │           │   │   ├── boost_array.hpp
│   │           │   │   ├── boost_tuple.hpp
│   │           │   │   ├── category_of.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── comparison.hpp
│   │           │   │   ├── cons.hpp
│   │           │   │   ├── cons_tie.hpp
│   │           │   │   ├── container.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── copy.hpp
│   │           │   │   ├── count.hpp
│   │           │   │   ├── count_if.hpp
│   │           │   │   ├── deduce.hpp
│   │           │   │   ├── deduce_sequence.hpp
│   │           │   │   ├── define_assoc_struct.hpp
│   │           │   │   ├── define_struct.hpp
│   │           │   │   ├── define_struct_inline.hpp
│   │           │   │   ├── deque.hpp
│   │           │   │   ├── deque_fwd.hpp
│   │           │   │   ├── deque_tie.hpp
│   │           │   │   ├── deref.hpp
│   │           │   │   ├── deref_data.hpp
│   │           │   │   ├── distance.hpp
│   │           │   │   ├── empty.hpp
│   │           │   │   ├── end.hpp
│   │           │   │   ├── equal_to.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── erase_key.hpp
│   │           │   │   ├── filter.hpp
│   │           │   │   ├── filter_if.hpp
│   │           │   │   ├── filter_view.hpp
│   │           │   │   ├── find.hpp
│   │           │   │   ├── find_if.hpp
│   │           │   │   ├── flatten.hpp
│   │           │   │   ├── flatten_view.hpp
│   │           │   │   ├── fold.hpp
│   │           │   │   ├── for_each.hpp
│   │           │   │   ├── front.hpp
│   │           │   │   ├── functional.hpp
│   │           │   │   ├── fused.hpp
│   │           │   │   ├── fused_function_object.hpp
│   │           │   │   ├── fused_procedure.hpp
│   │           │   │   ├── generation.hpp
│   │           │   │   ├── greater.hpp
│   │           │   │   ├── greater_equal.hpp
│   │           │   │   ├── has_key.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── ignore.hpp
│   │           │   │   ├── in.hpp
│   │           │   │   ├── insert.hpp
│   │           │   │   ├── insert_range.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── invocation.hpp
│   │           │   │   ├── invoke.hpp
│   │           │   │   ├── invoke_function_object.hpp
│   │           │   │   ├── invoke_procedure.hpp
│   │           │   │   ├── io.hpp
│   │           │   │   ├── is_iterator.hpp
│   │           │   │   ├── is_segmented.hpp
│   │           │   │   ├── is_sequence.hpp
│   │           │   │   ├── is_view.hpp
│   │           │   │   ├── iter_fold.hpp
│   │           │   │   ├── iteration.hpp
│   │           │   │   ├── iterator.hpp
│   │           │   │   ├── iterator_adapter.hpp
│   │           │   │   ├── iterator_base.hpp
│   │           │   │   ├── iterator_facade.hpp
│   │           │   │   ├── iterator_range.hpp
│   │           │   │   ├── join.hpp
│   │           │   │   ├── joint_view.hpp
│   │           │   │   ├── key_of.hpp
│   │           │   │   ├── less.hpp
│   │           │   │   ├── less_equal.hpp
│   │           │   │   ├── list.hpp
│   │           │   │   ├── list_fwd.hpp
│   │           │   │   ├── list_tie.hpp
│   │           │   │   ├── make_cons.hpp
│   │           │   │   ├── make_deque.hpp
│   │           │   │   ├── make_fused.hpp
│   │           │   │   ├── make_fused_function_object.hpp
│   │           │   │   ├── make_fused_procedure.hpp
│   │           │   │   ├── make_list.hpp
│   │           │   │   ├── make_map.hpp
│   │           │   │   ├── make_set.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── make_unfused.hpp
│   │           │   │   ├── make_vector.hpp
│   │           │   │   ├── map.hpp
│   │           │   │   ├── map_fwd.hpp
│   │           │   │   ├── map_tie.hpp
│   │           │   │   ├── move.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── next.hpp
│   │           │   │   ├── nil.hpp
│   │           │   │   ├── none.hpp
│   │           │   │   ├── not_equal_to.hpp
│   │           │   │   ├── nview.hpp
│   │           │   │   ├── out.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── pair_tie.hpp
│   │           │   │   ├── pop_back.hpp
│   │           │   │   ├── pop_front.hpp
│   │           │   │   ├── prior.hpp
│   │           │   │   ├── proxy_type.hpp
│   │           │   │   ├── push_back.hpp
│   │           │   │   ├── push_front.hpp
│   │           │   │   ├── query.hpp
│   │           │   │   ├── remove.hpp
│   │           │   │   ├── remove_if.hpp
│   │           │   │   ├── repetitive_view.hpp
│   │           │   │   ├── replace.hpp
│   │           │   │   ├── replace_if.hpp
│   │           │   │   ├── reverse.hpp
│   │           │   │   ├── reverse_fold.hpp
│   │           │   │   ├── reverse_iter_fold.hpp
│   │           │   │   ├── reverse_view.hpp
│   │           │   │   ├── segmented_fold_until.hpp
│   │           │   │   ├── segmented_iterator.hpp
│   │           │   │   ├── segments.hpp
│   │           │   │   ├── sequence.hpp
│   │           │   │   ├── sequence_base.hpp
│   │           │   │   ├── sequence_facade.hpp
│   │           │   │   ├── set.hpp
│   │           │   │   ├── set_fwd.hpp
│   │           │   │   ├── single_view.hpp
│   │           │   │   ├── size.hpp
│   │           │   │   ├── std_array.hpp
│   │           │   │   ├── std_pair.hpp
│   │           │   │   ├── std_tuple.hpp
│   │           │   │   ├── struct.hpp
│   │           │   │   ├── support.hpp
│   │           │   │   ├── swap.hpp
│   │           │   │   ├── tag_of.hpp
│   │           │   │   ├── tag_of_fwd.hpp
│   │           │   │   ├── transform.hpp
│   │           │   │   ├── transform_view.hpp
│   │           │   │   ├── transformation.hpp
│   │           │   │   ├── tuple.hpp
│   │           │   │   ├── tuple_fwd.hpp
│   │           │   │   ├── tuple_tie.hpp
│   │           │   │   ├── unfused.hpp
│   │           │   │   ├── unfused_typed.hpp
│   │           │   │   ├── unused.hpp
│   │           │   │   ├── value_at.hpp
│   │           │   │   ├── value_at_key.hpp
│   │           │   │   ├── value_of.hpp
│   │           │   │   ├── value_of_data.hpp
│   │           │   │   ├── vector.hpp
│   │           │   │   ├── vector10.hpp
│   │           │   │   ├── vector20.hpp
│   │           │   │   ├── vector30.hpp
│   │           │   │   ├── vector40.hpp
│   │           │   │   ├── vector50.hpp
│   │           │   │   ├── vector_fwd.hpp
│   │           │   │   ├── vector_tie.hpp
│   │           │   │   ├── view.hpp
│   │           │   │   ├── void.hpp
│   │           │   │   ├── zip.hpp
│   │           │   │   └── zip_view.hpp
│   │           │   ├── iterator/
│   │           │   │   ├── advance.hpp
│   │           │   │   ├── basic_iterator.hpp
│   │           │   │   ├── deref.hpp
│   │           │   │   ├── deref_data.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── adapt_deref_traits.hpp
│   │           │   │   │   ├── adapt_value_traits.hpp
│   │           │   │   │   ├── advance.hpp
│   │           │   │   │   ├── distance.hpp
│   │           │   │   │   ├── segment_sequence.hpp
│   │           │   │   │   ├── segmented_equal_to.hpp
│   │           │   │   │   ├── segmented_iterator.hpp
│   │           │   │   │   └── segmented_next_impl.hpp
│   │           │   │   ├── distance.hpp
│   │           │   │   ├── equal_to.hpp
│   │           │   │   ├── iterator_adapter.hpp
│   │           │   │   ├── iterator_facade.hpp
│   │           │   │   ├── key_of.hpp
│   │           │   │   ├── mpl/
│   │           │   │   │   ├── convert_iterator.hpp
│   │           │   │   │   └── fusion_iterator.hpp
│   │           │   │   ├── mpl.hpp
│   │           │   │   ├── next.hpp
│   │           │   │   ├── prior.hpp
│   │           │   │   ├── segmented_iterator.hpp
│   │           │   │   ├── value_of.hpp
│   │           │   │   └── value_of_data.hpp
│   │           │   ├── iterator.hpp
│   │           │   ├── mpl/
│   │           │   │   ├── at.hpp
│   │           │   │   ├── back.hpp
│   │           │   │   ├── begin.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   └── clear.hpp
│   │           │   │   ├── empty.hpp
│   │           │   │   ├── end.hpp
│   │           │   │   ├── erase.hpp
│   │           │   │   ├── erase_key.hpp
│   │           │   │   ├── front.hpp
│   │           │   │   ├── has_key.hpp
│   │           │   │   ├── insert.hpp
│   │           │   │   ├── insert_range.hpp
│   │           │   │   ├── pop_back.hpp
│   │           │   │   ├── pop_front.hpp
│   │           │   │   ├── push_back.hpp
│   │           │   │   ├── push_front.hpp
│   │           │   │   └── size.hpp
│   │           │   ├── mpl.hpp
│   │           │   ├── sequence/
│   │           │   │   ├── comparison/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── equal_to.hpp
│   │           │   │   │   │   ├── greater.hpp
│   │           │   │   │   │   ├── greater_equal.hpp
│   │           │   │   │   │   ├── less.hpp
│   │           │   │   │   │   ├── less_equal.hpp
│   │           │   │   │   │   └── not_equal_to.hpp
│   │           │   │   │   ├── enable_comparison.hpp
│   │           │   │   │   ├── equal_to.hpp
│   │           │   │   │   ├── greater.hpp
│   │           │   │   │   ├── greater_equal.hpp
│   │           │   │   │   ├── less.hpp
│   │           │   │   │   ├── less_equal.hpp
│   │           │   │   │   └── not_equal_to.hpp
│   │           │   │   ├── comparison.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── hash.hpp
│   │           │   │   ├── intrinsic/
│   │           │   │   │   ├── at.hpp
│   │           │   │   │   ├── at_c.hpp
│   │           │   │   │   ├── at_key.hpp
│   │           │   │   │   ├── back.hpp
│   │           │   │   │   ├── begin.hpp
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── segmented_begin.hpp
│   │           │   │   │   │   ├── segmented_begin_impl.hpp
│   │           │   │   │   │   ├── segmented_end.hpp
│   │           │   │   │   │   ├── segmented_end_impl.hpp
│   │           │   │   │   │   └── segmented_size.hpp
│   │           │   │   │   ├── empty.hpp
│   │           │   │   │   ├── end.hpp
│   │           │   │   │   ├── front.hpp
│   │           │   │   │   ├── has_key.hpp
│   │           │   │   │   ├── segments.hpp
│   │           │   │   │   ├── size.hpp
│   │           │   │   │   ├── swap.hpp
│   │           │   │   │   ├── value_at.hpp
│   │           │   │   │   └── value_at_key.hpp
│   │           │   │   ├── intrinsic.hpp
│   │           │   │   ├── intrinsic_fwd.hpp
│   │           │   │   ├── io/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── in.hpp
│   │           │   │   │   │   ├── manip.hpp
│   │           │   │   │   │   └── out.hpp
│   │           │   │   │   ├── in.hpp
│   │           │   │   │   └── out.hpp
│   │           │   │   ├── io.hpp
│   │           │   │   └── sequence_facade.hpp
│   │           │   ├── sequence.hpp
│   │           │   ├── support/
│   │           │   │   ├── as_const.hpp
│   │           │   │   ├── category_of.hpp
│   │           │   │   ├── config.hpp
│   │           │   │   ├── deduce.hpp
│   │           │   │   ├── deduce_sequence.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── access.hpp
│   │           │   │   │   ├── and.hpp
│   │           │   │   │   ├── as_fusion_element.hpp
│   │           │   │   │   ├── enabler.hpp
│   │           │   │   │   ├── index_sequence.hpp
│   │           │   │   │   ├── is_mpl_sequence.hpp
│   │           │   │   │   ├── is_native_fusion_sequence.hpp
│   │           │   │   │   ├── is_same_size.hpp
│   │           │   │   │   ├── mpl_iterator_category.hpp
│   │           │   │   │   ├── pp_round.hpp
│   │           │   │   │   └── segmented_fold_until_impl.hpp
│   │           │   │   ├── is_iterator.hpp
│   │           │   │   ├── is_segmented.hpp
│   │           │   │   ├── is_sequence.hpp
│   │           │   │   ├── is_view.hpp
│   │           │   │   ├── iterator_base.hpp
│   │           │   │   ├── pair.hpp
│   │           │   │   ├── segmented_fold_until.hpp
│   │           │   │   ├── sequence_base.hpp
│   │           │   │   ├── tag_of.hpp
│   │           │   │   ├── tag_of_fwd.hpp
│   │           │   │   ├── unused.hpp
│   │           │   │   └── void.hpp
│   │           │   ├── support.hpp
│   │           │   ├── tuple/
│   │           │   │   ├── detail/
│   │           │   │   │   ├── make_tuple.hpp
│   │           │   │   │   ├── preprocessed/
│   │           │   │   │   │   ├── make_tuple.hpp
│   │           │   │   │   │   ├── make_tuple10.hpp
│   │           │   │   │   │   ├── make_tuple20.hpp
│   │           │   │   │   │   ├── make_tuple30.hpp
│   │           │   │   │   │   ├── make_tuple40.hpp
│   │           │   │   │   │   ├── make_tuple50.hpp
│   │           │   │   │   │   ├── tuple.hpp
│   │           │   │   │   │   ├── tuple10.hpp
│   │           │   │   │   │   ├── tuple10_fwd.hpp
│   │           │   │   │   │   ├── tuple20.hpp
│   │           │   │   │   │   ├── tuple20_fwd.hpp
│   │           │   │   │   │   ├── tuple30.hpp
│   │           │   │   │   │   ├── tuple30_fwd.hpp
│   │           │   │   │   │   ├── tuple40.hpp
│   │           │   │   │   │   ├── tuple40_fwd.hpp
│   │           │   │   │   │   ├── tuple50.hpp
│   │           │   │   │   │   ├── tuple50_fwd.hpp
│   │           │   │   │   │   ├── tuple_fwd.hpp
│   │           │   │   │   │   ├── tuple_tie.hpp
│   │           │   │   │   │   ├── tuple_tie10.hpp
│   │           │   │   │   │   ├── tuple_tie20.hpp
│   │           │   │   │   │   ├── tuple_tie30.hpp
│   │           │   │   │   │   ├── tuple_tie40.hpp
│   │           │   │   │   │   └── tuple_tie50.hpp
│   │           │   │   │   ├── tuple.hpp
│   │           │   │   │   ├── tuple_expand.hpp
│   │           │   │   │   ├── tuple_fwd.hpp
│   │           │   │   │   └── tuple_tie.hpp
│   │           │   │   ├── make_tuple.hpp
│   │           │   │   ├── tuple.hpp
│   │           │   │   ├── tuple_fwd.hpp
│   │           │   │   └── tuple_tie.hpp
│   │           │   ├── tuple.hpp
│   │           │   ├── view/
│   │           │   │   ├── detail/
│   │           │   │   │   └── strictest_traversal.hpp
│   │           │   │   ├── filter_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── filter_view.hpp
│   │           │   │   │   └── filter_view_iterator.hpp
│   │           │   │   ├── filter_view.hpp
│   │           │   │   ├── flatten_view/
│   │           │   │   │   ├── flatten_view.hpp
│   │           │   │   │   └── flatten_view_iterator.hpp
│   │           │   │   ├── flatten_view.hpp
│   │           │   │   ├── iterator_range/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── is_segmented_impl.hpp
│   │           │   │   │   │   ├── segmented_iterator_range.hpp
│   │           │   │   │   │   ├── segments_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   └── value_at_impl.hpp
│   │           │   │   │   └── iterator_range.hpp
│   │           │   │   ├── iterator_range.hpp
│   │           │   │   ├── joint_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── joint_view.hpp
│   │           │   │   │   ├── joint_view_fwd.hpp
│   │           │   │   │   └── joint_view_iterator.hpp
│   │           │   │   ├── joint_view.hpp
│   │           │   │   ├── nview/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── cpp03/
│   │           │   │   │   │   │   └── nview_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── nview_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── nview.hpp
│   │           │   │   │   └── nview_iterator.hpp
│   │           │   │   ├── nview.hpp
│   │           │   │   ├── repetitive_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── repetitive_view.hpp
│   │           │   │   │   ├── repetitive_view_fwd.hpp
│   │           │   │   │   └── repetitive_view_iterator.hpp
│   │           │   │   ├── repetitive_view.hpp
│   │           │   │   ├── reverse_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_data_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── key_of_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   ├── value_of_data_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── reverse_view.hpp
│   │           │   │   │   └── reverse_view_iterator.hpp
│   │           │   │   ├── reverse_view.hpp
│   │           │   │   ├── single_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── single_view.hpp
│   │           │   │   │   └── single_view_iterator.hpp
│   │           │   │   ├── single_view.hpp
│   │           │   │   ├── transform_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── transform_view.hpp
│   │           │   │   │   ├── transform_view_fwd.hpp
│   │           │   │   │   └── transform_view_iterator.hpp
│   │           │   │   ├── transform_view.hpp
│   │           │   │   ├── zip_view/
│   │           │   │   │   ├── detail/
│   │           │   │   │   │   ├── advance_impl.hpp
│   │           │   │   │   │   ├── at_impl.hpp
│   │           │   │   │   │   ├── begin_impl.hpp
│   │           │   │   │   │   ├── deref_impl.hpp
│   │           │   │   │   │   ├── distance_impl.hpp
│   │           │   │   │   │   ├── end_impl.hpp
│   │           │   │   │   │   ├── equal_to_impl.hpp
│   │           │   │   │   │   ├── next_impl.hpp
│   │           │   │   │   │   ├── prior_impl.hpp
│   │           │   │   │   │   ├── size_impl.hpp
│   │           │   │   │   │   ├── value_at_impl.hpp
│   │           │   │   │   │   └── value_of_impl.hpp
│   │           │   │   │   ├── zip_view.hpp
│   │           │   │   │   ├── zip_view_iterator.hpp
│   │           │   │   │   └── zip_view_iterator_fwd.hpp
│   │           │   │   └── zip_view.hpp
│   │           │   └── view.hpp
│   │           ├── generator_iterator.hpp
│   │           ├── geometry/
│   │           │   ├── algorithms/
│   │           │   │   ├── append.hpp
│   │           │   │   ├── area.hpp
│   │           │   │   ├── assign.hpp
│   │           │   │   ├── buffer.hpp
│   │           │   │   ├── centroid.hpp
│   │           │   │   ├── clear.hpp
│   │           │   │   ├── comparable_distance.hpp
│   │           │   │   ├── convert.hpp
│   │           │   │   ├── convex_hull.hpp
│   │           │   │   ├── correct.hpp
│   │           │   │   ├── correct_closure.hpp
│   │           │   │   ├── covered_by.hpp
│   │           │   │   ├── crosses.hpp
│   │           │   │   ├── densify.hpp
│   │           │   │   ├── detail/
│   │           │   │   │   ├── as_range.hpp
│   │           │   │   │   ├── assign_box_corners.hpp
│   │           │   │   │   ├── assign_indexed_point.hpp
│   │           │   │   │   ├── assign_values.hpp
│   │           │   │   │   ├── azimuth.hpp
│   │           │   │   │   ├── buffer/
│   │           │   │   │   │   ├── buffer_box.hpp
│   │           │   │   │   │   ├── buffer_inserter.hpp
│   │           │   │   │   │   ├── buffer_policies.hpp
│   │           │   │   │   │   ├── buffered_piece_collection.hpp
│   │           │   │   │   │   ├── buffered_ring.hpp
│   │           │   │   │   │   ├── get_piece_turns.hpp
│   │           │   │   │   │   ├── line_line_intersection.hpp
│   │           │   │   │   │   ├── piece_border.hpp
│   │           │   │   │   │   ├── turn_in_original_visitor.hpp
│   │           │   │   │   │   └── turn_in_piece_visitor.hpp
│   │           │   │   │   ├── calculate_null.hpp
│   │           │   │   │   ├── calculate_point_order.hpp
│   │           │   │   │   ├── calculate_sum.hpp
│   │           │   │   │   ├── centroid/
│   │           │   │   │   │   └── translating_transformer.hpp
│   │           │   │   │   ├── check_iterator_range.hpp
│   │           │   │   │   ├── closest_feature/
│   │           │   │   │   │   ├── geometry_to_range.hpp
│   │           │   │   │   │   ├── point_to_range.hpp
│   │           │   │   │   │   └── range_to_range.hpp
│   │           │   │   │   ├── comparable_distance/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── convert_indexed_to_indexed.hpp
│   │           │   │   │   ├── convert_point_to_point.hpp
│   │           │   │   │   ├── counting.hpp
│   │           │   │   │   ├── course.hpp
│   │           │   │   │   ├── covered_by/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── direction_code.hpp
│   │           │   │   │   ├── disjoint/
│   │           │   │   │   │   ├── areal_areal.hpp
│   │           │   │   │   │   ├── box_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── linear_areal.hpp
│   │           │   │   │   │   ├── linear_linear.hpp
│   │           │   │   │   │   ├── linear_segment_or_box.hpp
│   │           │   │   │   │   ├── multipoint_geometry.hpp
│   │           │   │   │   │   ├── multirange_geometry.hpp
│   │           │   │   │   │   ├── point_box.hpp
│   │           │   │   │   │   ├── point_geometry.hpp
│   │           │   │   │   │   ├── point_point.hpp
│   │           │   │   │   │   └── segment_box.hpp
│   │           │   │   │   ├── distance/
│   │           │   │   │   │   ├── backward_compatibility.hpp
│   │           │   │   │   │   ├── box_to_box.hpp
│   │           │   │   │   │   ├── default_strategies.hpp
│   │           │   │   │   │   ├── geometry_to_segment_or_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── is_comparable.hpp
│   │           │   │   │   │   ├── iterator_selector.hpp
│   │           │   │   │   │   ├── linear_or_areal_to_areal.hpp
│   │           │   │   │   │   ├── linear_to_box.hpp
│   │           │   │   │   │   ├── linear_to_linear.hpp
│   │           │   │   │   │   ├── multipoint_to_geometry.hpp
│   │           │   │   │   │   ├── point_to_geometry.hpp
│   │           │   │   │   │   ├── range_to_geometry_rtree.hpp
│   │           │   │   │   │   ├── segment_to_box.hpp
│   │           │   │   │   │   └── segment_to_segment.hpp
│   │           │   │   │   ├── envelope/
│   │           │   │   │   │   ├── areal.hpp
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── initialize.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── intersects_antimeridian.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   ├── multipoint.hpp
│   │           │   │   │   │   ├── point.hpp
│   │           │   │   │   │   ├── range.hpp
│   │           │   │   │   │   ├── range_of_boxes.hpp
│   │           │   │   │   │   ├── segment.hpp
│   │           │   │   │   │   └── transform_units.hpp
│   │           │   │   │   ├── equals/
│   │           │   │   │   │   ├── collect_vectors.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   └── point_point.hpp
│   │           │   │   │   ├── expand/
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── indexed.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── point.hpp
│   │           │   │   │   │   └── segment.hpp
│   │           │   │   │   ├── expand_by_epsilon.hpp
│   │           │   │   │   ├── extreme_points.hpp
│   │           │   │   │   ├── for_each_range.hpp
│   │           │   │   │   ├── get_max_size.hpp
│   │           │   │   │   ├── has_self_intersections.hpp
│   │           │   │   │   ├── interior_iterator.hpp
│   │           │   │   │   ├── intersection/
│   │           │   │   │   │   ├── areal_areal.hpp
│   │           │   │   │   │   ├── box_box.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   └── multi.hpp
│   │           │   │   │   ├── intersects/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── is_simple/
│   │           │   │   │   │   ├── always_simple.hpp
│   │           │   │   │   │   ├── areal.hpp
│   │           │   │   │   │   ├── debug_print_boundary_points.hpp
│   │           │   │   │   │   ├── failure_policy.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   └── multipoint.hpp
│   │           │   │   │   ├── is_valid/
│   │           │   │   │   │   ├── box.hpp
│   │           │   │   │   │   ├── complement_graph.hpp
│   │           │   │   │   │   ├── debug_complement_graph.hpp
│   │           │   │   │   │   ├── debug_print_turns.hpp
│   │           │   │   │   │   ├── debug_validity_phase.hpp
│   │           │   │   │   │   ├── has_duplicates.hpp
│   │           │   │   │   │   ├── has_invalid_coordinate.hpp
│   │           │   │   │   │   ├── has_spikes.hpp
│   │           │   │   │   │   ├── has_valid_self_turns.hpp
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   ├── interface.hpp
│   │           │   │   │   │   ├── is_acceptable_turn.hpp
│   │           │   │   │   │   ├── linear.hpp
│   │           │   │   │   │   ├── multipolygon.hpp
│   │           │   │   │   │   ├── pointlike.hpp
│   │           │   │   │   │   ├── polygon.hpp
│   │           │   │   │   │   ├── ring.hpp
│   │           │   │   │   │   └── segment.hpp
│   │           │   │   │   ├── make/
│   │           │   │   │   │   └── make.hpp
│   │           │   │   │   ├── max_interval_gap.hpp
│   │           │   │   │   ├── multi_modify.hpp
│   │           │   │   │   ├── multi_modify_with_predicate.hpp
│   │           │   │   │   ├── multi_sum.hpp
│   │           │   │   │   ├── normalize.hpp
│   │           │   │   │   ├── not.hpp
│   │           │   │   │   ├── num_distinct_consecutive_points.hpp
│   │           │   │   │   ├── overlaps/
│   │           │   │   │   │   ├── implementation.hpp
│   │           │   │   │   │   └── interface.hpp
│   │           │   │   │   ├── overlay/
│   │           │   │   │   │   ├── add_rings.hpp
│   │           │   │   │   │   ├── append_no_duplicates.hpp
│   │           │   │   │   │   ├── append_no_dups_or_spikes.hpp
│   │           │   │   │   │   ├── assign_parents.hpp
│   │           │   │   │   │   ├── backtrack_check_si.hpp
│   │           │   │   │   │   ├── check_enrich.hpp
│   │           │   │   │   │   ├── clip_linestring.hpp
│   │           │   │   │   │   ├── cluster_exits.hpp
│   │           │   │   │   │   ├── cluster_info.hpp
│   │           │   │   │   │   ├── convert_ring.hpp
│   │           │   │   │   │   ├── copy_segment_point.hpp
│   │           │   │   │   │   ├── copy_segments.hpp
│   │           │   │   │   │   ├── debug_turn_info.hpp
│   │           │   │   │   │   ├── do_reverse.hpp
│   │           │   │   │   │   ├── enrich_intersection_points.hpp
│   │           │   │   │   │   ├── enrichment_info.hpp
│   │           │   │   │   │   ├── follow.hpp
│   │           │   │   │   │   ├── follow_linear_linear.hpp
│   │           │   │   │   │   ├── get_distance_measure.hpp
│   │           │   │   │   │   ├── get_intersection_points.hpp
│   │           │   │   │   │   ├── get_relative_order.hpp
│   │           │   │   │   │   ├── get_ring.hpp
│   │           │   │   │   │   ├── get_turn_info.hpp
│   │           │   │   │   │   ├── get_turn_info_for_endpoint.hpp
│   │           │   │   │   │   ├── get_turn_info_helpers.hpp
│   │           │   │   │   │   ├── get_turn_info_la.hpp
│   │           │   │   │   │   ├── get_turn_info_ll.hpp
│   │           │   │   │   │   ├── get_turns.hpp
│   │           │   │   │   │   ├── handle_colocations.hpp
│   │           │   │   │   │   ├── handle_self_turns.hpp
│   │           │   │   │   │   ├── inconsistent_turns_exception.hpp
│   │           │   │   │   │   ├── intersection_box_box.hpp
│   │           │   │   │   │   ├── intersection_insert.hpp
│   │           │   │   │   │   ├── is_self_turn.hpp
│   │   
Copy disabled (too large) Download .txt
Showing preview only (140,423K chars total). Download the full file to get everything.
SYMBOL INDEX (154725 symbols across 8447 files)

FILE: demo/AppComponent.hpp
  class AppComponent (line 56) | class AppComponent {
    class RedirectInterceptor (line 59) | class RedirectInterceptor : public oatpp::web::server::interceptor::Re...
      method intercept (line 64) | std::shared_ptr<OutgoingResponse> intercept(const std::shared_ptr<In...
    method AppComponent (line 80) | AppComponent(const oatpp::base::CommandLineArguments& cmdArgs)
    method if (line 93) | if (!config->host) {
    method if (line 98) | if(!portText) {
    method if (line 104) | if(!success || port > 65535) {
    method if (line 110) | if(!config->tlsPrivateKeyPath) {
    method if (line 115) | if(!config->tlsCertificateChainPath) {
    method if (line 120) | if(!config->statisticsUrl) {

FILE: demo/Config.cpp
  function string (line 34) | string Config::TrimStringForJson(string res)

FILE: demo/Config.hpp
  type mediasoup_ (line 12) | struct mediasoup_
  class Config (line 20) | class Config

FILE: demo/PeerOld.hpp
  type _device (line 17) | struct _device
  type PeerInfo (line 24) | struct PeerInfo
  class PeerData (line 33) | class PeerData
  class Peer (line 53) | class Peer {

FILE: demo/RoomOld.cpp
  function to_json (line 7) | void to_json(json& j, const _device& st){
  function from_json (line 14) | void from_json(const json& j, _device& st){
  function to_json (line 21) | void to_json(json& j, const pairInfo& st){
  function from_json (line 27) | void from_json(const json& j, pairInfo& st){
  function to_json (line 34) | void to_json(json& j, const PeerInfo& st){
  function from_json (line 43) | void from_json(const json& j, PeerInfo& st){

FILE: demo/RoomOld.hpp
  class Base64 (line 17) | class Base64{
    method Base64 (line 21) | Base64()
  type pairInfo (line 42) | struct pairInfo
  class Room (line 52) | class Room : public  EnhancedEventEmitter
    method setConfig (line 116) | void setConfig(Config &config1) {
    method Room (line 122) | Room(std::string &roomId, std::shared_ptr<protoo::Room> protooRoom, st...
    method create (line 190) | static std::shared_ptr<Room>  create(std::shared_ptr<mediasoup::IWorke...
    method close (line 230) | void close()
    method logStatus (line 256) | void logStatus()
    method handleProtooConnection (line 276) | void handleProtooConnection(std::string &peerId, std::shared_ptr<Consu...
    method RtpCapabilities (line 393) | RtpCapabilities getRouterRtpCapabilities()
    method getPeerInfo (line 397) | std::shared_ptr<Peer>  getPeerInfo(std::string flag,std::string &id, s...
    method json (line 409) | json getDevice(Peer & info) {
    method createBroadcaster (line 426) | std::vector<PeerInfo > createBroadcaster(std::string id, std::string d...
    method deleteBroadcaster (line 534) | void deleteBroadcaster( std::string broadcasterId )
    method getPeerFrom (line 555) | std::shared_ptr<Peer>  getPeerFrom(std::string &bridgeId) {
    method json (line 564) | json  getLocalSdp()
    method json (line 579) | json createBridge(std::string id, std::string displayName, json & devi...
    method json (line 697) | json createBroadcasterTransport(
    method connectBroadcasterTransport (line 772) | void connectBroadcasterTransport(
    method json (line 810) | json createBroadcasterProducer(
    method json (line 908) | json createBroadcasterConsumer(
    method json (line 967) | json createBroadcasterDataConsumer(
    method json (line 1021) | json createBroadcasterDataProducer(
    method deleteBridge (line 1081) | void deleteBridge( std::string &bridgeId)
    method getBridgeRoomId (line 1102) | std::string getBridgeRoomId(std::string &bridgeId) {
    method getBridgeTransportId (line 1106) | std::string getBridgeTransportId(std::string &bridgeId) {
    method getBridgeTransport (line 1110) | std::shared_ptr<Transport> getBridgeTransport(std::string &bridgeId) {
    method json (line 1128) | json createBridgeTransport(
    method getProducersFromBridge (line 1194) | std::vector<std::shared_ptr<Producer>> getProducersFromBridge(std::str...
    method json (line 1217) | json createBridgeProducer(
    method json (line 1297) | json createBridgeConsumer(
    method connectBridgeTransport (line 1355) | void connectBridgeTransport(
    method _handleAudioLevelObserver (line 1382) | void _handleAudioLevelObserver()
    method _handleProtooRequest (line 1424) | void _handleProtooRequest( std::shared_ptr<Peer> &peer, json &request,...
    method _getJoinedPeers (line 2355) | std::vector<shared_ptr<Peer> > _getJoinedPeers(std::shared_ptr<Peer> e...
    method _getJoinedPeersMap (line 2375) | std::unordered_map<std::string,shared_ptr<Peer>> _getJoinedPeersMap(st...
    method _createConsumer (line 2398) | void _createConsumer(std::shared_ptr<Peer> &consumerPeer, std::shared_...
    method _createBridgeConsumer (line 2592) | void _createBridgeConsumer( std::shared_ptr<Peer> & consumerPeer, std:...
    method _createDataConsumer (line 2778) | void _createDataConsumer(
    method sendSdpOfferToBridge (line 2866) | void sendSdpOfferToBridge(std::shared_ptr<Peer> &bridge,std::string pe...

FILE: demo/Server.cpp
  function json (line 751) | json SfuServer::getStringFromBase64(std::string payload)

FILE: demo/Server.hpp
  class Base64 (line 22) | class Base64{
    method Base64 (line 26) | Base64()
  class MyWorkerObserver (line 39) | class MyWorkerObserver : public mediasoup::IWorker::Observer {
    method MyWorkerObserver (line 41) | MyWorkerObserver() {}
    method OnSuccess (line 42) | void OnSuccess() override {
    method OnFailure (line 45) | void OnFailure(std::string error) override {
    method OnClose (line 48) | void OnClose() override {
  class SfuServer (line 53) | class SfuServer : public oatpp::websocket::AsyncConnectionHandler::Socke...
    method set_address (line 60) | void set_address(std::string ip,int port) {

FILE: demo/Transfmt.cpp
  function json (line 32) | json Transfmt::getCodecInfoFromRtpParameters(std::string kind, json jrtp...
  function json (line 72) | json Transfmt::createSdpText(json &rtpParameters)
  function json (line 160) | json Transfmt::publishRtpStream(std::shared_ptr<Router> router,std::shar...

FILE: demo/Transfmt.hpp
  type TransfmtCreateRtc2Rtmp (line 28) | struct TransfmtCreateRtc2Rtmp {
  type TransfmtCloseRtc2Rtmp (line 43) | struct TransfmtCloseRtc2Rtmp {
  class Transfmt (line 47) | class Transfmt
    method setConfig (line 61) | void setConfig(Config &config1) {

FILE: demo/controller/RoomsController.hpp
  function RoomsController (line 50) | RoomsController(OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMap...

FILE: demo/controller/StatisticsController.hpp
  class StatisticsController (line 42) | class StatisticsController : public oatpp::web::server::api::ApiControll...
    method StatisticsController (line 49) | StatisticsController(OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, ob...
    method ENDPOINT_ASYNC (line 54) | ENDPOINT_ASYNC("GET", m_appConfig->statisticsUrl, Stats) {

FILE: demo/dto/ConfigDto.hpp
  class ConfigDto (line 37) | class ConfigDto : public oatpp::DTO {
    method getHostString (line 72) | oatpp::String getHostString() {
    method getCanonicalBaseUrl (line 87) | oatpp::String getCanonicalBaseUrl() {
    method getWebsocketBaseUrl (line 104) | oatpp::String getWebsocketBaseUrl() {
    method getStatsUrl (line 115) | oatpp::String getStatsUrl() {

FILE: demo/dto/DTOs.hpp
  class PeerDto (line 51) | class PeerDto : public oatpp::DTO {
  class MessageDto (line 61) | class MessageDto : public oatpp::DTO {
  class StatPointDto (line 77) | class StatPointDto : public oatpp::DTO {

FILE: demo/main.cpp
  function worker_init (line 61) | int worker_init(int argc, const char* argv[])
  function uv_pipe_test (line 178) | int uv_pipe_test()
  function mpipe (line 197) | static int mpipe(int *fds) {
  function mpipe (line 209) | static int mpipe(int *fds) {
  function run (line 228) | void run(int argc, const char* argv[]) {
  function main (line 315) | int main(int argc, const char* argv[])
  function IgnoreSignals (line 333) | void IgnoreSignals()

FILE: demo/rooms/Lobby.hpp
  class Lobby (line 38) | class Lobby : public oatpp::websocket::AsyncConnectionHandler::SocketIns...
    method Lobby (line 47) | Lobby()

FILE: demo/rooms/Message.cpp
  function json (line 13) | json Message::parse(string raw) {
  function json (line 58) | json Message::createRequest(string method, json data) {
  function json (line 71) | json Message::createSuccessResponse(json request, json data) {
  function json (line 84) | json Message::createErrorResponse(json request, int errorCode, string er...
  function json (line 99) | json Message::createNotification(string method, json data) {

FILE: demo/rooms/Message.h
  function class (line 13) | class Message{

FILE: demo/rooms/Peer.cpp
  class SendMessageCoroutine (line 37) | class SendMessageCoroutine : public oatpp::async::Coroutine<SendMessageC...
    method SendMessageCoroutine (line 44) | SendMessageCoroutine(oatpp::async::Lock* lock,
    method Action (line 52) | Action act() override {
  class RequestCoroutine (line 80) | class RequestCoroutine : public oatpp::async::Coroutine<RequestCoroutine> {
    method RequestCoroutine (line 88) | RequestCoroutine(const std::shared_ptr<Peer>& peer,
    method Action (line 98) | Action act() override {
    method Action (line 104) | Action waitResponse() {
  class NotifyCoroutine (line 135) | class NotifyCoroutine : public oatpp::async::Coroutine<NotifyCoroutine> {
    method NotifyCoroutine (line 142) | NotifyCoroutine(oatpp::async::Lock* lock,
    method Action (line 150) | Action act() override {
  class SendPingCoroutine (line 208) | class SendPingCoroutine : public oatpp::async::Coroutine<SendPingCorouti...
    method SendPingCoroutine (line 214) | SendPingCoroutine(oatpp::async::Lock* lock, const std::shared_ptr<Asyn...
    method Action (line 219) | Action act() override {
  class SendErrorCoroutine (line 249) | class SendErrorCoroutine : public oatpp::async::Coroutine<SendErrorCorou...
    method SendErrorCoroutine (line 256) | SendErrorCoroutine(oatpp::async::Lock* lock,
    method Action (line 264) | Action act() override {

FILE: demo/rooms/Peer.hpp
  class Room (line 50) | class Room
  type _device (line 52) | struct _device
  type PeerInfo (line 59) | struct PeerInfo
  class PeerData (line 69) | class PeerData
  class Peer (line 88) | class Peer : public oatpp::websocket::AsyncWebSocket::Listener, public s...
    method Peer (line 130) | Peer(const std::shared_ptr<AsyncWebSocket>& socket,

FILE: demo/rooms/Room.hpp
  class Room (line 51) | class Room {
    method Room (line 69) | Room(const oatpp::String& id, std::shared_ptr<Router> mediasoupRouter)
    method connectBroadcasterTransport (line 140) | void connectBroadcasterTransport(
    method json (line 156) | json createBroadcasterProducer(
    method json (line 165) | json createBroadcasterConsumer(
    method json (line 173) | json createBroadcasterDataConsumer(
    method json (line 181) | json createBroadcasterDataProducer(
    method RtpCapabilities (line 192) | RtpCapabilities getRouterRtpCapabilities()
    method json (line 197) | json createBridge(std::string id, std::string displayName, json & devi...
    method json (line 202) | json createBridgeTransport(
    method getBridgeTransportId (line 213) | std::string getBridgeTransportId(std::string &bridgeId) {}
    method getBridgeTransport (line 214) | std::shared_ptr<Transport> getBridgeTransport(std::string &bridgeId){}
    method connectBridgeTransport (line 215) | void connectBridgeTransport(
    method json (line 221) | json  getLocalSdp(){}
    method json (line 223) | json createBridgeProducer( std::string &bridgeId,
    method createBroadcaster (line 227) | std::vector<PeerInfo> createBroadcaster(std::string id, std::string di...
    method getProducersFromBridge (line 228) | std::vector<std::shared_ptr<Producer>> getProducersFromBridge(std::str...

FILE: demo/utils/Nickname.hpp
  class Nickname (line 35) | class Nickname {

FILE: demo/utils/Statistics.hpp
  class Statistics (line 36) | class Statistics {
    method Statistics (line 63) | Statistics(const std::chrono::duration<v_int64, std::micro>& maxPeriod...

FILE: demo/utils/util.cpp
  function generateRandomNumber (line 7) | int generateRandomNumber() {

FILE: demo/utils/util.h
  function class (line 12) | class PeerTimer {

FILE: deps/boost/include/boost/accumulators/accumulators_fwd.hpp
  type boost (line 56) | namespace boost { namespace accumulators
    type accumulators (line 56) | namespace accumulators
      type tag (line 62) | namespace tag
        type sample (line 64) | struct sample
        type weight (line 65) | struct weight
        type accumulator (line 66) | struct accumulator
        type weights (line 67) | struct weights
        type value (line 76) | struct value
        type value_tag (line 79) | struct value_tag
        type reference (line 82) | struct reference
        type reference_tag (line 85) | struct reference_tag
        type external (line 88) | struct external
        type droppable (line 91) | struct droppable
      type tag (line 73) | namespace tag
        type sample (line 64) | struct sample
        type weight (line 65) | struct weight
        type accumulator (line 66) | struct accumulator
        type weights (line 67) | struct weights
        type value (line 76) | struct value
        type value_tag (line 79) | struct value_tag
        type reference (line 82) | struct reference
        type reference_tag (line 85) | struct reference_tag
        type external (line 88) | struct external
        type droppable (line 91) | struct droppable
      type droppable_accumulator_base (line 95) | struct droppable_accumulator_base
      type droppable_accumulator (line 98) | struct droppable_accumulator
      type with_cached_result (line 101) | struct with_cached_result
      type accumulator_set (line 104) | struct accumulator_set
      type extractor (line 107) | struct extractor
      type feature_of (line 110) | struct feature_of
      type as_feature (line 113) | struct as_feature
      type as_weighted_feature (line 116) | struct as_weighted_feature
      type depends_on (line 119) | struct depends_on
      type features (line 122) | struct features
      type detail (line 132) | namespace detail
        type _enabler (line 134) | struct _enabler
        type feature_tag (line 201) | struct feature_tag
        type to_accumulator (line 204) | struct to_accumulator
        type accumulator_set_base (line 206) | struct accumulator_set_base
        type is_accumulator_set (line 209) | struct is_accumulator_set
        function ignore_variable (line 211) | inline void ignore_variable(void const *) {}
      type impl (line 190) | namespace impl
        type external_impl (line 195) | struct external_impl
      type detail (line 198) | namespace detail
        type _enabler (line 134) | struct _enabler
        type feature_tag (line 201) | struct feature_tag
        type to_accumulator (line 204) | struct to_accumulator
        type accumulator_set_base (line 206) | struct accumulator_set_base
        type is_accumulator_set (line 209) | struct is_accumulator_set
        function ignore_variable (line 211) | inline void ignore_variable(void const *) {}

FILE: deps/boost/include/boost/accumulators/framework/accumulator_base.hpp
  type boost (line 19) | namespace boost { namespace accumulators
    type accumulators (line 19) | namespace accumulators
      type detail (line 22) | namespace detail
      type dont_care (line 30) | struct dont_care
        method dont_care (line 33) | dont_care(Args const &)
      type accumulator_base (line 41) | struct accumulator_base
        method add_ref (line 50) | detail::void_ add_ref(dont_care)
        method drop (line 54) | detail::void_ drop(dont_care)
        method on_drop (line 58) | detail::void_ on_drop(dont_care)

FILE: deps/boost/include/boost/accumulators/framework/accumulator_concept.hpp
  type boost (line 13) | namespace boost { namespace accumulators
    type accumulators (line 13) | namespace accumulators
      type accumulator_concept (line 17) | struct accumulator_concept
        method constraints (line 19) | void constraints()

FILE: deps/boost/include/boost/accumulators/framework/accumulator_set.hpp
  type boost (line 41) | namespace boost { namespace accumulators
    type accumulators (line 41) | namespace accumulators
      type detail (line 44) | namespace detail
        type accumulator_visitor (line 50) | struct accumulator_visitor
          method accumulator_visitor (line 52) | explicit accumulator_visitor(Args const &a)
        function make_accumulator_visitor (line 69) | inline accumulator_visitor<Args> const make_accumulator_visitor(Ar...
        type accumulator_set_base (line 76) | struct accumulator_set_base
        type is_accumulator_set (line 83) | struct is_accumulator_set
        type serialize_accumulator (line 99) | struct serialize_accumulator
          method serialize_accumulator (line 101) | serialize_accumulator(Archive & _ar, const unsigned int _file_ve...
      type accumulator_set (line 134) | struct accumulator_set
        method accumulator_set (line 166) | accumulator_set()
        method accumulator_set (line 184) | explicit accumulator_set(
        method accumulator_set (line 207) | explicit accumulator_set(
        method visit (line 301) | void visit(UnaryFunction const &func)
        method visit_if (line 311) | void visit_if(UnaryFunction const &func)
        type apply (line 394) | struct apply
        method drop (line 422) | void drop()
        method serialize (line 444) | void serialize(Archive & ar, const unsigned int file_version)
      function extract_result (line 478) | typename mpl::apply<AccumulatorSet, Feature>::type::result_type

FILE: deps/boost/include/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
  type boost (line 18) | namespace boost { namespace accumulators
    type accumulators (line 18) | namespace accumulators
      type droppable_accumulator (line 22) | struct droppable_accumulator
        method droppable_accumulator (line 167) | droppable_accumulator(Args const &args)
        method droppable_accumulator (line 172) | droppable_accumulator(droppable_accumulator const &that)
      type detail (line 24) | namespace detail
        type add_ref_visitor (line 30) | struct add_ref_visitor
          method add_ref_visitor (line 32) | explicit add_ref_visitor(Args const &args)
        function make_add_ref_visitor (line 57) | add_ref_visitor<Args> make_add_ref_visitor(Args const &args)
        type drop_visitor (line 66) | struct drop_visitor
          method drop_visitor (line 68) | explicit drop_visitor(Args const &args)
        function make_drop_visitor (line 95) | drop_visitor<Args> make_drop_visitor(Args const &args)
      type droppable_accumulator_base (line 104) | struct droppable_accumulator_base
        method droppable_accumulator_base (line 112) | droppable_accumulator_base(Args const &args)
        method droppable_accumulator_base (line 118) | droppable_accumulator_base(droppable_accumulator_base const &that)
        method add_ref (line 134) | void add_ref(Args const &)
        method drop (line 140) | void drop(Args const &args)
        method is_dropped (line 150) | bool is_dropped() const
      type droppable_accumulator (line 163) | struct droppable_accumulator
        method droppable_accumulator (line 167) | droppable_accumulator(Args const &args)
        method droppable_accumulator (line 172) | droppable_accumulator(droppable_accumulator const &that)
      type with_cached_result (line 181) | struct with_cached_result
        method with_cached_result (line 187) | with_cached_result(Args const &args)
        method with_cached_result (line 193) | with_cached_result(with_cached_result const &that)
        method on_drop (line 216) | void on_drop(Args const &args)
        method result_type (line 224) | result_type result(Args const &args) const
        method set (line 232) | void set(result_type const &r)
        method result_type (line 237) | result_type const &get() const
        method has_result (line 242) | bool has_result() const
      type tag (line 252) | namespace tag
        type as_droppable (line 255) | struct as_droppable
        type as_droppable<droppable<Feature> > (line 261) | struct as_droppable<droppable<Feature> >
        type droppable (line 269) | struct droppable
          type impl (line 282) | struct impl
            type apply (line 285) | struct apply
      type as_feature<tag::droppable<Feature> > (line 299) | struct as_feature<tag::droppable<Feature> >
      type as_weighted_feature<tag::droppable<Feature> > (line 307) | struct as_weighted_feature<tag::droppable<Feature> >
      type feature_of<tag::droppable<Feature> > (line 315) | struct feature_of<tag::droppable<Feature> >

FILE: deps/boost/include/boost/accumulators/framework/accumulators/external_accumulator.hpp
  type boost (line 18) | namespace boost { namespace accumulators { namespace impl
    type accumulators (line 18) | namespace accumulators { namespace impl
      type impl (line 18) | namespace impl
        type external_impl (line 26) | struct external_impl
          method external_impl (line 32) | external_impl(dont_care) {}
          method result_type (line 35) | result_type result(Args const &args) const
          method result_type (line 43) | static result_type extract_(Args const &args, int)
          method result_type (line 52) | static result_type extract_(Args const &, AccumulatorSet const &...
      type tag (line 63) | namespace tag
        type external (line 68) | struct external
        type external<Feature, Tag, void> (line 80) | struct external<Feature, Tag, void>
      type feature_of<tag::external<Feature, Tag, AccumulatorSet> > (line 95) | struct feature_of<tag::external<Feature, Tag, AccumulatorSet> >

FILE: deps/boost/include/boost/accumulators/framework/accumulators/reference_accumulator.hpp
  type accumulators (line 18) | namespace accumulators
    type impl (line 21) | namespace impl
      type reference_accumulator_impl (line 27) | struct reference_accumulator_impl
        method reference_accumulator_impl (line 33) | reference_accumulator_impl(Args const &args)
        method result_type (line 38) | result_type result(dont_care) const
    type tag (line 48) | namespace tag
      type reference_tag (line 53) | struct reference_tag
      type reference (line 60) | struct reference
    type extract (line 69) | namespace extract
      type feature_of<tag::reference<ValueType, Tag> > (line 82) | struct feature_of<tag::reference<ValueType, Tag> >

FILE: deps/boost/include/boost/accumulators/framework/accumulators/value_accumulator.hpp
  type accumulators (line 17) | namespace accumulators
    type impl (line 20) | namespace impl
      type value_accumulator_impl (line 26) | struct value_accumulator_impl
        method value_accumulator_impl (line 32) | value_accumulator_impl(Args const &args)
        method result_type (line 37) | result_type result(dont_care) const
    type tag (line 48) | namespace tag
      type value_tag (line 53) | struct value_tag
      type value (line 60) | struct value
    type extract (line 69) | namespace extract
      type feature_of<tag::value<ValueType, Tag> > (line 82) | struct feature_of<tag::value<ValueType, Tag> >

FILE: deps/boost/include/boost/accumulators/framework/depends_on.hpp
  type boost (line 47) | namespace boost { namespace accumulators
    type accumulators (line 47) | namespace accumulators
      type as_feature (line 52) | struct as_feature
      type as_weighted_feature (line 60) | struct as_weighted_feature
      type feature_of (line 68) | struct feature_of
      type detail (line 73) | namespace detail
        type feature_tag (line 78) | struct feature_tag
        type undroppable (line 84) | struct undroppable
        type undroppable<tag::droppable<Feature> > (line 90) | struct undroppable<tag::droppable<Feature> >
        type is_dependent_on (line 98) | struct is_dependent_on
        type dependencies_of (line 106) | struct dependencies_of
        type set_insert_range (line 113) | struct set_insert_range
        type collect_abstract_features (line 122) | struct collect_abstract_features
        type depends_on_base (line 134) | struct depends_on_base
        type matches_feature (line 177) | struct matches_feature
          type apply (line 180) | struct apply
        type contains_feature_of (line 189) | struct contains_feature_of
        type contains_feature_of_ (line 208) | struct contains_feature_of_
          type apply (line 211) | struct apply
        type build_acc_list (line 221) | struct build_acc_list
        type build_acc_list<First, Last, true> (line 224) | struct build_acc_list<First, Last, true>
          method call (line 229) | static fusion::nil_
        type build_acc_list<First, Last, false> (line 237) | struct build_acc_list<First, Last, false>
          method type (line 249) | static type
        type meta (line 256) | namespace meta
          type make_acc_list (line 259) | struct make_acc_list
        function make_acc_list (line 268) | typename meta::make_acc_list<Sequence>::type
        function make_acc_list (line 275) | typename meta::make_acc_list<Sequence>::type
        type checked_as_weighted_feature (line 284) | struct checked_as_weighted_feature
        type as_feature_list (line 300) | struct as_feature_list
        type as_feature_list<Features, void> (line 306) | struct as_feature_list<Features, void>
        type accumulator_wrapper (line 314) | struct accumulator_wrapper
          method accumulator_wrapper (line 319) | accumulator_wrapper(accumulator_wrapper const &that)
          method accumulator_wrapper (line 325) | accumulator_wrapper(Args const &args)
        type to_accumulator (line 334) | struct to_accumulator
        type to_accumulator<Feature, Sample, tag::external<Weight, Tag, AccumulatorSet> > (line 345) | struct to_accumulator<Feature, Sample, tag::external<Weight, Tag, ...
        type insert_feature (line 368) | struct insert_feature
        type insert_dependencies (line 378) | struct insert_dependencies
        type insert_sequence (line 392) | struct insert_sequence
        type make_accumulator_tuple (line 402) | struct make_accumulator_tuple
      type depends_on (line 157) | struct depends_on
      type detail (line 174) | namespace detail
        type feature_tag (line 78) | struct feature_tag
        type undroppable (line 84) | struct undroppable
        type undroppable<tag::droppable<Feature> > (line 90) | struct undroppable<tag::droppable<Feature> >
        type is_dependent_on (line 98) | struct is_dependent_on
        type dependencies_of (line 106) | struct dependencies_of
        type set_insert_range (line 113) | struct set_insert_range
        type collect_abstract_features (line 122) | struct collect_abstract_features
        type depends_on_base (line 134) | struct depends_on_base
        type matches_feature (line 177) | struct matches_feature
          type apply (line 180) | struct apply
        type contains_feature_of (line 189) | struct contains_feature_of
        type contains_feature_of_ (line 208) | struct contains_feature_of_
          type apply (line 211) | struct apply
        type build_acc_list (line 221) | struct build_acc_list
        type build_acc_list<First, Last, true> (line 224) | struct build_acc_list<First, Last, true>
          method call (line 229) | static fusion::nil_
        type build_acc_list<First, Last, false> (line 237) | struct build_acc_list<First, Last, false>
          method type (line 249) | static type
        type meta (line 256) | namespace meta
          type make_acc_list (line 259) | struct make_acc_list
        function make_acc_list (line 268) | typename meta::make_acc_list<Sequence>::type
        function make_acc_list (line 275) | typename meta::make_acc_list<Sequence>::type
        type checked_as_weighted_feature (line 284) | struct checked_as_weighted_feature
        type as_feature_list (line 300) | struct as_feature_list
        type as_feature_list<Features, void> (line 306) | struct as_feature_list<Features, void>
        type accumulator_wrapper (line 314) | struct accumulator_wrapper
          method accumulator_wrapper (line 319) | accumulator_wrapper(accumulator_wrapper const &that)
          method accumulator_wrapper (line 325) | accumulator_wrapper(Args const &args)
        type to_accumulator (line 334) | struct to_accumulator
        type to_accumulator<Feature, Sample, tag::external<Weight, Tag, AccumulatorSet> > (line 345) | struct to_accumulator<Feature, Sample, tag::external<Weight, Tag, ...
        type insert_feature (line 368) | struct insert_feature
        type insert_dependencies (line 378) | struct insert_dependencies
        type insert_sequence (line 392) | struct insert_sequence
        type make_accumulator_tuple (line 402) | struct make_accumulator_tuple

FILE: deps/boost/include/boost/accumulators/framework/extractor.hpp
  type boost (line 34) | namespace boost { namespace accumulators
    type accumulators (line 34) | namespace accumulators
      type detail (line 37) | namespace detail
        type accumulator_set_result (line 40) | struct accumulator_set_result
        type argument_pack_result (line 52) | struct argument_pack_result
        type extractor_result (line 68) | struct extractor_result
        function do_extract (line 78) | typename extractor_result<AccumulatorSet, Feature>::type
        function do_extract (line 86) | typename extractor_result<Args, Feature>::type
      type extractor (line 99) | struct extractor
        type result (line 105) | struct result
        type result<this_type(A1)> (line 108) | struct result<this_type(A1)>

FILE: deps/boost/include/boost/accumulators/framework/features.hpp
  type boost (line 15) | namespace boost { namespace accumulators
    type accumulators (line 15) | namespace accumulators
      type features (line 22) | struct features

FILE: deps/boost/include/boost/accumulators/framework/parameters/accumulator.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/framework/parameters/sample.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/framework/parameters/weight.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/framework/parameters/weights.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/numeric/detail/function1.hpp
  type boost (line 12) | namespace boost { namespace detail {
    type detail (line 12) | namespace detail {
      type function1 (line 21) | struct function1
        type result (line 24) | struct result
        type result<This(A0)> (line 28) | struct result<This(A0)>

FILE: deps/boost/include/boost/accumulators/numeric/detail/function_n.hpp
  type boost (line 27) | namespace boost { namespace detail {
    type detail (line 27) | namespace detail {
      type function_name (line 54) | struct function_name
        type result (line 63) | struct result {}

FILE: deps/boost/include/boost/accumulators/numeric/detail/pod_singleton.hpp
  type boost (line 7) | namespace boost { namespace detail {
    type detail (line 7) | namespace detail {
      type pod_singleton (line 10) | struct pod_singleton

FILE: deps/boost/include/boost/accumulators/numeric/functional.hpp
  type std (line 49) | namespace std
    type unary_function (line 53) | struct unary_function {}
    type binary_function (line 56) | struct binary_function {}
  type functional (line 62) | namespace functional
    type are_integral (line 67) | struct are_integral
    type left_ref (line 72) | struct left_ref
    type detail (line 77) | namespace detail

FILE: deps/boost/include/boost/accumulators/numeric/functional/complex.hpp
  type boost (line 22) | namespace boost { namespace numeric { namespace operators
    type numeric (line 22) | namespace numeric { namespace operators
      type operators (line 22) | namespace operators
      type detail (line 53) | namespace detail
        type one_complex (line 56) | struct one_complex
      type one<std::complex<T> > (line 69) | struct one<std::complex<T> >
    type numeric (line 51) | namespace numeric
      type operators (line 22) | namespace operators
      type detail (line 53) | namespace detail
        type one_complex (line 56) | struct one_complex
      type one<std::complex<T> > (line 69) | struct one<std::complex<T> >
  type boost (line 51) | namespace boost { namespace numeric
    type numeric (line 22) | namespace numeric { namespace operators
      type operators (line 22) | namespace operators
      type detail (line 53) | namespace detail
        type one_complex (line 56) | struct one_complex
      type one<std::complex<T> > (line 69) | struct one<std::complex<T> >
    type numeric (line 51) | namespace numeric
      type operators (line 22) | namespace operators
      type detail (line 53) | namespace detail
        type one_complex (line 56) | struct one_complex
      type one<std::complex<T> > (line 69) | struct one<std::complex<T> >

FILE: deps/boost/include/boost/accumulators/numeric/functional/valarray.hpp
  type operators (line 30) | namespace operators
    type acc_detail (line 32) | namespace acc_detail
      type make_valarray (line 35) | struct make_valarray
  type std_valarray_tag (line 98) | struct std_valarray_tag
  type tag<std::valarray<T> > (line 101) | struct tag<std::valarray<T> >
  type tag<std::_Expr<T, U> > (line 108) | struct tag<std::_Expr<T, U> >
  function To (line 242) | To operator ()(From &arr) const
  function ToFrom (line 259) | ToFrom &operator ()(ToFrom &tofrom) const

FILE: deps/boost/include/boost/accumulators/numeric/functional/vector.hpp
  type boost (line 27) | namespace boost { namespace numeric
    type numeric (line 27) | namespace numeric
      type operators (line 29) | namespace operators
        type acc_detail (line 31) | namespace acc_detail
          type make_vector (line 34) | struct make_vector
      type functional (line 184) | namespace functional
        type std_vector_tag (line 186) | struct std_vector_tag
        type tag<std::vector<T, Al> > (line 189) | struct tag<std::vector<T, Al> >
        type min_assign<Left, Right, std_vector_tag, std_vector_tag> (line 197) | struct min_assign<Left, Right, std_vector_tag, std_vector_tag>
        type max_assign<Left, Right, std_vector_tag, std_vector_tag> (line 219) | struct max_assign<Left, Right, std_vector_tag, std_vector_tag>
        type fdiv<Left, Right, std_vector_tag, void> (line 240) | struct fdiv<Left, Right, std_vector_tag, void>
        type promote<To, From, std_vector_tag, std_vector_tag> (line 250) | struct promote<To, From, std_vector_tag, std_vector_tag>
          method To (line 255) | To operator ()(From &arr) const
        type promote<ToFrom, ToFrom, std_vector_tag, std_vector_tag> (line 267) | struct promote<ToFrom, ToFrom, std_vector_tag, std_vector_tag>
          method ToFrom (line 272) | ToFrom &operator ()(ToFrom &tofrom) const
        type as_min<T, std_vector_tag> (line 281) | struct as_min<T, std_vector_tag>
        type as_max<T, std_vector_tag> (line 297) | struct as_max<T, std_vector_tag>
        type as_zero<T, std_vector_tag> (line 313) | struct as_zero<T, std_vector_tag>
        type as_one<T, std_vector_tag> (line 329) | struct as_one<T, std_vector_tag>

FILE: deps/boost/include/boost/accumulators/numeric/functional_fwd.hpp
  type operators (line 20) | namespace operators
  type op (line 23) | namespace op
  type functional (line 30) | namespace functional
    type tag (line 35) | struct tag
    type tag<T const> (line 41) | struct tag<T const>
    type tag<T volatile> (line 46) | struct tag<T volatile>
    type tag<T const volatile> (line 51) | struct tag<T const volatile>
    type static_ (line 56) | struct static_
    type are_integral (line 59) | struct are_integral

FILE: deps/boost/include/boost/accumulators/statistics/count.hpp
  type boost (line 17) | namespace boost { namespace accumulators
    type accumulators (line 17) | namespace accumulators
      type impl (line 20) | namespace impl
        type count_impl (line 25) | struct count_impl
          method count_impl (line 31) | count_impl(dont_care)
          method result_type (line 41) | result_type result(dont_care) const
          method serialize (line 48) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 62) | namespace tag
        type count (line 64) | struct count
      type extract (line 76) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/covariance.hpp
  type boost (line 33) | namespace boost { namespace numeric
    type numeric (line 33) | namespace numeric
      type functional (line 35) | namespace functional
        type std_vector_tag (line 37) | struct std_vector_tag
        type outer_product_base (line 42) | struct outer_product_base
        type outer_product (line 47) | struct outer_product
        type outer_product<Left, Right, std_vector_tag, std_vector_tag> (line 52) | struct outer_product<Left, Right, std_vector_tag, std_vector_tag>
          method result_type (line 65) | result_type
      type op (line 79) | namespace op
        type outer_product (line 81) | struct outer_product
    type accumulators (line 93) | namespace accumulators
      type impl (line 96) | namespace impl
        type covariance_impl (line 114) | struct covariance_impl
          method covariance_impl (line 123) | covariance_impl(Args const &args)
          method result_type (line 150) | result_type result(dont_care) const
          method serialize (line 157) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 171) | namespace tag
        type covariance (line 174) | struct covariance
        type abstract_covariance (line 180) | struct abstract_covariance
      type extract (line 189) | namespace extract
      type feature_of<tag::covariance<VariateType, VariateTag> > (line 199) | struct feature_of<tag::covariance<VariateType, VariateTag> >
      type as_weighted_feature<tag::covariance<VariateType, VariateTag> > (line 207) | struct as_weighted_feature<tag::covariance<VariateType, VariateTag> >
      type feature_of<tag::weighted_covariance<VariateType, VariateTag> > (line 213) | struct feature_of<tag::weighted_covariance<VariateType, VariateTag> >
  type boost (line 93) | namespace boost { namespace accumulators
    type numeric (line 33) | namespace numeric
      type functional (line 35) | namespace functional
        type std_vector_tag (line 37) | struct std_vector_tag
        type outer_product_base (line 42) | struct outer_product_base
        type outer_product (line 47) | struct outer_product
        type outer_product<Left, Right, std_vector_tag, std_vector_tag> (line 52) | struct outer_product<Left, Right, std_vector_tag, std_vector_tag>
          method result_type (line 65) | result_type
      type op (line 79) | namespace op
        type outer_product (line 81) | struct outer_product
    type accumulators (line 93) | namespace accumulators
      type impl (line 96) | namespace impl
        type covariance_impl (line 114) | struct covariance_impl
          method covariance_impl (line 123) | covariance_impl(Args const &args)
          method result_type (line 150) | result_type result(dont_care) const
          method serialize (line 157) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 171) | namespace tag
        type covariance (line 174) | struct covariance
        type abstract_covariance (line 180) | struct abstract_covariance
      type extract (line 189) | namespace extract
      type feature_of<tag::covariance<VariateType, VariateTag> > (line 199) | struct feature_of<tag::covariance<VariateType, VariateTag> >
      type as_weighted_feature<tag::covariance<VariateType, VariateTag> > (line 207) | struct as_weighted_feature<tag::covariance<VariateType, VariateTag> >
      type feature_of<tag::weighted_covariance<VariateType, VariateTag> > (line 213) | struct feature_of<tag::weighted_covariance<VariateType, VariateTag> >

FILE: deps/boost/include/boost/accumulators/statistics/density.hpp
  type boost (line 31) | namespace boost { namespace accumulators
    type accumulators (line 31) | namespace accumulators
      type impl (line 43) | namespace impl
        type density_impl (line 63) | struct density_impl
          method density_impl (line 73) | density_impl(Args const &args)
          method result_type (line 170) | result_type result(Args const &args) const
          method serialize (line 192) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 218) | namespace tag
        type density (line 220) | struct density
      type extract (line 241) | namespace extract
      type as_weighted_feature<tag::density> (line 253) | struct as_weighted_feature<tag::density>
      type feature_of<tag::weighted_density> (line 259) | struct feature_of<tag::weighted_density>

FILE: deps/boost/include/boost/accumulators/statistics/error_of.hpp
  type accumulators (line 17) | namespace accumulators
    type impl (line 20) | namespace impl
      type this_feature_has_no_error_calculation (line 25) | struct this_feature_has_no_error_calculation
      type error_of_impl (line 35) | struct error_of_impl
        method error_of_impl (line 45) | error_of_impl(dont_care)
        method result_type (line 49) | result_type result(dont_care) const
    type tag (line 60) | namespace tag
      type error_of (line 63) | struct error_of
    type extract (line 75) | namespace extract
      type as_feature<tag::error_of<Feature> > (line 84) | struct as_feature<tag::error_of<Feature> >
      type as_weighted_feature<tag::error_of<Feature> > (line 92) | struct as_weighted_feature<tag::error_of<Feature> >

FILE: deps/boost/include/boost/accumulators/statistics/error_of_mean.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type impl (line 23) | namespace impl
        type error_of_mean_impl (line 28) | struct error_of_mean_impl
          method error_of_mean_impl (line 34) | error_of_mean_impl(dont_care) {}
          method result_type (line 37) | result_type result(Args const &args) const
      type tag (line 50) | namespace tag
        type error_of<mean> (line 53) | struct error_of<mean>
        type error_of<immediate_mean> (line 62) | struct error_of<immediate_mean>

FILE: deps/boost/include/boost/accumulators/statistics/extended_p_square.hpp
  type boost (line 31) | namespace boost { namespace accumulators
    type accumulators (line 31) | namespace accumulators
      type impl (line 40) | namespace impl
        type extended_p_square_impl (line 70) | struct extended_p_square_impl
          method extended_p_square_impl (line 86) | extended_p_square_impl(Args const &args)
          method result_type (line 228) | result_type result(dont_care) const
          method serialize (line 244) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 266) | namespace tag
        type extended_p_square (line 268) | struct extended_p_square
      type extract (line 284) | namespace extract
      type as_weighted_feature<tag::extended_p_square> (line 296) | struct as_weighted_feature<tag::extended_p_square>
      type feature_of<tag::weighted_extended_p_square> (line 302) | struct feature_of<tag::weighted_extended_p_square>

FILE: deps/boost/include/boost/accumulators/statistics/extended_p_square_quantile.hpp
  type boost (line 40) | namespace boost { namespace accumulators
    type accumulators (line 40) | namespace accumulators
      type impl (line 43) | namespace impl
        type extended_p_square_quantile_impl (line 57) | struct extended_p_square_quantile_impl
          method extended_p_square_quantile_impl (line 74) | extended_p_square_quantile_impl(Args const &args)
          method result_type (line 83) | result_type result(Args const &args) const
          method serialize (line 193) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 211) | namespace tag
        type extended_p_square_quantile (line 213) | struct extended_p_square_quantile
        type extended_p_square_quantile_quadratic (line 218) | struct extended_p_square_quantile_quadratic
        type weighted_extended_p_square_quantile (line 223) | struct weighted_extended_p_square_quantile
        type weighted_extended_p_square_quantile_quadratic (line 228) | struct weighted_extended_p_square_quantile_quadratic
      type extract (line 239) | namespace extract
      type as_feature<tag::extended_p_square_quantile(linear)> (line 259) | struct as_feature<tag::extended_p_square_quantile(linear)>
      type as_feature<tag::extended_p_square_quantile(quadratic)> (line 266) | struct as_feature<tag::extended_p_square_quantile(quadratic)>
      type as_feature<tag::weighted_extended_p_square_quantile(linear)> (line 273) | struct as_feature<tag::weighted_extended_p_square_quantile(linear)>
      type as_feature<tag::weighted_extended_p_square_quantile(quadratic)> (line 280) | struct as_feature<tag::weighted_extended_p_square_quantile(quadratic)>
      type feature_of<tag::extended_p_square_quantile> (line 289) | struct feature_of<tag::extended_p_square_quantile>
      type feature_of<tag::extended_p_square_quantile_quadratic> (line 294) | struct feature_of<tag::extended_p_square_quantile_quadratic>
      type as_weighted_feature<tag::extended_p_square_quantile> (line 301) | struct as_weighted_feature<tag::extended_p_square_quantile>
      type feature_of<tag::weighted_extended_p_square_quantile> (line 307) | struct feature_of<tag::weighted_extended_p_square_quantile>
      type as_weighted_feature<tag::extended_p_square_quantile_quadratic> (line 315) | struct as_weighted_feature<tag::extended_p_square_quantile_quadratic>
      type feature_of<tag::weighted_extended_p_square_quantile_quadratic> (line 320) | struct feature_of<tag::weighted_extended_p_square_quantile_quadratic>

FILE: deps/boost/include/boost/accumulators/statistics/kurtosis.hpp
  type boost (line 21) | namespace boost { namespace accumulators
    type accumulators (line 21) | namespace accumulators
      type impl (line 24) | namespace impl
        type kurtosis_impl (line 46) | struct kurtosis_impl
          method kurtosis_impl (line 52) | kurtosis_impl(dont_care) {}
          method result_type (line 55) | result_type result(Args const &args) const
          method serialize (line 69) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 77) | namespace tag
        type kurtosis (line 79) | struct kurtosis
      type extract (line 91) | namespace extract
      type as_weighted_feature<tag::kurtosis> (line 103) | struct as_weighted_feature<tag::kurtosis>
      type feature_of<tag::weighted_kurtosis> (line 109) | struct feature_of<tag::weighted_kurtosis>

FILE: deps/boost/include/boost/accumulators/statistics/max.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type impl (line 23) | namespace impl
        type max_impl (line 28) | struct max_impl
          method max_impl (line 35) | max_impl(Args const &args)
          method result_type (line 46) | result_type result(dont_care) const
          method serialize (line 53) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 67) | namespace tag
        type max (line 69) | struct max
      type extract (line 81) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/mean.hpp
  type impl (line 24) | namespace impl
    type mean_impl (line 30) | struct mean_impl
      method mean_impl (line 36) | mean_impl(dont_care) {}
      method result_type (line 39) | result_type result(Args const &args) const
      method serialize (line 47) | void serialize(Archive & ar, const unsigned int file_version) {}
    type immediate_mean_impl (line 51) | struct immediate_mean_impl
      method immediate_mean_impl (line 58) | immediate_mean_impl(Args const &args)
      method result_type (line 73) | result_type result(dont_care) const
      method serialize (line 79) | void serialize(Archive & ar, const unsigned int file_version)
  type tag (line 98) | namespace tag
    type mean (line 100) | struct mean
    type immediate_mean (line 107) | struct immediate_mean
    type mean_of_weights (line 114) | struct mean_of_weights
    type immediate_mean_of_weights (line 122) | struct immediate_mean_of_weights
    type mean_of_variates (line 131) | struct mean_of_variates
    type immediate_mean_of_variates (line 139) | struct immediate_mean_of_variates
  type as_feature<tag::mean(immediate)> (line 176) | struct as_feature<tag::mean(immediate)>
  type as_feature<tag::mean_of_weights(lazy)> (line 183) | struct as_feature<tag::mean_of_weights(lazy)>
  type as_feature<tag::mean_of_weights(immediate)> (line 190) | struct as_feature<tag::mean_of_weights(immediate)>
  type feature_of<tag::immediate_mean> (line 212) | struct feature_of<tag::immediate_mean>
  type feature_of<tag::immediate_mean_of_weights> (line 220) | struct feature_of<tag::immediate_mean_of_weights>
  type as_weighted_feature<tag::mean> (line 236) | struct as_weighted_feature<tag::mean>
  type feature_of<tag::weighted_mean> (line 242) | struct feature_of<tag::weighted_mean>
  type as_weighted_feature<tag::immediate_mean> (line 249) | struct as_weighted_feature<tag::immediate_mean>
  type feature_of<tag::immediate_weighted_mean> (line 255) | struct feature_of<tag::immediate_weighted_mean>
  type feature_of<tag::weighted_mean_of_variates<VariateType, VariateTag> > (line 268) | struct feature_of<tag::weighted_mean_of_variates<VariateType, VariateTag> >
  type feature_of<tag::immediate_weighted_mean_of_variates<VariateType, VariateTag> > (line 282) | struct feature_of<tag::immediate_weighted_mean_of_variates<VariateType, ...

FILE: deps/boost/include/boost/accumulators/statistics/median.hpp
  type boost (line 24) | namespace boost { namespace accumulators
    type accumulators (line 24) | namespace accumulators
      type impl (line 27) | namespace impl
        type median_impl (line 38) | struct median_impl
          method median_impl (line 44) | median_impl(dont_care) {}
          method result_type (line 47) | result_type result(Args const &args) const
          method serialize (line 54) | void serialize(Archive & ar, const unsigned int file_version) {}
        type with_density_median_impl (line 67) | struct with_density_median_impl
          method with_density_median_impl (line 77) | with_density_median_impl(Args const &args)
          method result_type (line 90) | result_type result(Args const &args) const
          method serialize (line 114) | void serialize(Archive & ar, const unsigned int file_version)
        type with_p_square_cumulative_distribution_median_impl (line 139) | struct with_p_square_cumulative_distribution_median_impl
          method with_p_square_cumulative_distribution_median_impl (line 148) | with_p_square_cumulative_distribution_median_impl(dont_care)
          method result_type (line 159) | result_type result(Args const &args) const
          method serialize (line 180) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 199) | namespace tag
        type median (line 201) | struct median
        type with_density_median (line 208) | struct with_density_median
        type with_p_square_cumulative_distribution_median (line 215) | struct with_p_square_cumulative_distribution_median
      type extract (line 229) | namespace extract
      type as_feature<tag::median(with_p_square_quantile)> (line 246) | struct as_feature<tag::median(with_p_square_quantile)>
      type as_feature<tag::median(with_density)> (line 253) | struct as_feature<tag::median(with_density)>
      type as_feature<tag::median(with_p_square_cumulative_distribution)> (line 260) | struct as_feature<tag::median(with_p_square_cumulative_distribution)>
      type feature_of<tag::with_density_median> (line 269) | struct feature_of<tag::with_density_median>
      type feature_of<tag::with_p_square_cumulative_distribution_median> (line 275) | struct feature_of<tag::with_p_square_cumulative_distribution_median>
      type as_weighted_feature<tag::median> (line 283) | struct as_weighted_feature<tag::median>
      type feature_of<tag::weighted_median> (line 289) | struct feature_of<tag::weighted_median>
      type as_weighted_feature<tag::with_density_median> (line 297) | struct as_weighted_feature<tag::with_density_median>
      type feature_of<tag::with_density_weighted_median> (line 303) | struct feature_of<tag::with_density_weighted_median>
      type as_weighted_feature<tag::with_p_square_cumulative_distribution_median> (line 311) | struct as_weighted_feature<tag::with_p_square_cumulative_distributio...
      type feature_of<tag::with_p_square_cumulative_distribution_weighted_median> (line 317) | struct feature_of<tag::with_p_square_cumulative_distribution_weighte...

FILE: deps/boost/include/boost/accumulators/statistics/min.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type impl (line 23) | namespace impl
        type min_impl (line 28) | struct min_impl
          method min_impl (line 35) | min_impl(Args const &args)
          method result_type (line 46) | result_type result(dont_care) const
          method serialize (line 53) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 67) | namespace tag
        type min (line 69) | struct min
      type extract (line 81) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/moment.hpp
  type boost (line 23) | namespace boost { namespace numeric
    type numeric (line 23) | namespace numeric
      function T (line 28) | T const &pow(T const &x, mpl::int_<1>)
      function T (line 36) | T pow(T const &x, mpl::int_<N>)
  type accumulators (line 45) | namespace accumulators
    type impl (line 48) | namespace impl
      type moment_impl (line 53) | struct moment_impl
        method moment_impl (line 61) | moment_impl(Args const &args)
        method result_type (line 73) | result_type result(Args const &args) const
        method serialize (line 80) | void serialize(Archive & ar, const unsigned int file_version)
    type tag (line 94) | namespace tag
      type moment (line 97) | struct moment
    type extract (line 109) | namespace extract
      type as_weighted_feature<tag::moment<N> > (line 119) | struct as_weighted_feature<tag::moment<N> >
      type feature_of<tag::weighted_moment<N> > (line 125) | struct feature_of<tag::weighted_moment<N> >

FILE: deps/boost/include/boost/accumulators/statistics/p_square_cumul_dist.hpp
  type boost (line 26) | namespace boost { namespace accumulators
    type accumulators (line 26) | namespace accumulators
      type impl (line 35) | namespace impl
        type p_square_cumulative_distribution_impl (line 56) | struct p_square_cumulative_distribution_impl
          method p_square_cumulative_distribution_impl (line 66) | p_square_cumulative_distribution_impl(Args const &args)
          method result_type (line 189) | result_type result(Args const &args) const
          method serialize (line 213) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 239) | namespace tag
        type p_square_cumulative_distribution (line 241) | struct p_square_cumulative_distribution
      type extract (line 254) | namespace extract
      type as_weighted_feature<tag::p_square_cumulative_distribution> (line 266) | struct as_weighted_feature<tag::p_square_cumulative_distribution>
      type feature_of<tag::weighted_p_square_cumulative_distribution> (line 272) | struct feature_of<tag::weighted_p_square_cumulative_distribution>

FILE: deps/boost/include/boost/accumulators/statistics/p_square_quantile.hpp
  type boost (line 27) | namespace boost { namespace accumulators
    type accumulators (line 27) | namespace accumulators
      type impl (line 30) | namespace impl
        type p_square_quantile_impl (line 55) | struct p_square_quantile_impl
          method p_square_quantile_impl (line 64) | p_square_quantile_impl(Args const &args)
          method result_type (line 191) | result_type result(dont_care) const
          method serialize (line 199) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 221) | namespace tag
        type p_square_quantile (line 223) | struct p_square_quantile
        type p_square_quantile_for_median (line 230) | struct p_square_quantile_for_median
      type extract (line 243) | namespace extract
      type as_weighted_feature<tag::p_square_quantile> (line 258) | struct as_weighted_feature<tag::p_square_quantile>
      type feature_of<tag::weighted_p_square_quantile> (line 264) | struct feature_of<tag::weighted_p_square_quantile>

FILE: deps/boost/include/boost/accumulators/statistics/parameters/quantile_probability.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/statistics/peaks_over_threshold.hpp
  type boost (line 41) | namespace boost { namespace accumulators
    type accumulators (line 41) | namespace accumulators
      type impl (line 53) | namespace impl
        type peaks_over_threshold_impl (line 125) | struct peaks_over_threshold_impl
          method peaks_over_threshold_impl (line 135) | peaks_over_threshold_impl(Args const &args)
          method result_type (line 159) | result_type result(Args const &args) const
          method serialize (line 187) | void serialize(Archive & ar, const unsigned int file_version)
        type peaks_over_threshold_prob_impl (line 220) | struct peaks_over_threshold_prob_impl
          method peaks_over_threshold_prob_impl (line 230) | peaks_over_threshold_prob_impl(Args const &args)
          method result_type (line 245) | result_type result(Args const &args) const
          method serialize (line 312) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 336) | namespace tag
        type peaks_over_threshold (line 339) | struct peaks_over_threshold
        type peaks_over_threshold_prob (line 349) | struct peaks_over_threshold_prob
        type abstract_peaks_over_threshold (line 358) | struct abstract_peaks_over_threshold
      type extract (line 367) | namespace extract
      type as_feature<tag::peaks_over_threshold<LeftRight>(with_threshold_value)> (line 378) | struct as_feature<tag::peaks_over_threshold<LeftRight>(with_threshol...
      type as_feature<tag::peaks_over_threshold<LeftRight>(with_threshold_probability)> (line 385) | struct as_feature<tag::peaks_over_threshold<LeftRight>(with_threshol...
      type feature_of<tag::peaks_over_threshold<LeftRight> > (line 391) | struct feature_of<tag::peaks_over_threshold<LeftRight> >
      type feature_of<tag::peaks_over_threshold_prob<LeftRight> > (line 397) | struct feature_of<tag::peaks_over_threshold_prob<LeftRight> >
      type as_weighted_feature<tag::peaks_over_threshold<LeftRight> > (line 405) | struct as_weighted_feature<tag::peaks_over_threshold<LeftRight> >
      type feature_of<tag::weighted_peaks_over_threshold<LeftRight> > (line 411) | struct feature_of<tag::weighted_peaks_over_threshold<LeftRight> >
      type as_weighted_feature<tag::peaks_over_threshold_prob<LeftRight> > (line 418) | struct as_weighted_feature<tag::peaks_over_threshold_prob<LeftRight> >
      type feature_of<tag::weighted_peaks_over_threshold_prob<LeftRight> > (line 424) | struct feature_of<tag::weighted_peaks_over_threshold_prob<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/pot_quantile.hpp
  type boost (line 29) | namespace boost { namespace accumulators
    type accumulators (line 29) | namespace accumulators
      type impl (line 32) | namespace impl
        type pot_quantile_impl (line 49) | struct pot_quantile_impl
          method pot_quantile_impl (line 56) | pot_quantile_impl(dont_care)
          method result_type (line 62) | result_type result(Args const &args) const
          method serialize (line 86) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 103) | namespace tag
        type pot_quantile (line 106) | struct pot_quantile
        type pot_quantile_prob (line 114) | struct pot_quantile_prob
        type weighted_pot_quantile (line 122) | struct weighted_pot_quantile
        type weighted_pot_quantile_prob (line 130) | struct weighted_pot_quantile_prob
      type as_feature<tag::pot_quantile<LeftRight>(with_threshold_value)> (line 141) | struct as_feature<tag::pot_quantile<LeftRight>(with_threshold_value)>
      type as_feature<tag::pot_quantile<LeftRight>(with_threshold_probability)> (line 148) | struct as_feature<tag::pot_quantile<LeftRight>(with_threshold_probab...
      type as_feature<tag::weighted_pot_quantile<LeftRight>(with_threshold_value)> (line 155) | struct as_feature<tag::weighted_pot_quantile<LeftRight>(with_thresho...
      type as_feature<tag::weighted_pot_quantile<LeftRight>(with_threshold_probability)> (line 162) | struct as_feature<tag::weighted_pot_quantile<LeftRight>(with_thresho...
      type feature_of<tag::pot_quantile<LeftRight> > (line 171) | struct feature_of<tag::pot_quantile<LeftRight> >
      type feature_of<tag::pot_quantile_prob<LeftRight> > (line 177) | struct feature_of<tag::pot_quantile_prob<LeftRight> >
      type as_weighted_feature<tag::pot_quantile<LeftRight> > (line 185) | struct as_weighted_feature<tag::pot_quantile<LeftRight> >
      type feature_of<tag::weighted_pot_quantile<LeftRight> > (line 191) | struct feature_of<tag::weighted_pot_quantile<LeftRight> >
      type as_weighted_feature<tag::pot_quantile_prob<LeftRight> > (line 199) | struct as_weighted_feature<tag::pot_quantile_prob<LeftRight> >
      type feature_of<tag::weighted_pot_quantile_prob<LeftRight> > (line 205) | struct feature_of<tag::weighted_pot_quantile_prob<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/pot_tail_mean.hpp
  type boost (line 31) | namespace boost { namespace accumulators
    type accumulators (line 31) | namespace accumulators
      type impl (line 34) | namespace impl
        type pot_tail_mean_impl (line 52) | struct pot_tail_mean_impl
          method pot_tail_mean_impl (line 59) | pot_tail_mean_impl(dont_care)
          method result_type (line 65) | result_type result(Args const &args) const
          method serialize (line 96) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 110) | namespace tag
        type pot_tail_mean (line 113) | struct pot_tail_mean
        type pot_tail_mean_prob (line 121) | struct pot_tail_mean_prob
        type weighted_pot_tail_mean (line 129) | struct weighted_pot_tail_mean
        type weighted_pot_tail_mean_prob (line 137) | struct weighted_pot_tail_mean_prob
      type as_feature<tag::pot_tail_mean<LeftRight>(with_threshold_value)> (line 148) | struct as_feature<tag::pot_tail_mean<LeftRight>(with_threshold_value)>
      type as_feature<tag::pot_tail_mean<LeftRight>(with_threshold_probability)> (line 155) | struct as_feature<tag::pot_tail_mean<LeftRight>(with_threshold_proba...
      type as_feature<tag::weighted_pot_tail_mean<LeftRight>(with_threshold_value)> (line 162) | struct as_feature<tag::weighted_pot_tail_mean<LeftRight>(with_thresh...
      type as_feature<tag::weighted_pot_tail_mean<LeftRight>(with_threshold_probability)> (line 169) | struct as_feature<tag::weighted_pot_tail_mean<LeftRight>(with_thresh...
      type feature_of<tag::pot_tail_mean<LeftRight> > (line 178) | struct feature_of<tag::pot_tail_mean<LeftRight> >
      type feature_of<tag::pot_tail_mean_prob<LeftRight> > (line 184) | struct feature_of<tag::pot_tail_mean_prob<LeftRight> >
      type as_weighted_feature<tag::pot_tail_mean<LeftRight> > (line 192) | struct as_weighted_feature<tag::pot_tail_mean<LeftRight> >
      type feature_of<tag::weighted_pot_tail_mean<LeftRight> > (line 198) | struct feature_of<tag::weighted_pot_tail_mean<LeftRight> >
      type as_weighted_feature<tag::pot_tail_mean_prob<LeftRight> > (line 206) | struct as_weighted_feature<tag::pot_tail_mean_prob<LeftRight> >
      type feature_of<tag::weighted_pot_tail_mean_prob<LeftRight> > (line 212) | struct feature_of<tag::weighted_pot_tail_mean_prob<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/rolling_count.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type impl (line 23) | namespace impl
        type rolling_count_impl (line 30) | struct rolling_count_impl
          method rolling_count_impl (line 35) | rolling_count_impl(dont_care)
          method result_type (line 39) | result_type result(Args const &args) const
          method serialize (line 46) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 54) | namespace tag
        type rolling_count (line 56) | struct rolling_count
      type extract (line 73) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/rolling_mean.hpp
  type boost (line 22) | namespace boost { namespace accumulators
    type accumulators (line 22) | namespace accumulators
      type impl (line 24) | namespace impl
        type lazy_rolling_mean_impl (line 31) | struct lazy_rolling_mean_impl
          method lazy_rolling_mean_impl (line 37) | lazy_rolling_mean_impl(dont_care)
          method result_type (line 42) | result_type result(Args const &args) const
          method serialize (line 49) | void serialize(Archive & ar, const unsigned int file_version) {}
        type immediate_rolling_mean_impl (line 57) | struct immediate_rolling_mean_impl
          method immediate_rolling_mean_impl (line 64) | immediate_rolling_mean_impl(Args const &args)
          method result_type (line 90) | result_type result(Args const &) const
          method serialize (line 97) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 113) | namespace tag
        type lazy_rolling_mean (line 115) | struct lazy_rolling_mean
        type immediate_rolling_mean (line 128) | struct immediate_rolling_mean
        type rolling_mean (line 142) | struct rolling_mean : immediate_rolling_mean {}
      type extract (line 150) | namespace extract
      type as_feature<tag::rolling_mean(lazy)> (line 167) | struct as_feature<tag::rolling_mean(lazy)>
      type as_feature<tag::rolling_mean(immediate)> (line 174) | struct as_feature<tag::rolling_mean(immediate)>
      type feature_of<tag::immediate_rolling_mean> (line 182) | struct feature_of<tag::immediate_rolling_mean>
      type feature_of<tag::lazy_rolling_mean> (line 190) | struct feature_of<tag::lazy_rolling_mean>

FILE: deps/boost/include/boost/accumulators/statistics/rolling_moment.hpp
  type accumulators (line 25) | namespace accumulators
    type impl (line 27) | namespace impl
      type rolling_moment_impl (line 32) | struct rolling_moment_impl
        method rolling_moment_impl (line 40) | rolling_moment_impl(Args const &args)
        method result_type (line 56) | result_type result(Args const &args) const
        method serialize (line 63) | void serialize(Archive & ar, const unsigned int file_version)
    type tag (line 76) | namespace tag
      type rolling_moment (line 79) | struct rolling_moment
    type extract (line 96) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/rolling_sum.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type impl (line 22) | namespace impl
        type rolling_sum_impl (line 28) | struct rolling_sum_impl
          method rolling_sum_impl (line 34) | rolling_sum_impl(Args const &args)
          method result_type (line 49) | result_type result(Args const & /*args*/) const
          method serialize (line 56) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 69) | namespace tag
        type rolling_sum (line 71) | struct rolling_sum
      type extract (line 88) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/rolling_variance.hpp
  type boost (line 28) | namespace boost { namespace accumulators
    type accumulators (line 28) | namespace accumulators
      type impl (line 30) | namespace impl
        type lazy_rolling_variance_impl (line 49) | struct lazy_rolling_variance_impl
          method lazy_rolling_variance_impl (line 55) | lazy_rolling_variance_impl(dont_care) {}
          method result_type (line 58) | result_type result(Args const &args) const
          method serialize (line 68) | void serialize(Archive & ar, const unsigned int file_version) {}
        type immediate_rolling_variance_impl (line 108) | struct immediate_rolling_variance_impl
          method immediate_rolling_variance_impl (line 115) | immediate_rolling_variance_impl(Args const &args)
          method result_type (line 139) | result_type result(Args const &args) const
          method serialize (line 148) | void serialize(Archive & ar, const unsigned int file_version)
          method prevent_underflow (line 160) | void prevent_underflow(T &non_negative_number,typename boost::en...
          method prevent_underflow (line 165) | void prevent_underflow(T &non_arithmetic_quantity,typename boost...
      type tag (line 176) | namespace tag
        type lazy_rolling_variance (line 178) | struct lazy_rolling_variance
        type immediate_rolling_variance (line 191) | struct immediate_rolling_variance
        type rolling_variance (line 205) | struct rolling_variance : immediate_rolling_variance {}
      type extract (line 213) | namespace extract
      type as_feature<tag::rolling_variance(lazy)> (line 230) | struct as_feature<tag::rolling_variance(lazy)>
      type as_feature<tag::rolling_variance(immediate)> (line 237) | struct as_feature<tag::rolling_variance(immediate)>
      type feature_of<tag::lazy_rolling_variance> (line 245) | struct feature_of<tag::lazy_rolling_variance>
      type feature_of<tag::immediate_rolling_variance> (line 253) | struct feature_of<tag::immediate_rolling_variance>

FILE: deps/boost/include/boost/accumulators/statistics/rolling_window.hpp
  type boost (line 26) | namespace boost { namespace serialization {
    type serialization (line 26) | namespace serialization {
      function save (line 30) | void save(Archive& ar, const circular_buffer<T>& b, const unsigned i...
      function load (line 42) | void load(Archive& ar, circular_buffer<T>& b, const unsigned int /* ...
      function serialize (line 57) | inline void serialize(Archive & ar, circular_buffer<T>& b, const uns...
    type accumulators (line 64) | namespace accumulators
      type impl (line 73) | namespace impl
        type rolling_window_plus1_impl (line 80) | struct rolling_window_plus1_impl
          method rolling_window_plus1_impl (line 87) | rolling_window_plus1_impl(Args const & args)
          method rolling_window_plus1_impl (line 94) | rolling_window_plus1_impl(rolling_window_plus1_impl const &that)
          method rolling_window_plus1_impl (line 100) | rolling_window_plus1_impl &operator =(rolling_window_plus1_impl ...
          method full (line 113) | bool full() const
          method result_type (line 120) | result_type result(dont_care) const
          method serialize (line 126) | void serialize(Archive & ar, const unsigned int version)
        function is_rolling_window_plus1_full (line 136) | bool is_rolling_window_plus1_full(Args const &args)
        type rolling_window_impl (line 146) | struct rolling_window_impl
          method rolling_window_impl (line 152) | rolling_window_impl(dont_care)
          method result_type (line 156) | result_type result(Args const &args) const
          method serialize (line 163) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 172) | namespace tag
        type rolling_window_plus1 (line 174) | struct rolling_window_plus1
        type rolling_window (line 188) | struct rolling_window
      type extract (line 207) | namespace extract
  type boost (line 64) | namespace boost { namespace accumulators
    type serialization (line 26) | namespace serialization {
      function save (line 30) | void save(Archive& ar, const circular_buffer<T>& b, const unsigned i...
      function load (line 42) | void load(Archive& ar, circular_buffer<T>& b, const unsigned int /* ...
      function serialize (line 57) | inline void serialize(Archive & ar, circular_buffer<T>& b, const uns...
    type accumulators (line 64) | namespace accumulators
      type impl (line 73) | namespace impl
        type rolling_window_plus1_impl (line 80) | struct rolling_window_plus1_impl
          method rolling_window_plus1_impl (line 87) | rolling_window_plus1_impl(Args const & args)
          method rolling_window_plus1_impl (line 94) | rolling_window_plus1_impl(rolling_window_plus1_impl const &that)
          method rolling_window_plus1_impl (line 100) | rolling_window_plus1_impl &operator =(rolling_window_plus1_impl ...
          method full (line 113) | bool full() const
          method result_type (line 120) | result_type result(dont_care) const
          method serialize (line 126) | void serialize(Archive & ar, const unsigned int version)
        function is_rolling_window_plus1_full (line 136) | bool is_rolling_window_plus1_full(Args const &args)
        type rolling_window_impl (line 146) | struct rolling_window_impl
          method rolling_window_impl (line 152) | rolling_window_impl(dont_care)
          method result_type (line 156) | result_type result(Args const &args) const
          method serialize (line 163) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 172) | namespace tag
        type rolling_window_plus1 (line 174) | struct rolling_window_plus1
        type rolling_window (line 188) | struct rolling_window
      type extract (line 207) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/skewness.hpp
  type boost (line 23) | namespace boost { namespace accumulators
    type accumulators (line 23) | namespace accumulators
      type impl (line 26) | namespace impl
        type skewness_impl (line 47) | struct skewness_impl
          method skewness_impl (line 53) | skewness_impl(dont_care)
          method result_type (line 58) | result_type result(Args const &args) const
          method serialize (line 71) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 79) | namespace tag
        type skewness (line 81) | struct skewness
      type extract (line 93) | namespace extract
      type as_weighted_feature<tag::skewness> (line 105) | struct as_weighted_feature<tag::skewness>
      type feature_of<tag::weighted_skewness> (line 111) | struct feature_of<tag::weighted_skewness>

FILE: deps/boost/include/boost/accumulators/statistics/stats.hpp
  type boost (line 16) | namespace boost { namespace accumulators
    type accumulators (line 16) | namespace accumulators
      type stats (line 22) | struct stats

FILE: deps/boost/include/boost/accumulators/statistics/sum.hpp
  type boost (line 22) | namespace boost { namespace accumulators
    type accumulators (line 22) | namespace accumulators
      type impl (line 25) | namespace impl
        type sum_impl (line 30) | struct sum_impl
          method sum_impl (line 37) | sum_impl(Args const &args)
          method result_type (line 49) | result_type result(dont_care) const
          method serialize (line 55) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 71) | namespace tag
        type sum (line 73) | struct sum
        type sum_of_weights (line 81) | struct sum_of_weights
        type sum_of_variates (line 91) | struct sum_of_variates
        type abstract_sum_of_variates (line 99) | struct abstract_sum_of_variates
      type extract (line 110) | namespace extract
      type as_weighted_feature<tag::sum> (line 128) | struct as_weighted_feature<tag::sum>
      type feature_of<tag::weighted_sum> (line 134) | struct feature_of<tag::weighted_sum>
      type feature_of<tag::sum_of_variates<VariateType, VariateTag> > (line 139) | struct feature_of<tag::sum_of_variates<VariateType, VariateTag> >

FILE: deps/boost/include/boost/accumulators/statistics/sum_kahan.hpp
  type boost (line 18) | namespace boost { namespace accumulators
    type accumulators (line 18) | namespace accumulators
      type impl (line 21) | namespace impl
        type sum_kahan_impl (line 30) | struct sum_kahan_impl
          method sum_kahan_impl (line 45) | sum_kahan_impl(Args const & args)
          method result_type (line 64) | result_type result(dont_care) const
          method serialize (line 71) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 93) | namespace tag
        type sum_kahan (line 96) | struct sum_kahan
        type sum_of_weights_kahan (line 104) | struct sum_of_weights_kahan
        type sum_of_variates_kahan (line 114) | struct sum_of_variates_kahan
      type extract (line 129) | namespace extract
      type as_feature<tag::sum(kahan)> (line 146) | struct as_feature<tag::sum(kahan)>
      type as_feature<tag::sum_of_weights(kahan)> (line 153) | struct as_feature<tag::sum_of_weights(kahan)>
      type as_weighted_feature<tag::sum_kahan> (line 161) | struct as_weighted_feature<tag::sum_kahan>
      type feature_of<tag::weighted_sum_kahan> (line 167) | struct feature_of<tag::weighted_sum_kahan>
      type feature_of<tag::sum_kahan> (line 174) | struct feature_of<tag::sum_kahan>
      type feature_of<tag::sum_of_weights_kahan> (line 182) | struct feature_of<tag::sum_of_weights_kahan>
      type feature_of<tag::sum_of_variates_kahan<VariateType, VariateTag> > (line 188) | struct feature_of<tag::sum_of_variates_kahan<VariateType, VariateTag> >

FILE: deps/boost/include/boost/accumulators/statistics/tail.hpp
  type boost (line 29) | namespace boost { namespace accumulators
    type accumulators (line 29) | namespace accumulators
      type detail (line 39) | namespace detail
        type tail_range (line 46) | struct tail_range
        function make_tail_range (line 58) | typename tail_range<ElementIterator, IndexIterator>::type
        type stat_assign_visitor (line 76) | struct stat_assign_visitor
          method stat_assign_visitor (line 78) | stat_assign_visitor(Args const &a, std::size_t i)
        function stat_assign (line 101) | inline stat_assign_visitor<Args> const stat_assign(Args const &arg...
        type is_tail_variate_feature (line 111) | struct is_tail_variate_feature
        type is_tail_variate_feature<tag::tail_variate<VariateType, VariateTag, LeftRight>, LeftRight> (line 119) | struct is_tail_variate_feature<tag::tail_variate<VariateType, Vari...
        type is_tail_variate_feature<tag::tail_weights<LeftRight>, LeftRight> (line 127) | struct is_tail_variate_feature<tag::tail_weights<LeftRight>, LeftR...
      type impl (line 134) | namespace impl
        type tail_impl (line 139) | struct tail_impl
          method tail_impl (line 162) | tail_impl(Args const &args)
          method tail_impl (line 170) | tail_impl(tail_impl const &that)
          method result_type (line 205) | result_type result(dont_care) const
          type is_tail_variate (line 226) | struct is_tail_variate
            type apply (line 229) | struct apply
          method assign (line 238) | void assign(Args const &args, std::size_t index)
          type indirect_cmp (line 250) | struct indirect_cmp
            method indirect_cmp (line 256) | indirect_cmp(std::vector<Sample> const &s)
          method serialize (line 274) | void serialize(Archive & ar, const unsigned int file_version)
      type tail_cache_size_named_arg (line 292) | struct tail_cache_size_named_arg
      type tail_cache_size_named_arg<left> (line 296) | struct tail_cache_size_named_arg<left>
      type tail_cache_size_named_arg<right> (line 301) | struct tail_cache_size_named_arg<right>
      type tag (line 309) | namespace tag
        type tail (line 312) | struct tail
        type abstract_tail (line 326) | struct abstract_tail
      type extract (line 335) | namespace extract
      type feature_of<tag::tail<LeftRight> > (line 345) | struct feature_of<tag::tail<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/tail_mean.hpp
  type boost (line 36) | namespace boost { namespace accumulators
    type accumulators (line 36) | namespace accumulators
      type impl (line 39) | namespace impl
        type coherent_tail_mean_impl (line 62) | struct coherent_tail_mean_impl
          method coherent_tail_mean_impl (line 69) | coherent_tail_mean_impl(dont_care) {}
          method result_type (line 72) | result_type result(Args const &args) const
          method serialize (line 94) | void serialize(Archive & ar, const unsigned int file_version) {}
        type non_coherent_tail_mean_impl (line 121) | struct non_coherent_tail_mean_impl
          method non_coherent_tail_mean_impl (line 128) | non_coherent_tail_mean_impl(dont_care) {}
          method result_type (line 131) | result_type result(Args const &args) const
          method serialize (line 169) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 179) | namespace tag
        type coherent_tail_mean (line 182) | struct coherent_tail_mean
        type non_coherent_tail_mean (line 189) | struct non_coherent_tail_mean
        type abstract_non_coherent_tail_mean (line 195) | struct abstract_non_coherent_tail_mean
      type extract (line 205) | namespace extract
      type feature_of<tag::coherent_tail_mean<LeftRight> > (line 220) | struct feature_of<tag::coherent_tail_mean<LeftRight> >
      type feature_of<tag::non_coherent_tail_mean<LeftRight> > (line 226) | struct feature_of<tag::non_coherent_tail_mean<LeftRight> >
      type as_weighted_feature<tag::non_coherent_tail_mean<LeftRight> > (line 234) | struct as_weighted_feature<tag::non_coherent_tail_mean<LeftRight> >
      type feature_of<tag::non_coherent_weighted_tail_mean<LeftRight> > (line 240) | struct feature_of<tag::non_coherent_weighted_tail_mean<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/tail_quantile.hpp
  type boost (line 37) | namespace boost { namespace accumulators
    type accumulators (line 37) | namespace accumulators
      type impl (line 40) | namespace impl
        type tail_quantile_impl (line 60) | struct tail_quantile_impl
          method tail_quantile_impl (line 66) | tail_quantile_impl(dont_care) {}
          method result_type (line 69) | result_type result(Args const &args) const
          method serialize (line 104) | void serialize(Archive & ar, const unsigned int file_version) {}
      type tag (line 111) | namespace tag
        type tail_quantile (line 114) | struct tail_quantile
      type extract (line 126) | namespace extract
      type feature_of<tag::tail_quantile<LeftRight> > (line 138) | struct feature_of<tag::tail_quantile<LeftRight> >
      type as_weighted_feature<tag::tail_quantile<LeftRight> > (line 146) | struct as_weighted_feature<tag::tail_quantile<LeftRight> >
      type feature_of<tag::weighted_tail_quantile<LeftRight> > (line 152) | struct feature_of<tag::weighted_tail_quantile<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/tail_variate.hpp
  type boost (line 23) | namespace boost { namespace accumulators
    type accumulators (line 23) | namespace accumulators
      type impl (line 26) | namespace impl
        type tail_variate_impl (line 31) | struct tail_variate_impl
          method tail_variate_impl (line 43) | tail_variate_impl(Args const &args)
          method assign (line 49) | void assign(Args const &args, std::size_t index)
          method result_type (line 55) | result_type result(Args const &args) const
          method result_type (line 64) | result_type do_result(TailRng const &rng) const
          method serialize (line 75) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 89) | namespace tag
        type tail_variate (line 92) | struct tail_variate
        type abstract_tail_variate (line 100) | struct abstract_tail_variate
        type tail_weights (line 106) | struct tail_weights
        type abstract_tail_weights (line 114) | struct abstract_tail_weights
      type extract (line 124) | namespace extract
      type feature_of<tag::tail_variate<VariateType, VariateTag, LeftRight> > (line 137) | struct feature_of<tag::tail_variate<VariateType, VariateTag, LeftRig...
      type feature_of<tag::tail_weights<LeftRight> > (line 143) | struct feature_of<tag::tail_weights<LeftRight> >

FILE: deps/boost/include/boost/accumulators/statistics/tail_variate_means.hpp
  type boost (line 37) | namespace boost { namespace accumulators
    type accumulators (line 37) | namespace accumulators
      type impl (line 40) | namespace impl
        type tail_variate_means_impl (line 80) | struct tail_variate_means_impl
          method tail_variate_means_impl (line 88) | tail_variate_means_impl(dont_care) {}
          method result_type (line 91) | result_type result(Args const &args) const
          method serialize (line 151) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 168) | namespace tag
        type absolute_tail_variate_means (line 171) | struct absolute_tail_variate_means
        type relative_tail_variate_means (line 177) | struct relative_tail_variate_means
        type abstract_absolute_tail_variate_means (line 182) | struct abstract_absolute_tail_variate_means
        type abstract_relative_tail_variate_means (line 186) | struct abstract_relative_tail_variate_means
      type extract (line 196) | namespace extract
      type as_feature<tag::tail_variate_means<LeftRight, VariateType, VariateTag>(absolute)> (line 210) | struct as_feature<tag::tail_variate_means<LeftRight, VariateType, Va...
      type as_feature<tag::tail_variate_means<LeftRight, VariateType, VariateTag>(relative)> (line 217) | struct as_feature<tag::tail_variate_means<LeftRight, VariateType, Va...
      type feature_of<tag::absolute_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 224) | struct feature_of<tag::absolute_tail_variate_means<LeftRight, Variat...
      type feature_of<tag::relative_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 231) | struct feature_of<tag::relative_tail_variate_means<LeftRight, Variat...
      type as_weighted_feature<tag::absolute_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 239) | struct as_weighted_feature<tag::absolute_tail_variate_means<LeftRigh...
      type feature_of<tag::absolute_weighted_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 245) | struct feature_of<tag::absolute_weighted_tail_variate_means<LeftRigh...
      type as_weighted_feature<tag::relative_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 253) | struct as_weighted_feature<tag::relative_tail_variate_means<LeftRigh...
      type feature_of<tag::relative_weighted_tail_variate_means<LeftRight, VariateType, VariateTag> > (line 259) | struct feature_of<tag::relative_weighted_tail_variate_means<LeftRigh...

FILE: deps/boost/include/boost/accumulators/statistics/times2_iterator.hpp
  type boost (line 20) | namespace boost { namespace accumulators
    type accumulators (line 20) | namespace accumulators
      type detail (line 23) | namespace detail
        function times2_iterator (line 34) | inline times2_iterator make_times2_iterator(std::size_t i)
        type lvalue_index_iterator (line 49) | struct lvalue_index_iterator
          method lvalue_index_iterator (line 52) | lvalue_index_iterator()
          method lvalue_index_iterator (line 56) | lvalue_index_iterator(Base base)

FILE: deps/boost/include/boost/accumulators/statistics/variance.hpp
  type boost (line 23) | namespace boost { namespace accumulators
    type accumulators (line 23) | namespace accumulators
      type impl (line 26) | namespace impl
        type lazy_variance_impl (line 41) | struct lazy_variance_impl
          method lazy_variance_impl (line 47) | lazy_variance_impl(dont_care) {}
          method result_type (line 50) | result_type result(Args const &args) const
          method serialize (line 59) | void serialize(Archive & ar, const unsigned int file_version) {}
        type variance_impl (line 88) | struct variance_impl
          method variance_impl (line 95) | variance_impl(Args const &args)
          method result_type (line 115) | result_type result(dont_care) const
          method serialize (line 122) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 137) | namespace tag
        type lazy_variance (line 139) | struct lazy_variance
        type variance (line 147) | struct variance
      type extract (line 160) | namespace extract
      type as_feature<tag::variance(lazy)> (line 174) | struct as_feature<tag::variance(lazy)>
      type as_feature<tag::variance(immediate)> (line 181) | struct as_feature<tag::variance(immediate)>
      type feature_of<tag::lazy_variance> (line 189) | struct feature_of<tag::lazy_variance>
      type as_weighted_feature<tag::variance> (line 197) | struct as_weighted_feature<tag::variance>
      type feature_of<tag::weighted_variance> (line 205) | struct feature_of<tag::weighted_variance>
      type as_weighted_feature<tag::lazy_variance> (line 213) | struct as_weighted_feature<tag::lazy_variance>
      type feature_of<tag::lazy_weighted_variance> (line 221) | struct feature_of<tag::lazy_weighted_variance>

FILE: deps/boost/include/boost/accumulators/statistics/variates/covariate.hpp
  type boost (line 14) | namespace boost { namespace accumulators
    type accumulators (line 14) | namespace accumulators

FILE: deps/boost/include/boost/accumulators/statistics/weighted_covariance.hpp
  type boost (line 34) | namespace boost { namespace accumulators
    type accumulators (line 34) | namespace accumulators
      type impl (line 37) | namespace impl
        type weighted_covariance_impl (line 57) | struct weighted_covariance_impl
          method weighted_covariance_impl (line 66) | weighted_covariance_impl(Args const &args)
          method result_type (line 95) | result_type result(dont_care) const
          method serialize (line 102) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 116) | namespace tag
        type weighted_covariance (line 119) | struct weighted_covariance
      type extract (line 129) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_density.hpp
  type boost (line 29) | namespace boost { namespace accumulators
    type accumulators (line 29) | namespace accumulators
      type impl (line 32) | namespace impl
        type weighted_density_impl (line 52) | struct weighted_density_impl
          method weighted_density_impl (line 62) | weighted_density_impl(Args const &args)
          method result_type (line 156) | result_type result(Args const &args) const
          method serialize (line 179) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 205) | namespace tag
        type weighted_density (line 207) | struct weighted_density
      type extract (line 226) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_extended_p_square.hpp
  type boost (line 33) | namespace boost { namespace accumulators
    type accumulators (line 33) | namespace accumulators
      type impl (line 36) | namespace impl
        type weighted_extended_p_square_impl (line 67) | struct weighted_extended_p_square_impl
          method weighted_extended_p_square_impl (line 84) | weighted_extended_p_square_impl(Args const &args)
          method result_type (line 243) | result_type result(dont_care) const
          method serialize (line 258) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 278) | namespace tag
        type weighted_extended_p_square (line 280) | struct weighted_extended_p_square
      type extract (line 291) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_kurtosis.hpp
  type boost (line 22) | namespace boost { namespace accumulators
    type accumulators (line 22) | namespace accumulators
      type impl (line 25) | namespace impl
        type weighted_kurtosis_impl (line 50) | struct weighted_kurtosis_impl
          method weighted_kurtosis_impl (line 57) | weighted_kurtosis_impl(dont_care)
          method result_type (line 62) | result_type result(Args const &args) const
      type tag (line 80) | namespace tag
        type weighted_kurtosis (line 82) | struct weighted_kurtosis
      type extract (line 94) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_mean.hpp
  type impl (line 28) | namespace impl
    type weighted_mean_impl (line 34) | struct weighted_mean_impl
      method weighted_mean_impl (line 41) | weighted_mean_impl(dont_care) {}
      method result_type (line 44) | result_type result(Args const &args) const
    type immediate_weighted_mean_impl (line 64) | struct immediate_weighted_mean_impl
      method immediate_weighted_mean_impl (line 72) | immediate_weighted_mean_impl(Args const &args)
      method result_type (line 95) | result_type result(dont_care) const
      method serialize (line 102) | void serialize(Archive & ar, const unsigned int file_version)
  type tag (line 117) | namespace tag
    type weighted_mean (line 119) | struct weighted_mean
    type immediate_weighted_mean (line 126) | struct immediate_weighted_mean
    type weighted_mean_of_variates (line 134) | struct weighted_mean_of_variates
    type immediate_weighted_mean_of_variates (line 142) | struct immediate_weighted_mean_of_variates
  type as_feature<tag::weighted_mean(immediate)> (line 175) | struct as_feature<tag::weighted_mean(immediate)>

FILE: deps/boost/include/boost/accumulators/statistics/weighted_median.hpp
  type boost (line 25) | namespace boost { namespace accumulators
    type accumulators (line 25) | namespace accumulators
      type impl (line 28) | namespace impl
        type weighted_median_impl (line 39) | struct weighted_median_impl
          method weighted_median_impl (line 45) | weighted_median_impl(dont_care) {}
          method result_type (line 48) | result_type result(Args const &args) const
        type with_density_weighted_median_impl (line 65) | struct with_density_weighted_median_impl
          method with_density_weighted_median_impl (line 75) | with_density_weighted_median_impl(Args const &args)
          method result_type (line 87) | result_type result(Args const &args) const
          method serialize (line 111) | void serialize(Archive & ar, const unsigned int file_version)
        type with_p_square_cumulative_distribution_weighted_median_impl (line 135) | struct with_p_square_cumulative_distribution_weighted_median_impl
          method with_p_square_cumulative_distribution_weighted_median_impl (line 145) | with_p_square_cumulative_distribution_weighted_median_impl(dont_...
          method result_type (line 156) | result_type result(Args const &args) const
          method serialize (line 177) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 195) | namespace tag
        type weighted_median (line 197) | struct weighted_median
        type with_density_weighted_median (line 204) | struct with_density_weighted_median
        type with_p_square_cumulative_distribution_weighted_median (line 211) | struct with_p_square_cumulative_distribution_weighted_median
      type extract (line 224) | namespace extract
      type as_feature<tag::weighted_median(with_p_square_quantile)> (line 234) | struct as_feature<tag::weighted_median(with_p_square_quantile)>
      type as_feature<tag::weighted_median(with_density)> (line 241) | struct as_feature<tag::weighted_median(with_density)>
      type as_feature<tag::weighted_median(with_p_square_cumulative_distribution)> (line 248) | struct as_feature<tag::weighted_median(with_p_square_cumulative_dist...

FILE: deps/boost/include/boost/accumulators/statistics/weighted_moment.hpp
  type accumulators (line 29) | namespace accumulators
    type impl (line 32) | namespace impl
      type weighted_moment_impl (line 37) | struct weighted_moment_impl
        method weighted_moment_impl (line 46) | weighted_moment_impl(Args const &args)
        method result_type (line 58) | result_type result(Args const &args) const
        method serialize (line 65) | void serialize(Archive & ar, const unsigned int file_version)
    type tag (line 79) | namespace tag
      type weighted_moment (line 82) | struct weighted_moment
    type extract (line 94) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp
  type boost (line 25) | namespace boost { namespace accumulators
    type accumulators (line 25) | namespace accumulators
      type impl (line 28) | namespace impl
        type weighted_p_square_cumulative_distribution_impl (line 52) | struct weighted_p_square_cumulative_distribution_impl
          method weighted_p_square_cumulative_distribution_impl (line 63) | weighted_p_square_cumulative_distribution_impl(Args const &args)
          method result_type (line 205) | result_type result(Args const &args) const
          method serialize (line 227) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 251) | namespace tag
        type weighted_p_square_cumulative_distribution (line 253) | struct weighted_p_square_cumulative_distribution
      type extract (line 264) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_p_square_quantile.hpp
  type boost (line 26) | namespace boost { namespace accumulators
    type accumulators (line 26) | namespace accumulators
      type impl (line 29) | namespace impl {
        type weighted_p_square_quantile_impl (line 54) | struct weighted_p_square_quantile_impl
          method weighted_p_square_quantile_impl (line 64) | weighted_p_square_quantile_impl(Args const &args)
          method result_type (line 206) | result_type result(dont_care) const
          method serialize (line 214) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 234) | namespace tag
        type weighted_p_square_quantile (line 236) | struct weighted_p_square_quantile
        type weighted_p_square_quantile_for_median (line 241) | struct weighted_p_square_quantile_for_median
      type extract (line 252) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
  type boost (line 37) | namespace boost { namespace accumulators
    type accumulators (line 37) | namespace accumulators
      type impl (line 40) | namespace impl
        type weighted_peaks_over_threshold_impl (line 55) | struct weighted_peaks_over_threshold_impl
          method weighted_peaks_over_threshold_impl (line 64) | weighted_peaks_over_threshold_impl(Args const &args)
          method result_type (line 89) | result_type result(Args const &args) const
          method serialize (line 115) | void serialize(Archive & ar, const unsigned int file_version)
        type weighted_peaks_over_threshold_prob_impl (line 147) | struct weighted_peaks_over_threshold_prob_impl
          method weighted_peaks_over_threshold_prob_impl (line 156) | weighted_peaks_over_threshold_prob_impl(Args const &args)
          method result_type (line 172) | result_type result(Args const &args) const
      type tag (line 249) | namespace tag
        type weighted_peaks_over_threshold (line 252) | struct weighted_peaks_over_threshold
        type weighted_peaks_over_threshold_prob (line 261) | struct weighted_peaks_over_threshold_prob
      type extract (line 273) | namespace extract
      type as_feature<tag::weighted_peaks_over_threshold<LeftRight>(with_threshold_value)> (line 284) | struct as_feature<tag::weighted_peaks_over_threshold<LeftRight>(with...
      type as_feature<tag::weighted_peaks_over_threshold<LeftRight>(with_threshold_probability)> (line 291) | struct as_feature<tag::weighted_peaks_over_threshold<LeftRight>(with...

FILE: deps/boost/include/boost/accumulators/statistics/weighted_skewness.hpp
  type boost (line 22) | namespace boost { namespace accumulators
    type accumulators (line 22) | namespace accumulators
      type impl (line 25) | namespace impl
        type weighted_skewness_impl (line 49) | struct weighted_skewness_impl
          method weighted_skewness_impl (line 56) | weighted_skewness_impl(dont_care) {}
          method result_type (line 59) | result_type result(Args const &args) const
      type tag (line 76) | namespace tag
        type weighted_skewness (line 78) | struct weighted_skewness
      type extract (line 90) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_sum.hpp
  type boost (line 21) | namespace boost { namespace accumulators
    type accumulators (line 21) | namespace accumulators
      type impl (line 24) | namespace impl
        type weighted_sum_impl (line 29) | struct weighted_sum_impl
          method weighted_sum_impl (line 38) | weighted_sum_impl(Args const &args)
          method result_type (line 53) | result_type result(dont_care) const
          method serialize (line 60) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 75) | namespace tag
        type weighted_sum (line 77) | struct weighted_sum
        type weighted_sum_of_variates (line 86) | struct weighted_sum_of_variates
        type abstract_weighted_sum_of_variates (line 94) | struct abstract_weighted_sum_of_variates
      type extract (line 103) | namespace extract
      type feature_of<tag::weighted_sum_of_variates<VariateType, VariateTag> > (line 116) | struct feature_of<tag::weighted_sum_of_variates<VariateType, Variate...

FILE: deps/boost/include/boost/accumulators/statistics/weighted_sum_kahan.hpp
  type boost (line 23) | namespace boost { namespace accumulators
    type accumulators (line 23) | namespace accumulators
      type impl (line 26) | namespace impl
        type weighted_sum_kahan_impl (line 36) | struct weighted_sum_kahan_impl
          method weighted_sum_kahan_impl (line 45) | weighted_sum_kahan_impl(Args const &args)
          method result_type (line 66) | result_type result(dont_care) const
          method serialize (line 73) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 94) | namespace tag
        type weighted_sum_kahan (line 96) | struct weighted_sum_kahan
        type weighted_sum_of_variates_kahan (line 105) | struct weighted_sum_of_variates_kahan
      type extract (line 119) | namespace extract
      type as_feature<tag::weighted_sum(kahan)> (line 133) | struct as_feature<tag::weighted_sum(kahan)>
      type feature_of<tag::weighted_sum_of_variates_kahan<VariateType, VariateTag> > (line 139) | struct feature_of<tag::weighted_sum_of_variates_kahan<VariateType, V...

FILE: deps/boost/include/boost/accumulators/statistics/weighted_tail_mean.hpp
  type boost (line 35) | namespace boost { namespace accumulators
    type accumulators (line 35) | namespace accumulators
      type impl (line 38) | namespace impl
        type non_coherent_weighted_tail_mean_impl (line 81) | struct non_coherent_weighted_tail_mean_impl
          method non_coherent_weighted_tail_mean_impl (line 89) | non_coherent_weighted_tail_mean_impl(dont_care) {}
          method result_type (line 92) | result_type result(Args const &args) const
      type tag (line 141) | namespace tag
        type non_coherent_weighted_tail_mean (line 144) | struct non_coherent_weighted_tail_mean
      type extract (line 154) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_tail_quantile.hpp
  type boost (line 36) | namespace boost { namespace accumulators
    type accumulators (line 36) | namespace accumulators
      type impl (line 39) | namespace impl
        type weighted_tail_quantile_impl (line 66) | struct weighted_tail_quantile_impl
          method weighted_tail_quantile_impl (line 73) | weighted_tail_quantile_impl(dont_care) {}
          method result_type (line 76) | result_type result(Args const &args) const
      type tag (line 117) | namespace tag
        type weighted_tail_quantile (line 120) | struct weighted_tail_quantile
      type extract (line 131) | namespace extract

FILE: deps/boost/include/boost/accumulators/statistics/weighted_tail_variate_means.hpp
  type boost (line 37) | namespace boost
    type numeric (line 41) | namespace numeric { namespace functional
      type functional (line 41) | namespace functional
        type multiply_and_promote_to_double (line 46) | struct multiply_and_promote_to_double
    type accumulators (line 53) | namespace accumulators
      type impl (line 56) | namespace impl
        type weighted_tail_variate_means_impl (line 107) | struct weighted_tail_variate_means_impl
          method weighted_tail_variate_means_impl (line 115) | weighted_tail_variate_means_impl(dont_care) {}
          method result_type (line 118) | result_type result(Args const &args) const
          method serialize (line 184) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 201) | namespace tag
        type absolute_weighted_tail_variate_means (line 204) | struct absolute_weighted_tail_variate_means
        type relative_weighted_tail_variate_means (line 210) | struct relative_weighted_tail_variate_means
      type extract (line 221) | namespace extract
      type as_feature<tag::weighted_tail_variate_means<LeftRight, VariateType, VariateTag>(absolute)> (line 235) | struct as_feature<tag::weighted_tail_variate_means<LeftRight, Variat...
      type as_feature<tag::weighted_tail_variate_means<LeftRight, VariateType, VariateTag>(relative)> (line 242) | struct as_feature<tag::weighted_tail_variate_means<LeftRight, Variat...
  type boost (line 53) | namespace boost { namespace accumulators
    type numeric (line 41) | namespace numeric { namespace functional
      type functional (line 41) | namespace functional
        type multiply_and_promote_to_double (line 46) | struct multiply_and_promote_to_double
    type accumulators (line 53) | namespace accumulators
      type impl (line 56) | namespace impl
        type weighted_tail_variate_means_impl (line 107) | struct weighted_tail_variate_means_impl
          method weighted_tail_variate_means_impl (line 115) | weighted_tail_variate_means_impl(dont_care) {}
          method result_type (line 118) | result_type result(Args const &args) const
          method serialize (line 184) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 201) | namespace tag
        type absolute_weighted_tail_variate_means (line 204) | struct absolute_weighted_tail_variate_means
        type relative_weighted_tail_variate_means (line 210) | struct relative_weighted_tail_variate_means
      type extract (line 221) | namespace extract
      type as_feature<tag::weighted_tail_variate_means<LeftRight, VariateType, VariateTag>(absolute)> (line 235) | struct as_feature<tag::weighted_tail_variate_means<LeftRight, Variat...
      type as_feature<tag::weighted_tail_variate_means<LeftRight, VariateType, VariateTag>(relative)> (line 242) | struct as_feature<tag::weighted_tail_variate_means<LeftRight, Variat...

FILE: deps/boost/include/boost/accumulators/statistics/weighted_variance.hpp
  type boost (line 24) | namespace boost { namespace accumulators
    type accumulators (line 24) | namespace accumulators
      type impl (line 27) | namespace impl
        type lazy_weighted_variance_impl (line 39) | struct lazy_weighted_variance_impl
          method lazy_weighted_variance_impl (line 46) | lazy_weighted_variance_impl(dont_care) {}
          method result_type (line 49) | result_type result(Args const &args) const
        type weighted_variance_impl (line 71) | struct weighted_variance_impl
          method weighted_variance_impl (line 79) | weighted_variance_impl(Args const &args)
          method result_type (line 101) | result_type result(dont_care) const
          method serialize (line 108) | void serialize(Archive & ar, const unsigned int file_version)
      type tag (line 123) | namespace tag
        type lazy_weighted_variance (line 125) | struct lazy_weighted_variance
        type weighted_variance (line 133) | struct weighted_variance
      type extract (line 146) | namespace extract
      type as_feature<tag::weighted_variance(lazy)> (line 160) | struct as_feature<tag::weighted_variance(lazy)>
      type as_feature<tag::weighted_variance(immediate)> (line 167) | struct as_feature<tag::weighted_variance(immediate)>

FILE: deps/boost/include/boost/accumulators/statistics/with_error.hpp
  type boost (line 18) | namespace boost { namespace accumulators
    type accumulators (line 18) | namespace accumulators
      type detail (line 21) | namespace detail
        type error_of_tag (line 24) | struct error_of_tag
      type with_error (line 34) | struct with_error

FILE: deps/boost/include/boost/accumulators/statistics_fwd.hpp
  type boost (line 18) | namespace boost { namespace accumulators
    type accumulators (line 18) | namespace accumulators
      type tag (line 23) | namespace tag
        type quantile (line 25) | struct quantile
          class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____ (line 28) | class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____
        type tail_mean (line 43) | struct tail_mean
          class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____ (line 46) | class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____
        type weights (line 61) | struct weights
        type covariate1 (line 62) | struct covariate1
        type covariate2 (line 63) | struct covariate2
        type count (line 67) | struct count
        type covariance (line 69) | struct covariance
        type density (line 70) | struct density
        type error_of (line 72) | struct error_of
        type extended_p_square (line 73) | struct extended_p_square
        type extended_p_square_quantile (line 74) | struct extended_p_square_quantile
        type extended_p_square_quantile_quadratic (line 75) | struct extended_p_square_quantile_quadratic
        type kurtosis (line 76) | struct kurtosis
        type max (line 77) | struct max
        type mean (line 78) | struct mean
        type immediate_mean (line 79) | struct immediate_mean
        type mean_of_weights (line 80) | struct mean_of_weights
        type immediate_mean_of_weights (line 81) | struct immediate_mean_of_weights
        type mean_of_variates (line 83) | struct mean_of_variates
        type immediate_mean_of_variates (line 85) | struct immediate_mean_of_variates
        type median (line 86) | struct median
        type with_density_median (line 87) | struct with_density_median
        type with_p_square_cumulative_distribution_median (line 88) | struct with_p_square_cumulative_distribution_median
        type min (line 89) | struct min
        type moment (line 91) | struct moment
        type peaks_over_threshold (line 93) | struct peaks_over_threshold
        type peaks_over_threshold_prob (line 95) | struct peaks_over_threshold_prob
        type pot_tail_mean (line 97) | struct pot_tail_mean
        type pot_tail_mean_prob (line 99) | struct pot_tail_mean_prob
        type pot_quantile (line 101) | struct pot_quantile
        type pot_quantile_prob (line 103) | struct pot_quantile_prob
        type p_square_cumulative_distribution (line 104) | struct p_square_cumulative_distribution
        type p_square_quantile (line 105) | struct p_square_quantile
        type p_square_quantile_for_median (line 106) | struct p_square_quantile_for_median
        type skewness (line 107) | struct skewness
        type sum (line 108) | struct sum
        type sum_of_weights (line 109) | struct sum_of_weights
        type sum_of_variates (line 111) | struct sum_of_variates
        type sum_kahan (line 112) | struct sum_kahan
        type sum_of_weights_kahan (line 113) | struct sum_of_weights_kahan
        type sum_of_variates_kahan (line 115) | struct sum_of_variates_kahan
        type tail (line 117) | struct tail
        type coherent_tail_mean (line 119) | struct coherent_tail_mean
        type non_coherent_tail_mean (line 121) | struct non_coherent_tail_mean
        type tail_quantile (line 123) | struct tail_quantile
        type tail_variate (line 125) | struct tail_variate
        type tail_weights (line 127) | struct tail_weights
        type right_tail_variate (line 129) | struct right_tail_variate
        type left_tail_variate (line 131) | struct left_tail_variate
        type tail_variate_means (line 133) | struct tail_variate_means
        type absolute_tail_variate_means (line 135) | struct absolute_tail_variate_means
        type relative_tail_variate_means (line 137) | struct relative_tail_variate_means
        type lazy_variance (line 138) | struct lazy_variance
        type variance (line 139) | struct variance
        type weighted_covariance (line 141) | struct weighted_covariance
        type weighted_density (line 142) | struct weighted_density
        type weighted_kurtosis (line 143) | struct weighted_kurtosis
        type weighted_mean (line 144) | struct weighted_mean
        type immediate_weighted_mean (line 145) | struct immediate_weighted_mean
        type weighted_mean_of_variates (line 147) | struct weighted_mean_of_variates
        type immediate_weighted_mean_of_variates (line 149) | struct immediate_weighted_mean_of_variates
        type weighted_median (line 150) | struct weighted_median
        type with_density_weighted_median (line 151) | struct with_density_weighted_median
        type with_p_square_cumulative_distribution_weighted_median (line 152) | struct with_p_square_cumulative_distribution_weighted_median
        type weighted_extended_p_square (line 153) | struct weighted_extended_p_square
        type weighted_extended_p_square_quantile (line 154) | struct weighted_extended_p_square_quantile
        type weighted_extended_p_square_quantile_quadratic (line 155) | struct weighted_extended_p_square_quantile_quadratic
        type weighted_moment (line 157) | struct weighted_moment
        type weighted_peaks_over_threshold (line 159) | struct weighted_peaks_over_threshold
        type weighted_peaks_over_threshold_prob (line 161) | struct weighted_peaks_over_threshold_prob
        type weighted_pot_quantile (line 163) | struct weighted_pot_quantile
        type weighted_pot_quantile_prob (line 165) | struct weighted_pot_quantile_prob
        type weighted_pot_tail_mean (line 167) | struct weighted_pot_tail_mean
        type weighted_pot_tail_mean_prob (line 169) | struct weighted_pot_tail_mean_prob
        type weighted_p_square_cumulative_distribution (line 170) | struct weighted_p_square_cumulative_distribution
        type weighted_p_square_quantile (line 171) | struct weighted_p_square_quantile
        type weighted_p_square_quantile_for_median (line 172) | struct weighted_p_square_quantile_for_median
        type weighted_skewness (line 173) | struct weighted_skewness
        type weighted_tail_quantile (line 175) | struct weighted_tail_quantile
        type non_coherent_weighted_tail_mean (line 177) | struct non_coherent_weighted_tail_mean
        type weighted_tail_quantile (line 179) | struct weighted_tail_quantile
        type weighted_tail_variate_means (line 181) | struct weighted_tail_variate_means
        type absolute_weighted_tail_variate_means (line 183) | struct absolute_weighted_tail_variate_means
        type relative_weighted_tail_variate_means (line 185) | struct relative_weighted_tail_variate_means
        type lazy_weighted_variance (line 186) | struct lazy_weighted_variance
        type weighted_variance (line 187) | struct weighted_variance
        type weighted_sum (line 188) | struct weighted_sum
        type weighted_sum_of_variates (line 190) | struct weighted_sum_of_variates
        type rolling_window_plus1 (line 191) | struct rolling_window_plus1
        type rolling_window (line 192) | struct rolling_window
        type rolling_sum (line 193) | struct rolling_sum
        type rolling_count (line 194) | struct rolling_count
        type rolling_mean (line 195) | struct rolling_mean
      type extract (line 31) | namespace extract
      type tag (line 41) | namespace tag
        type quantile (line 25) | struct quantile
          class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____ (line 28) | class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____
        type tail_mean (line 43) | struct tail_mean
          class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____ (line 46) | class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____
        type weights (line 61) | struct weights
        type covariate1 (line 62) | struct covariate1
        type covariate2 (line 63) | struct covariate2
        type count (line 67) | struct count
        type covariance (line 69) | struct covariance
        type density (line 70) | struct density
        type error_of (line 72) | struct error_of
        type extended_p_square (line 73) | struct extended_p_square
        type extended_p_square_quantile (line 74) | struct extended_p_square_quantile
        type extended_p_square_quantile_quadratic (line 75) | struct extended_p_square_quantile_quadratic
        type kurtosis (line 76) | struct kurtosis
        type max (line 77) | struct max
        type mean (line 78) | struct mean
        type immediate_mean (line 79) | struct immediate_mean
        type mean_of_weights (line 80) | struct mean_of_weights
        type immediate_mean_of_weights (line 81) | struct immediate_mean_of_weights
        type mean_of_variates (line 83) | struct mean_of_variates
        type immediate_mean_of_variates (line 85) | struct immediate_mean_of_variates
        type median (line 86) | struct median
        type with_density_median (line 87) | struct with_density_median
        type with_p_square_cumulative_distribution_median (line 88) | struct with_p_square_cumulative_distribution_median
        type min (line 89) | struct min
        type moment (line 91) | struct moment
        type peaks_over_threshold (line 93) | struct peaks_over_threshold
        type peaks_over_threshold_prob (line 95) | struct peaks_over_threshold_prob
        type pot_tail_mean (line 97) | struct pot_tail_mean
        type pot_tail_mean_prob (line 99) | struct pot_tail_mean_prob
        type pot_quantile (line 101) | struct pot_quantile
        type pot_quantile_prob (line 103) | struct pot_quantile_prob
        type p_square_cumulative_distribution (line 104) | struct p_square_cumulative_distribution
        type p_square_quantile (line 105) | struct p_square_quantile
        type p_square_quantile_for_median (line 106) | struct p_square_quantile_for_median
        type skewness (line 107) | struct skewness
        type sum (line 108) | struct sum
        type sum_of_weights (line 109) | struct sum_of_weights
        type sum_of_variates (line 111) | struct sum_of_variates
        type sum_kahan (line 112) | struct sum_kahan
        type sum_of_weights_kahan (line 113) | struct sum_of_weights_kahan
        type sum_of_variates_kahan (line 115) | struct sum_of_variates_kahan
        type tail (line 117) | struct tail
        type coherent_tail_mean (line 119) | struct coherent_tail_mean
        type non_coherent_tail_mean (line 121) | struct non_coherent_tail_mean
        type tail_quantile (line 123) | struct tail_quantile
        type tail_variate (line 125) | struct tail_variate
        type tail_weights (line 127) | struct tail_weights
        type right_tail_variate (line 129) | struct right_tail_variate
        type left_tail_variate (line 131) | struct left_tail_variate
        type tail_variate_means (line 133) | struct tail_variate_means
        type absolute_tail_variate_means (line 135) | struct absolute_tail_variate_means
        type relative_tail_variate_means (line 137) | struct relative_tail_variate_means
        type lazy_variance (line 138) | struct lazy_variance
        type variance (line 139) | struct variance
        type weighted_covariance (line 141) | struct weighted_covariance
        type weighted_density (line 142) | struct weighted_density
        type weighted_kurtosis (line 143) | struct weighted_kurtosis
        type weighted_mean (line 144) | struct weighted_mean
        type immediate_weighted_mean (line 145) | struct immediate_weighted_mean
        type weighted_mean_of_variates (line 147) | struct weighted_mean_of_variates
        type immediate_weighted_mean_of_variates (line 149) | struct immediate_weighted_mean_of_variates
        type weighted_median (line 150) | struct weighted_median
        type with_density_weighted_median (line 151) | struct with_density_weighted_median
        type with_p_square_cumulative_distribution_weighted_median (line 152) | struct with_p_square_cumulative_distribution_weighted_median
        type weighted_extended_p_square (line 153) | struct weighted_extended_p_square
        type weighted_extended_p_square_quantile (line 154) | struct weighted_extended_p_square_quantile
        type weighted_extended_p_square_quantile_quadratic (line 155) | struct weighted_extended_p_square_quantile_quadratic
        type weighted_moment (line 157) | struct weighted_moment
        type weighted_peaks_over_threshold (line 159) | struct weighted_peaks_over_threshold
        type weighted_peaks_over_threshold_prob (line 161) | struct weighted_peaks_over_threshold_prob
        type weighted_pot_quantile (line 163) | struct weighted_pot_quantile
        type weighted_pot_quantile_prob (line 165) | struct weighted_pot_quantile_prob
        type weighted_pot_tail_mean (line 167) | struct weighted_pot_tail_mean
        type weighted_pot_tail_mean_prob (line 169) | struct weighted_pot_tail_mean_prob
        type weighted_p_square_cumulative_distribution (line 170) | struct weighted_p_square_cumulative_distribution
        type weighted_p_square_quantile (line 171) | struct weighted_p_square_quantile
        type weighted_p_square_quantile_for_median (line 172) | struct weighted_p_square_quantile_for_median
        type weighted_skewness (line 173) | struct weighted_skewness
        type weighted_tail_quantile (line 175) | struct weighted_tail_quantile
        type non_coherent_weighted_tail_mean (line 177) | struct non_coherent_weighted_tail_mean
        type weighted_tail_quantile (line 179) | struct weighted_tail_quantile
        type weighted_tail_variate_means (line 181) | struct weighted_tail_variate_means
        type absolute_weighted_tail_variate_means (line 183) | struct absolute_weighted_tail_variate_means
        type relative_weighted_tail_variate_means (line 185) | struct relative_weighted_tail_variate_means
        type lazy_weighted_variance (line 186) | struct lazy_weighted_variance
        type weighted_variance (line 187) | struct weighted_variance
        type weighted_sum (line 188) | struct weighted_sum
        type weighted_sum_of_variates (line 190) | struct weighted_sum_of_variates
        type rolling_window_plus1 (line 191) | struct rolling_window_plus1
        type rolling_window (line 192) | struct rolling_window
        type rolling_sum (line 193) | struct rolling_sum
        type rolling_count (line 194) | struct rolling_count
        type rolling_mean (line 195) | struct rolling_mean
      type extract (line 49) | namespace extract
      type tag (line 57) | namespace tag
        type quantile (line 25) | struct quantile
          class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____ (line 28) | class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____
        type tail_mean (line 43) | struct tail_mean
          class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____ (line 46) | class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____
        type weights (line 61) | struct weights
        type covariate1 (line 62) | struct covariate1
        type covariate2 (line 63) | struct covariate2
        type count (line 67) | struct count
        type covariance (line 69) | struct covariance
        type density (line 70) | struct density
        type error_of (line 72) | struct error_of
        type extended_p_square (line 73) | struct extended_p_square
        type extended_p_square_quantile (line 74) | struct extended_p_square_quantile
        type extended_p_square_quantile_quadratic (line 75) | struct extended_p_square_quantile_quadratic
        type kurtosis (line 76) | struct kurtosis
        type max (line 77) | struct max
        type mean (line 78) | struct mean
        type immediate_mean (line 79) | struct immediate_mean
        type mean_of_weights (line 80) | struct mean_of_weights
        type immediate_mean_of_weights (line 81) | struct immediate_mean_of_weights
        type mean_of_variates (line 83) | struct mean_of_variates
        type immediate_mean_of_variates (line 85) | struct immediate_mean_of_variates
        type median (line 86) | struct median
        type with_density_median (line 87) | struct with_density_median
        type with_p_square_cumulative_distribution_median (line 88) | struct with_p_square_cumulative_distribution_median
        type min (line 89) | struct min
        type moment (line 91) | struct moment
        type peaks_over_threshold (line 93) | struct peaks_over_threshold
        type peaks_over_threshold_prob (line 95) | struct peaks_over_threshold_prob
        type pot_tail_mean (line 97) | struct pot_tail_mean
        type pot_tail_mean_prob (line 99) | struct pot_tail_mean_prob
        type pot_quantile (line 101) | struct pot_quantile
        type pot_quantile_prob (line 103) | struct pot_quantile_prob
        type p_square_cumulative_distribution (line 104) | struct p_square_cumulative_distribution
        type p_square_quantile (line 105) | struct p_square_quantile
        type p_square_quantile_for_median (line 106) | struct p_square_quantile_for_median
        type skewness (line 107) | struct skewness
        type sum (line 108) | struct sum
        type sum_of_weights (line 109) | struct sum_of_weights
        type sum_of_variates (line 111) | struct sum_of_variates
        type sum_kahan (line 112) | struct sum_kahan
        type sum_of_weights_kahan (line 113) | struct sum_of_weights_kahan
        type sum_of_variates_kahan (line 115) | struct sum_of_variates_kahan
        type tail (line 117) | struct tail
        type coherent_tail_mean (line 119) | struct coherent_tail_mean
        type non_coherent_tail_mean (line 121) | struct non_coherent_tail_mean
        type tail_quantile (line 123) | struct tail_quantile
        type tail_variate (line 125) | struct tail_variate
        type tail_weights (line 127) | struct tail_weights
        type right_tail_variate (line 129) | struct right_tail_variate
        type left_tail_variate (line 131) | struct left_tail_variate
        type tail_variate_means (line 133) | struct tail_variate_means
        type absolute_tail_variate_means (line 135) | struct absolute_tail_variate_means
        type relative_tail_variate_means (line 137) | struct relative_tail_variate_means
        type lazy_variance (line 138) | struct lazy_variance
        type variance (line 139) | struct variance
        type weighted_covariance (line 141) | struct weighted_covariance
        type weighted_density (line 142) | struct weighted_density
        type weighted_kurtosis (line 143) | struct weighted_kurtosis
        type weighted_mean (line 144) | struct weighted_mean
        type immediate_weighted_mean (line 145) | struct immediate_weighted_mean
        type weighted_mean_of_variates (line 147) | struct weighted_mean_of_variates
        type immediate_weighted_mean_of_variates (line 149) | struct immediate_weighted_mean_of_variates
        type weighted_median (line 150) | struct weighted_median
        type with_density_weighted_median (line 151) | struct with_density_weighted_median
        type with_p_square_cumulative_distribution_weighted_median (line 152) | struct with_p_square_cumulative_distribution_weighted_median
        type weighted_extended_p_square (line 153) | struct weighted_extended_p_square
        type weighted_extended_p_square_quantile (line 154) | struct weighted_extended_p_square_quantile
        type weighted_extended_p_square_quantile_quadratic (line 155) | struct weighted_extended_p_square_quantile_quadratic
        type weighted_moment (line 157) | struct weighted_moment
        type weighted_peaks_over_threshold (line 159) | struct weighted_peaks_over_threshold
        type weighted_peaks_over_threshold_prob (line 161) | struct weighted_peaks_over_threshold_prob
        type weighted_pot_quantile (line 163) | struct weighted_pot_quantile
        type weighted_pot_quantile_prob (line 165) | struct weighted_pot_quantile_prob
        type weighted_pot_tail_mean (line 167) | struct weighted_pot_tail_mean
        type weighted_pot_tail_mean_prob (line 169) | struct weighted_pot_tail_mean_prob
        type weighted_p_square_cumulative_distribution (line 170) | struct weighted_p_square_cumulative_distribution
        type weighted_p_square_quantile (line 171) | struct weighted_p_square_quantile
        type weighted_p_square_quantile_for_median (line 172) | struct weighted_p_square_quantile_for_median
        type weighted_skewness (line 173) | struct weighted_skewness
        type weighted_tail_quantile (line 175) | struct weighted_tail_quantile
        type non_coherent_weighted_tail_mean (line 177) | struct non_coherent_weighted_tail_mean
        type weighted_tail_quantile (line 179) | struct weighted_tail_quantile
        type weighted_tail_variate_means (line 181) | struct weighted_tail_variate_means
        type absolute_weighted_tail_variate_means (line 183) | struct absolute_weighted_tail_variate_means
        type relative_weighted_tail_variate_means (line 185) | struct relative_weighted_tail_variate_means
        type lazy_weighted_variance (line 186) | struct lazy_weighted_variance
        type weighted_variance (line 187) | struct weighted_variance
        type weighted_sum (line 188) | struct weighted_sum
        type weighted_sum_of_variates (line 190) | struct weighted_sum_of_variates
        type rolling_window_plus1 (line 191) | struct rolling_window_plus1
        type rolling_window (line 192) | struct rolling_window
        type rolling_sum (line 193) | struct rolling_sum
        type rolling_count (line 194) | struct rolling_count
        type rolling_mean (line 195) | struct rolling_mean
      type impl (line 198) | namespace impl
        type count_impl (line 202) | struct count_impl
        type covariance_impl (line 205) | struct covariance_impl
        type density_impl (line 208) | struct density_impl
        type error_of_impl (line 211) | struct error_of_impl
        type error_of_mean_impl (line 214) | struct error_of_mean_impl
        type extended_p_square_impl (line 217) | struct extended_p_square_impl
        type extended_p_square_quantile_impl (line 220) | struct extended_p_square_quantile_impl
        type kurtosis_impl (line 223) | struct kurtosis_impl
        type max_impl (line 226) | struct max_impl
        type median_impl (line 229) | struct median_impl
        type with_density_median_impl (line 232) | struct with_density_median_impl
        type with_p_square_cumulative_distribution_median_impl (line 235) | struct with_p_square_cumulative_distribution_median_impl
        type min_impl (line 238) | struct min_impl
        type mean_impl (line 241) | struct mean_impl
        type immediate_mean_impl (line 244) | struct immediate_mean_impl
        type moment_impl (line 247) | struct moment_impl
        type peaks_over_threshold_prob_impl (line 250) | struct peaks_over_threshold_prob_impl
        type pot_quantile_impl (line 253) | struct pot_quantile_impl
        type pot_tail_mean_impl (line 256) | struct pot_tail_mean_impl
        type p_square_cumulative_distribution_impl (line 259) | struct p_square_cumulative_distribution_impl
        type p_square_quantile_impl (line 262) | struct p_square_quantile_impl
        type skewness_impl (line 265) | struct skewness_impl
        type sum_impl (line 268) | struct sum_impl
        type sum_kahan_impl (line 271) | struct sum_kahan_impl
        type tail_impl (line 274) | struct tail_impl
        type coherent_tail_mean_impl (line 277) | struct coherent_tail_mean_impl
        type non_coherent_tail_mean_impl (line 280) | struct non_coherent_tail_mean_impl
        type tail_quantile_impl (line 283) | struct tail_quantile_impl
        type tail_variate_impl (line 286) | struct tail_variate_impl
        type tail_variate_means_impl (line 289) | struct tail_variate_means_impl
        type lazy_variance_impl (line 292) | struct lazy_variance_impl
        type variance_impl (line 295) | struct variance_impl
        type weighted_covariance_impl (line 298) | struct weighted_covariance_impl
        type weighted_density_impl (line 301) | struct weighted_density_impl
        type weighted_kurtosis_impl (line 304) | struct weighted_kurtosis_impl
        type weighted_median_impl (line 307) | struct weighted_median_impl
        type with_density_weighted_median_impl (line 310) | struct with_density_weighted_median_impl
        type with_p_square_cumulative_distribution_weighted_median_impl (line 313) | struct with_p_square_cumulative_distribution_weighted_median_impl
        type weighted_mean_impl (line 316) | struct weighted_mean_impl
        type immediate_weighted_mean_impl (line 319) | struct immediate_weighted_mean_impl
        type weighted_peaks_over_threshold_impl (line 322) | struct weighted_peaks_over_threshold_impl
        type weighted_peaks_over_threshold_prob_impl (line 325) | struct weighted_peaks_over_threshold_prob_impl
        type with_p_square_cumulative_distribution_weighted_median_impl (line 328) | struct with_p_square_cumulative_distribution_weighted_median_impl
        type weighted_extended_p_square_impl (line 331) | struct weighted_extended_p_square_impl
        type weighted_moment_impl (line 334) | struct weighted_moment_impl
        type weighted_p_square_cumulative_distribution_impl (line 337) | struct weighted_p_square_cumulative_distribution_impl
        type weighted_p_square_quantile_impl (line 340) | struct weighted_p_square_quantile_impl
        type weighted_skewness_impl (line 343) | struct weighted_skewness_impl
        type weighted_sum_impl (line 346) | struct weighted_sum_impl
        type weighted_sum_kahan_impl (line 349) | struct weighted_sum_kahan_impl
        type non_coherent_weighted_tail_mean_impl (line 352) | struct non_coherent_weighted_tail_mean_impl
        type weighted_tail_quantile_impl (line 355) | struct weighted_tail_quantile_impl
        type weighted_tail_variate_means_impl (line 358) | struct weighted_tail_variate_means_impl
        type lazy_weighted_variance_impl (line 361) | struct lazy_weighted_variance_impl
        type weighted_variance_impl (line 364) | struct weighted_variance_impl
        type rolling_window_plus1_impl (line 367) | struct rolling_window_plus1_impl
        type rolling_window_impl (line 370) | struct rolling_window_impl
        type rolling_sum_impl (line 373) | struct rolling_sum_impl
        type rolling_count_impl (line 376) | struct rolling_count_impl
        type rolling_mean_impl (line 379) | struct rolling_mean_impl
      type stats (line 386) | struct stats
      type with_error (line 389) | struct with_error
      type lazy (line 392) | struct lazy {}
      type immediate (line 393) | struct immediate {}
      type right (line 400) | struct right {}
      type left (line 401) | struct left {}
      type absolute (line 405) | struct absolute {}
      type relative (line 406) | struct relative {}
      type with_density (line 409) | struct with_density {}
      type with_p_square_cumulative_distribution (line 410) | struct with_p_square_cumulative_distribution {}
      type with_p_square_quantile (line 411) | struct with_p_square_quantile {}
      type with_threshold_value (line 414) | struct with_threshold_value {}
      type with_threshold_probability (line 415) | struct with_threshold_probability {}
      type weighted (line 418) | struct weighted {}
      type unweighted (line 419) | struct unweighted {}
      type linear (line 420) | struct linear {}
      type quadratic (line 421) | struct quadratic {}
      type regular (line 424) | struct regular {}
      type for_median (line 425) | struct for_median {}
      type kahan (line 428) | struct kahan {}

FILE: deps/boost/include/boost/algorithm/algorithm.hpp
  type boost (line 26) | namespace boost { namespace algorithm {
    type algorithm (line 26) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 29) | BOOST_CXX14_CONSTEXPR T identity_operation ( std::multiplies<T> ) { ...
      function BOOST_CXX14_CONSTEXPR (line 32) | BOOST_CXX14_CONSTEXPR T identity_operation ( std::plus<T> ) { return...
      function BOOST_CXX14_CONSTEXPR (line 44) | BOOST_CXX14_CONSTEXPR typename boost::enable_if<boost::is_integral<I...
      function BOOST_CXX14_CONSTEXPR (line 71) | BOOST_CXX14_CONSTEXPR typename boost::enable_if<boost::is_integral<I...

FILE: deps/boost/include/boost/algorithm/apply_permutation.hpp
  type boost (line 28) | namespace boost { namespace algorithm
    type algorithm (line 28) | namespace algorithm
      function apply_permutation (line 41) | void
      function apply_reverse_permutation (line 73) | void
      function apply_permutation (line 103) | void
      function apply_reverse_permutation (line 119) | void

FILE: deps/boost/include/boost/algorithm/clamp.hpp
  type boost (line 32) | namespace boost { namespace algorithm {
    type algorithm (line 32) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 50) | BOOST_CXX14_CONSTEXPR T const & clamp ( T const& val,
      function BOOST_CXX14_CONSTEXPR (line 72) | BOOST_CXX14_CONSTEXPR T const& clamp ( const T& val,
      function BOOST_CXX14_CONSTEXPR (line 91) | BOOST_CXX14_CONSTEXPR OutputIterator clamp_range ( InputIterator fir...
      function BOOST_CXX14_CONSTEXPR (line 112) | BOOST_CXX14_CONSTEXPR typename boost::disable_if_c<boost::is_same<Ra...
      function BOOST_CXX14_CONSTEXPR (line 137) | BOOST_CXX14_CONSTEXPR OutputIterator clamp_range ( InputIterator fir...
      function BOOST_CXX14_CONSTEXPR (line 164) | BOOST_CXX14_CONSTEXPR typename boost::disable_if_c<boost::is_same<Ra...

FILE: deps/boost/include/boost/algorithm/cxx11/all_of.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 31) | BOOST_CXX14_CONSTEXPR bool all_of ( InputIterator first, InputIterat...
      function BOOST_CXX14_CONSTEXPR (line 47) | BOOST_CXX14_CONSTEXPR bool all_of ( const Range &r, Predicate p )
      function BOOST_CXX14_CONSTEXPR (line 61) | BOOST_CXX14_CONSTEXPR bool all_of_equal ( InputIterator first, Input...
      function BOOST_CXX14_CONSTEXPR (line 77) | BOOST_CXX14_CONSTEXPR bool all_of_equal ( const Range &r, const T &v...

FILE: deps/boost/include/boost/algorithm/cxx11/any_of.hpp
  type boost (line 21) | namespace boost { namespace algorithm {
    type algorithm (line 21) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 32) | BOOST_CXX14_CONSTEXPR bool any_of ( InputIterator first, InputIterat...
      function BOOST_CXX14_CONSTEXPR (line 48) | BOOST_CXX14_CONSTEXPR bool any_of ( const Range &r, Predicate p )
      function BOOST_CXX14_CONSTEXPR (line 62) | BOOST_CXX14_CONSTEXPR bool any_of_equal ( InputIterator first, Input...
      function BOOST_CXX14_CONSTEXPR (line 78) | BOOST_CXX14_CONSTEXPR bool any_of_equal ( const Range &r, const V &v...

FILE: deps/boost/include/boost/algorithm/cxx11/copy_if.hpp
  type boost (line 21) | namespace boost { namespace algorithm {
    type algorithm (line 21) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 34) | BOOST_CXX14_CONSTEXPR OutputIterator copy_if ( InputIterator first, ...
      function BOOST_CXX14_CONSTEXPR (line 52) | BOOST_CXX14_CONSTEXPR OutputIterator copy_if ( const Range &r, Outpu...
      function BOOST_CXX14_CONSTEXPR (line 69) | BOOST_CXX14_CONSTEXPR std::pair<InputIterator, OutputIterator>
      function BOOST_CXX14_CONSTEXPR (line 87) | BOOST_CXX14_CONSTEXPR std::pair<typename boost::range_iterator<const...
      function BOOST_CXX14_CONSTEXPR (line 105) | BOOST_CXX14_CONSTEXPR std::pair<InputIterator, OutputIterator>
      function BOOST_CXX14_CONSTEXPR (line 123) | BOOST_CXX14_CONSTEXPR std::pair<typename boost::range_iterator<const...

FILE: deps/boost/include/boost/algorithm/cxx11/copy_n.hpp
  type boost (line 17) | namespace boost { namespace algorithm {
    type algorithm (line 17) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 29) | BOOST_CXX14_CONSTEXPR OutputIterator copy_n ( InputIterator first, S...

FILE: deps/boost/include/boost/algorithm/cxx11/find_if_not.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 30) | BOOST_CXX14_CONSTEXPR InputIterator find_if_not ( InputIterator firs...
      function BOOST_CXX14_CONSTEXPR (line 46) | BOOST_CXX14_CONSTEXPR typename boost::range_iterator<const Range>::t...

FILE: deps/boost/include/boost/algorithm/cxx11/iota.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 29) | BOOST_CXX14_CONSTEXPR void iota ( ForwardIterator first, ForwardIter...
      function BOOST_CXX14_CONSTEXPR (line 42) | BOOST_CXX14_CONSTEXPR void iota ( Range &r, T value )
      function BOOST_CXX14_CONSTEXPR (line 56) | BOOST_CXX14_CONSTEXPR OutputIterator iota_n ( OutputIterator out, T ...

FILE: deps/boost/include/boost/algorithm/cxx11/is_partitioned.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 30) | BOOST_CXX14_CONSTEXPR bool is_partitioned ( InputIterator first, Inp...
      function BOOST_CXX14_CONSTEXPR (line 51) | BOOST_CXX14_CONSTEXPR bool is_partitioned ( const Range &r, UnaryPre...

FILE: deps/boost/include/boost/algorithm/cxx11/is_permutation.hpp
  type boost (line 26) | namespace boost { namespace algorithm {
    type algorithm (line 26) | namespace algorithm {
      type detail (line 29) | namespace detail {
        type value_predicate (line 31) | struct value_predicate {
          method value_predicate (line 32) | value_predicate ( Predicate p, Iterator it ) : p_ ( p ), it_ ( i...
        function is_permutation_inner (line 45) | bool is_permutation_inner ( ForwardIterator1 first1, ForwardIterat...
        function is_permutation_tag (line 65) | bool is_permutation_tag ( ForwardIterator1 first1, ForwardIterator...
        function is_permutation_tag (line 82) | bool is_permutation_tag ( RandomAccessIterator1 first1, RandomAcce...
      function is_permutation (line 113) | bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
      function is_permutation (line 138) | bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last...
      function is_permutation (line 163) | bool is_permutation ( const Range &r, ForwardIterator first2 )
      function is_permutation (line 178) | typename boost::disable_if_c<boost::is_same<Range, ForwardIterator>:...

FILE: deps/boost/include/boost/algorithm/cxx11/is_sorted.hpp
  type boost (line 27) | namespace boost { namespace algorithm {
    type algorithm (line 27) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 38) | BOOST_CXX14_CONSTEXPR ForwardIterator is_sorted_until ( ForwardItera...
      function BOOST_CXX14_CONSTEXPR (line 58) | BOOST_CXX14_CONSTEXPR ForwardIterator is_sorted_until ( ForwardItera...
      function BOOST_CXX14_CONSTEXPR (line 73) | BOOST_CXX14_CONSTEXPR bool is_sorted ( ForwardIterator first, Forwar...
      function BOOST_CXX14_CONSTEXPR (line 85) | BOOST_CXX14_CONSTEXPR bool is_sorted ( ForwardIterator first, Forwar...
      function BOOST_CXX14_CONSTEXPR (line 102) | BOOST_CXX14_CONSTEXPR typename boost::lazy_disable_if_c<
      function BOOST_CXX14_CONSTEXPR (line 117) | BOOST_CXX14_CONSTEXPR typename boost::range_iterator<const R>::type ...
      function BOOST_CXX14_CONSTEXPR (line 130) | BOOST_CXX14_CONSTEXPR typename boost::lazy_disable_if_c< boost::is_s...
      function BOOST_CXX14_CONSTEXPR (line 143) | BOOST_CXX14_CONSTEXPR bool is_sorted ( const R &range )
      function BOOST_CXX14_CONSTEXPR (line 163) | BOOST_CXX14_CONSTEXPR bool is_increasing ( ForwardIterator first, Fo...
      function BOOST_CXX14_CONSTEXPR (line 179) | BOOST_CXX14_CONSTEXPR bool is_increasing ( const R &range )
      function BOOST_CXX14_CONSTEXPR (line 196) | BOOST_CXX14_CONSTEXPR bool is_decreasing ( ForwardIterator first, Fo...
      function BOOST_CXX14_CONSTEXPR (line 211) | BOOST_CXX14_CONSTEXPR bool is_decreasing ( const R &range )
      function BOOST_CXX14_CONSTEXPR (line 228) | BOOST_CXX14_CONSTEXPR bool is_strictly_increasing ( ForwardIterator ...
      function BOOST_CXX14_CONSTEXPR (line 243) | BOOST_CXX14_CONSTEXPR bool is_strictly_increasing ( const R &range )
      function BOOST_CXX14_CONSTEXPR (line 259) | BOOST_CXX14_CONSTEXPR bool is_strictly_decreasing ( ForwardIterator ...
      function BOOST_CXX14_CONSTEXPR (line 274) | BOOST_CXX14_CONSTEXPR bool is_strictly_decreasing ( const R &range )

FILE: deps/boost/include/boost/algorithm/cxx11/none_of.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 30) | BOOST_CXX14_CONSTEXPR bool none_of ( InputIterator first, InputItera...
      function BOOST_CXX14_CONSTEXPR (line 46) | BOOST_CXX14_CONSTEXPR bool none_of ( const Range &r, Predicate p )
      function BOOST_CXX14_CONSTEXPR (line 60) | BOOST_CXX14_CONSTEXPR bool none_of_equal ( InputIterator first, Inpu...
      function BOOST_CXX14_CONSTEXPR (line 76) | BOOST_CXX14_CONSTEXPR bool none_of_equal ( const Range &r, const V &...

FILE: deps/boost/include/boost/algorithm/cxx11/one_of.hpp
  type boost (line 22) | namespace boost { namespace algorithm {
    type algorithm (line 22) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 32) | BOOST_CXX14_CONSTEXPR bool one_of ( InputIterator first, InputIterat...
      function BOOST_CXX14_CONSTEXPR (line 51) | BOOST_CXX14_CONSTEXPR bool one_of ( const Range &r, Predicate p )
      function BOOST_CXX14_CONSTEXPR (line 65) | BOOST_CXX14_CONSTEXPR bool one_of_equal ( InputIterator first, Input...
      function BOOST_CXX14_CONSTEXPR (line 84) | BOOST_CXX14_CONSTEXPR bool one_of_equal ( const Range &r, const V &v...

FILE: deps/boost/include/boost/algorithm/cxx11/partition_copy.hpp
  type boost (line 21) | namespace boost { namespace algorithm {
    type algorithm (line 21) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 39) | BOOST_CXX14_CONSTEXPR std::pair<OutputIterator1, OutputIterator2>
      function BOOST_CXX14_CONSTEXPR (line 61) | BOOST_CXX14_CONSTEXPR std::pair<OutputIterator1, OutputIterator2>

FILE: deps/boost/include/boost/algorithm/cxx11/partition_point.hpp
  type boost (line 21) | namespace boost { namespace algorithm {
    type algorithm (line 21) | namespace algorithm {
      function ForwardIterator (line 32) | ForwardIterator partition_point ( ForwardIterator first, ForwardIter...
      function partition_point (line 58) | typename boost::range_iterator<Range>::type partition_point ( Range ...

FILE: deps/boost/include/boost/algorithm/cxx14/equal.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      type detail (line 21) | namespace detail {
        type eq (line 24) | struct eq {
          method BOOST_CONSTEXPR (line 25) | BOOST_CONSTEXPR bool operator () ( const T1& v1, const T2& v2 ) ...
        function BOOST_CXX14_CONSTEXPR (line 29) | BOOST_CXX14_CONSTEXPR
        function BOOST_CXX14_CONSTEXPR (line 46) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 70) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 89) | BOOST_CXX14_CONSTEXPR

FILE: deps/boost/include/boost/algorithm/cxx14/is_permutation.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function is_permutation (line 35) | bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
      function is_permutation (line 64) | bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,

FILE: deps/boost/include/boost/algorithm/cxx14/mismatch.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 32) | BOOST_CXX14_CONSTEXPR std::pair<InputIterator1, InputIterator2> mism...
      function BOOST_CXX14_CONSTEXPR (line 52) | BOOST_CXX14_CONSTEXPR std::pair<InputIterator1, InputIterator2> mism...

FILE: deps/boost/include/boost/algorithm/cxx17/exclusive_scan.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function OutputIterator (line 26) | OutputIterator exclusive_scan(InputIterator first, InputIterator last,
      function OutputIterator (line 44) | OutputIterator exclusive_scan(InputIterator first, InputIterator last,

FILE: deps/boost/include/boost/algorithm/cxx17/for_each_n.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function InputIterator (line 29) | InputIterator for_each_n(InputIterator first, Size n, Function f)

FILE: deps/boost/include/boost/algorithm/cxx17/inclusive_scan.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function OutputIterator (line 26) | OutputIterator inclusive_scan(InputIterator first, InputIterator last,
      function OutputIterator (line 38) | OutputIterator inclusive_scan(InputIterator first, InputIterator last,
      function OutputIterator (line 52) | OutputIterator inclusive_scan(InputIterator first, InputIterator last,

FILE: deps/boost/include/boost/algorithm/cxx17/reduce.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function T (line 26) | T reduce(InputIterator first, InputIterator last, T init, BinaryOper...
      function T (line 35) | T reduce(InputIterator first, InputIterator last, T init)
      function reduce (line 42) | typename std::iterator_traits<InputIterator>::value_type
      function reduce (line 50) | typename boost::range_value<Range>::type
      function T (line 58) | T reduce(const Range &r, T init)
      function T (line 66) | T reduce(const Range &r, T init, BinaryOperation bOp)

FILE: deps/boost/include/boost/algorithm/cxx17/transform_exclusive_scan.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function OutputIterator (line 27) | OutputIterator transform_exclusive_scan(InputIterator first, InputIt...

FILE: deps/boost/include/boost/algorithm/cxx17/transform_inclusive_scan.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function OutputIterator (line 27) | OutputIterator transform_inclusive_scan(InputIterator first, InputIt...
      function OutputIterator (line 42) | OutputIterator transform_inclusive_scan(InputIterator first, InputIt...

FILE: deps/boost/include/boost/algorithm/cxx17/transform_reduce.hpp
  type boost (line 23) | namespace boost { namespace algorithm {
    type algorithm (line 23) | namespace algorithm {
      function T (line 27) | T transform_reduce(InputIterator1 first1, InputIterator1 last1,
      function T (line 38) | T transform_reduce(InputIterator first, InputIterator last,
      function T (line 47) | T transform_reduce(InputIterator1 first1, InputIterator1 last1,

FILE: deps/boost/include/boost/algorithm/find_backward.hpp
  type boost (line 16) | namespace boost { namespace algorithm {
    type algorithm (line 16) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 19) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 31) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 38) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 50) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 57) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 69) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 76) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 88) | BOOST_CXX14_CONSTEXPR

FILE: deps/boost/include/boost/algorithm/find_not.hpp
  type boost (line 16) | namespace boost { namespace algorithm {
    type algorithm (line 16) | namespace algorithm {
      function BOOST_CXX14_CONSTEXPR (line 19) | BOOST_CXX14_CONSTEXPR
      function BOOST_CXX14_CONSTEXPR (line 30) | BOOST_CXX14_CONSTEXPR

FILE: deps/boost/include/boost/algorithm/gather.hpp
  type boost (line 75) | namespace boost { namespace algorithm {
    type algorithm (line 75) | namespace algorithm {
      function gather (line 87) | std::pair<BidirectionalIterator, BidirectionalIterator> gather
      function gather (line 108) | std::pair<

FILE: deps/boost/include/boost/algorithm/hex.hpp
  type boost (line 37) | namespace boost { namespace algorithm {
    type algorithm (line 37) | namespace algorithm {
      type hex_decode_error (line 51) | struct hex_decode_error : virtual boost::exception, virtual std::exc...
      type not_enough_input (line 52) | struct not_enough_input : virtual hex_decode_error {}
      type non_hex_input (line 53) | struct non_hex_input    : virtual hex_decode_error {}
      type bad_char_ (line 54) | struct bad_char_
      type detail (line 56) | namespace detail {
        function OutputIterator (line 60) | OutputIterator encode_one ( T val, OutputIterator out, const char ...
        function hex_char_to_int (line 70) | unsigned char hex_char_to_int ( T val ) {
        type hex_iterator_traits (line 84) | struct hex_iterator_traits {
        type hex_iterator_traits< std::back_insert_iterator<Container> > (line 89) | struct hex_iterator_traits< std::back_insert_iterator<Container> > {
        type hex_iterator_traits< std::front_insert_iterator<Container> > (line 94) | struct hex_iterator_traits< std::front_insert_iterator<Container> > {
        type hex_iterator_traits< std::insert_iterator<Container> > (line 99) | struct hex_iterator_traits< std::insert_iterator<Container> > {
        type hex_iterator_traits< std::ostream_iterator<T, charType, traits> > (line 108) | struct hex_iterator_traits< std::ostream_iterator<T, charType, tra...
        function iter_end (line 113) | bool iter_end ( Iterator current, Iterator last ) { return current...
        function ptr_end (line 116) | bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '...
        function decode_one (line 123) | typename boost::enable_if<boost::is_integral<typename hex_iterator...
      function hex (line 151) | typename boost::enable_if<boost::is_integral<typename detail::hex_it...
      function hex_lower (line 168) | typename boost::enable_if<boost::is_integral<typename detail::hex_it...
      function hex (line 184) | typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
      function hex_lower (line 200) | typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
      function hex (line 216) | typename boost::enable_if<boost::is_integral<typename detail::hex_it...
      function hex_lower (line 230) | typename boost::enable_if<boost::is_integral<typename detail::hex_it...
      function OutputIterator (line 245) | OutputIterator unhex ( InputIterator first, InputIterator last, Outp...
      function OutputIterator (line 260) | OutputIterator unhex ( const T *ptr, OutputIterator out ) {
      function OutputIterator (line 278) | OutputIterator unhex ( const Range &r, OutputIterator out ) {
      function String (line 289) | String hex ( const String &input ) {
      function String (line 303) | String hex_lower ( const String &input ) {
      function String (line 317) | String unhex ( const String &input ) {

FILE: deps/boost/include/boost/algorithm/is_palindrome.hpp
  type boost (line 26) | namespace boost {  namespace algorithm {
    type algorithm (line 26) | namespace algorithm {
      function is_palindrome (line 39) | bool is_palindrome(BidirectionalIterator begin, BidirectionalIterato...
      function is_palindrome (line 73) | bool is_palindrome(BidirectionalIterator begin, BidirectionalIterato...
      function is_palindrome (line 88) | bool is_palindrome(const R& range)
      function is_palindrome (line 103) | bool is_palindrome(const R& range, Predicate p)
      function is_palindrome (line 116) | bool is_palindrome(const char* str)
      function is_palindrome (line 133) | bool is_palindrome(const char* str, Predicate p)

FILE: deps/boost/include/boost/algorithm/is_partitioned_until.hpp
  type boost (line 19) | namespace boost { namespace algorithm {
    type algorithm (line 19) | namespace algorithm {
      function InputIterator (line 33) | InputIterator is_partitioned_until ( InputIterator first, InputItera...
      function is_partitioned_until (line 57) | typename boost::range_iterator<const Range>::type is_partitioned_unt...

FILE: deps/boost/include/boost/algorithm/minmax.hpp
  type boost (line 32) | namespace boost {
    function minmax (line 35) | tuple< T const&, T const& >
    function minmax (line 41) | tuple< T const&, T const& >

FILE: deps/boost/include/boost/algorithm/minmax_element.hpp
  type boost (line 33) | namespace boost {
    type detail (line 35) | namespace detail {  // for obtaining a uniform version of minmax_element
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function minmax_element (line 124) | std::pair<ForwardIter,ForwardIter>
    function minmax_element (line 132) | std::pair<ForwardIter,ForwardIter>
    type detail (line 210) | namespace detail {  // common base for the overloads
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function ForwardIter (line 267) | ForwardIter
    function ForwardIter (line 275) | ForwardIter
    function ForwardIter (line 283) | ForwardIter
    function ForwardIter (line 291) | ForwardIter
    function ForwardIter (line 299) | ForwardIter
    function ForwardIter (line 307) | ForwardIter
    function ForwardIter (line 315) | ForwardIter
    function ForwardIter (line 323) | ForwardIter
    type detail (line 333) | namespace detail {
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function first_min_first_max_element (line 488) | inline std::pair<ForwardIter,ForwardIter>
    function first_min_first_max_element (line 495) | inline std::pair<ForwardIter,ForwardIter>
    function first_min_last_max_element (line 503) | std::pair<ForwardIter,ForwardIter>
    function first_min_last_max_element (line 511) | inline std::pair<ForwardIter,ForwardIter>
    function last_min_first_max_element (line 520) | std::pair<ForwardIter,ForwardIter>
    function last_min_first_max_element (line 528) | inline std::pair<ForwardIter,ForwardIter>
    function last_min_last_max_element (line 537) | std::pair<ForwardIter,ForwardIter>
    function last_min_last_max_element (line 545) | inline std::pair<ForwardIter,ForwardIter>
  type boost (line 206) | namespace boost {
    type detail (line 35) | namespace detail {  // for obtaining a uniform version of minmax_element
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function minmax_element (line 124) | std::pair<ForwardIter,ForwardIter>
    function minmax_element (line 132) | std::pair<ForwardIter,ForwardIter>
    type detail (line 210) | namespace detail {  // common base for the overloads
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function ForwardIter (line 267) | ForwardIter
    function ForwardIter (line 275) | ForwardIter
    function ForwardIter (line 283) | ForwardIter
    function ForwardIter (line 291) | ForwardIter
    function ForwardIter (line 299) | ForwardIter
    function ForwardIter (line 307) | ForwardIter
    function ForwardIter (line 315) | ForwardIter
    function ForwardIter (line 323) | ForwardIter
    type detail (line 333) | namespace detail {
      type less_over_iter (line 40) | struct less_over_iter {
      type binary_pred_over_iter (line 46) | struct binary_pred_over_iter {
        method binary_pred_over_iter (line 47) | explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p...
      function basic_minmax_element (line 57) | std::pair<ForwardIter,ForwardIter>
      function ForwardIter (line 213) | ForwardIter
      function ForwardIter (line 226) | ForwardIter
      function ForwardIter (line 239) | ForwardIter
      function ForwardIter (line 252) | ForwardIter
      function basic_first_min_last_max_element (line 336) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_first_max_element (line 382) | std::pair<ForwardIter,ForwardIter>
      function basic_last_min_last_max_element (line 427) | std::pair<ForwardIter,ForwardIter>
    function first_min_first_max_element (line 488) | inline std::pair<ForwardIter,ForwardIter>
    function first_min_first_max_element (line 495) | inline std::pair<ForwardIter,ForwardIter>
    function first_min_last_max_element (line 503) | std::pair<ForwardIter,ForwardIter>
    function first_min_last_max_element (line 511) | inline std::pair<ForwardIter,ForwardIter>
    function last_min_first_max_element (line 520) | std::pair<ForwardIter,ForwardIter>
    function last_min_first_max_element (line 528) | inline std::pair<ForwardIter,ForwardIter>
    function last_min_last_max_element (line 537) | std::pair<ForwardIter,ForwardIter>
    function last_min_last_max_element (line 545) | inline std::pair<ForwardIter,ForwardIter>

FILE: deps/boost/include/boost/algorithm/searching/boyer_moore.hpp
  type boost (line 28) | namespace boost { namespace algorithm {
    type algorithm (line 28) | namespace algorithm {
      class boyer_moore (line 57) | class boyer_moore {
        method boyer_moore (line 60) | boyer_moore ( patIter first, patIter last )
        method do_search (line 118) | std::pair<corpusIter, corpusIter>
        method build_skip_table (line 149) | void build_skip_table ( patIter first, patIter last ) {
        method compute_bm_prefix (line 156) | void compute_bm_prefix ( Iter first, Iter last, Container &prefix ) {
        method build_suffix_table (line 176) | void build_suffix_table ( patIter first, patIter last ) {
      function boyer_moore_search (line 218) | std::pair<corpusIter, corpusIter> boyer_moore_search (
      function boyer_moore_search (line 227) | std::pair<corpusIter, corpusIter> boyer_moore_search (
      function boyer_moore_search (line 236) | typename boost::disable_if_c<
      function boyer_moore_search (line 247) | std::pair<typename boost::range_iterator<CorpusRange>::type, typenam...
      function make_boyer_moore (line 258) | boost::algorithm::boyer_moore<typename boost::range_iterator<const R...
      function make_boyer_moore (line 265) | boost::algorithm::boyer_moore<typename boost::range_iterator<Range>:...

FILE: deps/boost/include/boost/algorithm/searching/boyer_moore_horspool.hpp
  type boost (line 30) | namespace boost { namespace algorithm {
    type algorithm (line 30) | namespace algorithm {
      class boyer_moore_horspool (line 48) | class boyer_moore_horspool {
        method boyer_moore_horspool (line 51) | boyer_moore_horspool ( patIter first, patIter last )
        method do_search (line 113) | std::pair<corpusIter, corpusIter>
      function boyer_moore_horspool_search (line 148) | std::pair<corpusIter, corpusIter> boyer_moore_horspool_search (
      function boyer_moore_horspool_search (line 157) | std::pair<corpusIter, corpusIter> boyer_moore_horspool_search (
      function boyer_moore_horspool_search (line 166) | typename boost::disable_if_c<
      function boyer_moore_horspool_search (line 177) | std::pair<typename boost::range_iterator<CorpusRange>::type, typenam...
      function make_boyer_moore_horspool (line 188) | boost::algorithm::boyer_moore_horspool<typename boost::range_iterato...
      function make_boyer_moore_horspool (line 195) | boost::algorithm::boyer_moore_horspool<typename boost::range_iterato...

FILE: deps/boost/include/boost/algorithm/searching/detail/bm_traits.hpp
  type boost (line 31) | namespace boost { namespace algorithm { namespace detail {
    type algorithm (line 31) | namespace algorithm { namespace detail {
      type detail (line 31) | namespace detail {
        class skip_table (line 36) | class skip_table
        class skip_table<key_type, value_type, false> (line 40) | class skip_table<key_type, value_type, false> {
          method skip_table (line 51) | skip_table ( std::size_t patSize, value_type default_value )
          method insert (line 54) | void insert ( key_type key, value_type val ) {
          method value_type (line 58) | value_type operator [] ( key_type key ) const {
          method PrintSkipTable (line 63) | void PrintSkipTable () const {
        class skip_table<key_type, value_type, true> (line 75) | class skip_table<key_type, value_type, true> {
          method skip_table (line 82) | skip_table ( std::size_t /*patSize*/, value_type default_value )...
          method insert (line 86) | void insert ( key_type key, value_type val ) {
          method value_type (line 90) | value_type operator [] ( key_type key ) const {
          method PrintSkipTable (line 94) | void PrintSkipTable () const {
        type BM_traits (line 104) | struct BM_traits {

FILE: deps/boost/include/boost/algorithm/searching/detail/debugging.hpp
  type boost (line 16) | namespace boost { namespace algorithm { namespace detail {
    type algorithm (line 16) | namespace algorithm { namespace detail {
      type detail (line 16) | namespace detail {
        function PrintTable (line 20) | void PrintTable ( Iter first, Iter last ) {

FILE: deps/boost/include/boost/algorithm/searching/knuth_morris_pratt.hpp
  type boost (line 30) | namespace boost { namespace algorithm {
    type algorithm (line 30) | namespace algorithm {
      class knuth_morris_pratt (line 46) | class knuth_morris_pratt {
        method knuth_morris_pratt (line 49) | knuth_morris_pratt ( patIter first, patIter last )
        method do_search (line 110) | std::pair<corpusIter, corpusIter>
        method preKmp (line 158) | void preKmp ( patIter first, patIter last ) {
        method init_skip_table (line 178) | void init_skip_table ( patIter first, patIter last ) {
      function knuth_morris_pratt_search (line 210) | std::pair<corpusIter, corpusIter> knuth_morris_pratt_search (
      function knuth_morris_pratt_search (line 219) | std::pair<corpusIter, corpusIter> knuth_morris_pratt_search (
      function knuth_morris_pratt_search (line 228) | typename boost::disable_if_c<
      function knuth_morris_pratt_search (line 239) | std::pair<typename boost::range_iterator<CorpusRange>::type, typenam...
      function make_knuth_morris_pratt (line 250) | boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<...
      function make_knuth_morris_pratt (line 257) | boost::algorithm::knuth_morris_pratt<typename boost::range_iterator<...

FILE: deps/boost/include/boost/algorithm/sort_subrange.hpp
  type boost (line 29) | namespace boost { namespace algorithm {
    type algorithm (line 29) | namespace algorithm {
      function sort_subrange (line 46) | void sort_subrange (
      function sort_subrange (line 63) | void sort_subrange (Iterator first, Iterator last, Iterator sub_firs...
      function partition_subrange (line 87) | void partition_subrange (
      function partition_subrange (line 102) | void partition_subrange (Iterator first, Iterator last, Iterator sub...

FILE: deps/boost/include/boost/algorithm/string/case_conv.hpp
  type boost (line 32) | namespace boost {
    type algorithm (line 33) | namespace algorithm {
      function OutputIteratorT (line 54) | inline OutputIteratorT
      function SequenceT (line 72) | inline SequenceT to_lower_copy(
      function to_lower (line 91) | inline void to_lower(
      function OutputIteratorT (line 119) | inline OutputIteratorT
      function SequenceT (line 137) | inline SequenceT to_upper_copy(
      function to_upper (line 156) | inline void to_upper(

FILE: deps/boost/include/boost/algorithm/string/classification.hpp
  type boost (line 29) | namespace boost {
    type algorithm (line 30) | namespace algorithm {
      function is_classified (line 43) | inline detail::is_classifiedF
      function is_space (line 56) | inline detail::is_classifiedF
      function is_alnum (line 69) | inline detail::is_classifiedF
      function is_alpha (line 82) | inline detail::is_classifiedF
      function is_cntrl (line 95) | inline detail::is_classifiedF
      function is_digit (line 108) | inline detail::is_classifiedF
      function is_graph (line 121) | inline detail::is_classifiedF
      function is_lower (line 134) | inline detail::is_classifiedF
      function is_print (line 147) | inline detail::is_classifiedF
      function is_punct (line 160) | inline detail::is_classifiedF
      function is_upper (line 173) | inline detail::is_classifiedF
      function is_xdigit (line 186) | inline detail::is_classifiedF
      function is_any_of (line 201) | inline detail::is_any_ofF<
      function is_from_range (line 219) | inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT...

FILE: deps/boost/include/boost/algorithm/string/compare.hpp
  type boost (line 24) | namespace boost {
    type algorithm (line 25) | namespace algorithm {
      type is_equal (line 34) | struct is_equal
      type is_iequal (line 52) | struct is_iequal
        method is_iequal (line 58) | is_iequal( const std::locale& Loc=std::locale() ) :
      type is_less (line 86) | struct is_less
      type is_iless (line 105) | struct is_iless
        method is_iless (line 111) | is_iless( const std::locale& Loc=std::locale() ) :
      type is_not_greater (line 139) | struct is_not_greater
      type is_not_igreater (line 158) | struct is_not_igreater
        method is_not_igreater (line 164) | is_not_igreater( const std::locale& Loc=std::locale() ) :

FILE: deps/boost/include/boost/algorithm/string/concept.hpp
  type boost (line 23) | namespace boost {
    type algorithm (line 24) | namespace algorithm {
      type FinderConcept (line 35) | struct FinderConcept
        method constraints (line 40) | void constraints()
      type FormatterConcept (line 62) | struct FormatterConcept
        method constraints (line 65) | void constraints()

FILE: deps/boost/include/boost/algorithm/string/constants.hpp
  type boost (line 14) | namespace boost {
    type algorithm (line 15) | namespace algorithm {
      type token_compress_mode_type (line 21) | enum token_compress_mode_type

FILE: deps/boost/include/boost/algorithm/string/detail/case_conv.hpp
  type boost (line 20) | namespace boost {
    type algorithm (line 21) | namespace algorithm {
      type detail (line 22) | namespace detail {
        type to_lowerF (line 33) | struct to_lowerF
          method to_lowerF (line 38) | to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {}
          method CharT (line 41) | CharT operator ()( CharT Ch ) const
        type to_upperF (line 55) | struct to_upperF
          method to_upperF (line 60) | to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {}
          method CharT (line 63) | CharT operator ()( CharT Ch ) const
        function OutputIteratorT (line 83) | OutputIteratorT transform_range_copy(
        function transform_range (line 97) | void transform_range(
        function SequenceT (line 109) | inline SequenceT transform_range_copy(

FILE: deps/boost/include/boost/algorithm/string/detail/classification.hpp
  type boost (line 25) | namespace boost {
    type algorithm (line 26) | namespace algorithm {
      type detail (line 27) | namespace detail {
        type is_classifiedF (line 32) | struct is_classifiedF :
          method is_classifiedF (line 39) | is_classifiedF(std::ctype_base::mask Type, std::locale const & L...
        type is_any_ofF (line 67) | struct is_any_ofF :
          method is_any_ofF (line 80) | is_any_ofF( const RangeT& Range ) : m_Size(0)
          method is_any_ofF (line 107) | is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)
          method is_any_ofF (line 142) | is_any_ofF& operator=(const is_any_ofF& Other)
          method use_fixed_storage (line 227) | static bool use_fixed_storage(std::size_t size)
        type is_from_rangeF (line 253) | struct is_from_rangeF :
          method is_from_rangeF (line 260) | is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}
        type pred_andF (line 276) | struct pred_andF :
          method pred_andF (line 285) | pred_andF( Pred1T Pred1, Pred2T Pred2 ) :
        type pred_orF (line 302) | struct pred_orF :
          method pred_orF (line 310) | pred_orF( Pred1T Pred1, Pred2T Pred2 ) :
        type pred_notF (line 327) | struct pred_notF :
          method pred_notF (line 335) | pred_notF( PredT Pred ) : m_Pred(Pred) {}

FILE: deps/boost/include/boost/algorithm/string/detail/find_format.hpp
  type boost (line 21) | namespace boost {
    type algorithm (line 22) | namespace algorithm {
      type detail (line 23) | namespace detail {
        function OutputIteratorT (line 33) | inline OutputIteratorT find_format_copy_impl2(
        function OutputIteratorT (line 72) | inline OutputIteratorT find_format_copy_impl(
        function InputT (line 98) | inline InputT find_format_copy_impl2(
        function InputT (line 134) | inline InputT find_format_copy_impl(
        function find_format_impl2 (line 157) | inline void find_format_impl2(
        function find_format_impl (line 186) | inline void find_format_impl(

FILE: deps/boost/include/boost/algorithm/string/detail/find_format_all.hpp
  type boost (line 21) | namespace boost {
    type algorithm (line 22) | namespace algorithm {
      type detail (line 23) | namespace detail {
        function OutputIteratorT (line 34) | inline OutputIteratorT find_format_all_copy_impl2(
        function OutputIteratorT (line 81) | inline OutputIteratorT find_format_all_copy_impl(
        function InputT (line 109) | inline InputT find_format_all_copy_impl2(
        function InputT (line 157) | inline InputT find_format_all_copy_impl(
        function find_format_all_impl2 (line 183) | inline void find_format_all_impl2(
        function find_format_all_impl (line 253) | inline void find_format_all_impl(

FILE: deps/boost/include/boost/algorithm/string/detail/find_format_store.hpp
  type boost (line 17) | namespace boost {
    type algorithm (line 18) | namespace algorithm {
      type detail (line 19) | namespace detail {
        class find_format_store (line 31) | class find_format_store :
          method find_format_store (line 42) | find_format_store(
          method find_format_store (line 52) | find_format_store& operator=( FindResultT FindResult )
          method format_result_type (line 63) | const format_result_type& format_result()
        function check_find_result (line 74) | bool check_find_result(InputT&, FindResultT& FindResult)

FILE: deps/boost/include/boost/algorithm/string/detail/find_iterator.hpp
  type boost (line 20) | namespace boost {
    type algorithm (line 21) | namespace algorithm {
      type detail (line 22) | namespace detail {
        class find_iterator_base (line 28) | class find_iterator_base
          method find_iterator_base (line 43) | find_iterator_base() {}
          method find_iterator_base (line 45) | find_iterator_base( const find_iterator_base& Other ) :
          method find_iterator_base (line 50) | find_iterator_base( FinderT Finder, int ) :
          method match_type (line 57) | match_type do_find(
          method is_null (line 72) | bool is_null() const

FILE: deps/boost/include/boost/algorithm/string/detail/finder.hpp
  type boost (line 24) | namespace boost {
    type algorithm (line 25) | namespace algorithm {
      type detail (line 26) | namespace detail {
        type first_finderF (line 37) | struct first_finderF
          method first_finderF (line 43) | first_finderF( const SearchT& Search, PredicateT Comp ) :
          method first_finderF (line 45) | first_finderF(
        type last_finderF (line 101) | struct last_finderF
          method last_finderF (line 110) | last_finderF( const SearchT& Search, PredicateT Comp ) :
          method last_finderF (line 112) | last_finderF(
          method findit (line 139) | iterator_range<ForwardIteratorT>
          method findit (line 164) | iterator_range<ForwardIteratorT>
        type nth_finderF (line 210) | struct nth_finderF
          method nth_finderF (line 222) | nth_finderF(
          method nth_finderF (line 229) | nth_finderF(
          method find_forward (line 259) | iterator_range<ForwardIteratorT>
          method find_backward (line 293) | iterator_range<ForwardIteratorT>
        function find_head_impl (line 336) | iterator_range<ForwardIteratorT>
        function find_head_impl (line 354) | iterator_range<ForwardIteratorT>
        function find_head_impl (line 371) | iterator_range<ForwardIteratorT>
        function find_tail_impl (line 384) | iterator_range<ForwardIteratorT>
        function find_tail_impl (line 410) | iterator_range<ForwardIteratorT>
        function find_tail_impl (line 428) | iterator_range<ForwardIteratorT>
        function find_tail_impl (line 445) | iterator_range<ForwardIteratorT>
        type head_finderF (line 468) | struct head_finderF
          method head_finderF (line 471) | head_finderF( int N ) : m_N(N) {}
        type tail_finderF (line 506) | struct tail_finderF
          method tail_finderF (line 509) | tail_finderF( int N ) : m_N(N) {}
        type token_finderF (line 548) | struct token_finderF
          method token_finderF (line 551) | token_finderF(
        type range_finderF (line 603) | struct range_finderF
          method range_finderF (line 609) | range_finderF(
          method range_finderF (line 613) | range_finderF(const iterator_range<input_iterator_type>& Range) :

FILE: deps/boost/include/boost/algorithm/string/detail/finder_regex.hpp
  type boost (line 21) | namespace boost {
    type algorithm (line 22) | namespace algorithm {
      type detail (line 23) | namespace detail {
        type regex_search_result (line 29) | struct regex_search_result :
          method regex_search_result (line 43) | regex_search_result( const match_results_type& MatchResults ) :
          method regex_search_result (line 48) | regex_search_result( IteratorT End ) :
          method regex_search_result (line 51) | regex_search_result( const regex_search_result& Other ) :
          method regex_search_result (line 56) | regex_search_result& operator=( const regex_search_result& Other )
          method match_results_type (line 64) | const match_results_type& match_results() const
        type find_regexF (line 79) | struct find_regexF
          method find_regexF (line 85) | find_regexF( regex_reference_type Rx, match_flag_type MatchFlags...

FILE: deps/boost/include/boost/algorithm/string/detail/formatter.hpp
  type boost (line 24) | namespace boost {
    type algorithm (line 25) | namespace algorithm {
      type detail (line 26) | namespace detail {
        type const_formatF (line 32) | struct const_formatF
          method const_formatF (line 41) | const_formatF(const RangeT& Format) :
          method result_type (line 47) | result_type& operator()(const Range2T&)
          method result_type (line 54) | const result_type& operator()(const Range2T&) const
        type identity_formatF (line 67) | struct identity_formatF
          method RangeT (line 71) | const RangeT& operator()(const Range2T& Replace) const
        type empty_formatF (line 81) | struct empty_formatF
        type dissect_formatF (line 94) | struct dissect_formatF
          method dissect_formatF (line 98) | dissect_formatF(FinderT Finder) :

FILE: deps/boost/include/boost/algorithm/string/detail/formatter_regex.hpp
  type boost (line 19) | namespace boost {
    type algorithm (line 20) | namespace algorithm {
      type detail (line 21) | namespace detail {
        type regex_formatF (line 27) | struct regex_formatF
          method regex_formatF (line 35) | regex_formatF( const StringT& Fmt, match_flag_type Flags=format_...
          method result_type (line 39) | result_type operator()(

FILE: deps/boost/include/boost/algorithm/string/detail/predicate.hpp
  type boost (line 17) | namespace boost {
    type algorithm (line 18) | namespace algorithm {
      type detail (line 19) | namespace detail {
        function ends_with_iter_select (line 27) | inline bool ends_with_iter_select(
        function ends_with_iter_select (line 50) | inline bool ends_with_iter_select(

FILE: deps/boost/include/boost/algorithm/string/detail/replace_storage.hpp
  type boost (line 20) | namespace boost {
    type algorithm (line 21) | namespace algorithm {
      type detail (line 22) | namespace detail {
        function OutputIteratorT (line 27) | inline OutputIteratorT move_from_storage(
        function copy_to_storage (line 45) | inline void copy_to_storage(
        type process_segment_helper (line 56) | struct process_segment_helper
          method ForwardIteratorT (line 63) | ForwardIteratorT operator()(
        type process_segment_helper< true > (line 112) | struct process_segment_helper< true >
          method ForwardIteratorT (line 119) | ForwardIteratorT operator()(
        function ForwardIteratorT (line 141) | inline ForwardIteratorT process_segment(

FILE: deps/boost/include/boost/algorithm/string/detail/sequence.hpp
  type boost (line 22) | namespace boost {
    type algorithm (line 23) | namespace algorithm {
      type detail (line 24) | namespace detail {
        function insert (line 29) | inline void insert(
        function insert (line 39) | inline void insert(
        function erase (line 54) | inline typename InputT::iterator erase(
        type replace_const_time_helper (line 67) | struct replace_const_time_helper
        type replace_const_time_helper< true > (line 102) | struct replace_const_time_helper< true >
        type replace_native_helper (line 130) | struct replace_native_helper
        type replace_native_helper< true > (line 150) | struct replace_native_helper< true >
        function replace (line 167) | inline void replace(
        function replace (line 179) | inline void replace(

FILE: deps/boost/include/boost/algorithm/string/detail/trim.hpp
  type boost (line 17) | namespace boost {
    type algorithm (line 18) | namespace algorithm {
      type detail (line 19) | namespace detail {
        function ForwardIteratorT (line 24) | inline ForwardIteratorT trim_end_iter_select(
        function ForwardIteratorT (line 45) | inline ForwardIteratorT trim_end_iter_select(
        function ForwardIteratorT (line 61) | inline ForwardIteratorT trim_begin(
        function ForwardIteratorT (line 78) | inline ForwardIteratorT trim_end(

FILE: deps/boost/include/boost/algorithm/string/detail/util.hpp
  type boost (line 18) | namespace boost {
    type algorithm (line 19) | namespace algorithm {
      type detail (line 20) | namespace detail {
        type empty_container (line 32) | struct empty_container
          method const_iterator (line 45) | const_iterator begin() const
          method const_iterator (line 50) | const_iterator end() const
          method empty (line 55) | bool empty() const
          method size_type (line 60) | size_type size() const
        function OutputIteratorT (line 70) | inline OutputIteratorT bounded_copy(
        type copy_iterator_rangeF (line 92) | struct copy_iterator_rangeF
          method SeqT (line 96) | SeqT operator()( const iterator_range<IteratorT>& Range ) const

FILE: deps/boost/include/boost/algorithm/string/erase.hpp
  type boost (line 31) | namespace boost {
    type algorithm (line 32) | namespace algorithm {
      function OutputIteratorT (line 50) | inline OutputIteratorT erase_range_copy(
      function SequenceT (line 69) | inline SequenceT erase_range_copy(
      function erase_range (line 90) | inline void erase_range(
      function OutputIteratorT (line 122) | inline OutputIteratorT erase_first_copy(
      function SequenceT (line 139) | inline SequenceT erase_first_copy(
      function erase_first (line 158) | inline void erase_first(
      function OutputIteratorT (line 190) | inline OutputIteratorT ierase_first_copy(
      function SequenceT (line 208) | inline SequenceT ierase_first_copy(
      function ierase_first (line 229) | inline void ierase_first(
      function OutputIteratorT (line 260) | inline OutputIteratorT erase_last_copy(
      function SequenceT (line 277) | inline SequenceT erase_last_copy(
      function erase_last (line 296) | inline void erase_last(
      function OutputIteratorT (line 328) | inline OutputIteratorT ierase_last_copy(
      function SequenceT (line 346) | inline SequenceT ierase_last_copy(
      function ierase_last (line 367) | inline void ierase_last(
      function OutputIteratorT (line 401) | inline OutputIteratorT erase_nth_copy(
      function SequenceT (line 419) | inline SequenceT erase_nth_copy(
      function erase_nth (line 441) | inline void erase_nth(
      function OutputIteratorT (line 476) | inline OutputIteratorT ierase_nth_copy(
      function SequenceT (line 495) | inline SequenceT ierase_nth_copy(
      function ierase_nth (line 519) | inline void ierase_nth(
      function OutputIteratorT (line 553) | inline OutputIteratorT erase_all_copy(
      function SequenceT (line 570) | inline SequenceT erase_all_copy(
      function erase_all (line 589) | inline void erase_all(
      function OutputIteratorT (line 621) | inline OutputIteratorT ierase_all_copy(
      function SequenceT (line 639) | inline SequenceT ierase_all_copy(
      function ierase_all (line 660) | inline void ierase_all(
      function OutputIteratorT (line 694) | inline OutputIteratorT erase_head_copy(
      function SequenceT (line 711) | inline SequenceT erase_head_copy(
      function erase_head (line 733) | inline void erase_head(
      function OutputIteratorT (line 766) | inline OutputIteratorT erase_tail_copy(
      function SequenceT (line 783) | inline SequenceT erase_tail_copy(
      function erase_tail (line 805) | inline void erase_tail(

FILE: deps/boost/include/boost/algorithm/string/find.hpp
  type boost (line 32) | namespace boost {
    type algorithm (line 33) | namespace algorithm {
      function find (line 50) | inline iterator_range<
      function find_first (line 78) | inline iterator_range<
      function ifind_first (line 104) | inline iterator_range<
      function find_last (line 131) | inline iterator_range<
      function ifind_last (line 157) | inline iterator_range<
      function find_nth (line 185) | inline iterator_range<
      function ifind_nth (line 215) | inline iterator_range<
      function find_head (line 247) | inline iterator_range<
      function find_tail (line 278) | inline iterator_range<
      function find_token (line 307) | inline iterator_range<

FILE: deps/boost/include/boost/algorithm/string/find_format.hpp
  type boost (line 31) | namespace boost {
    type algorithm (line 32) | namespace algorithm {
      function OutputIteratorT (line 57) | inline OutputIteratorT find_format_copy(
      function SequenceT (line 92) | inline SequenceT find_format_copy(
      function find_format (line 128) | inline void find_format(
      function OutputIteratorT (line 176) | inline OutputIteratorT find_format_all_copy(
      function SequenceT (line 212) | inline SequenceT find_format_all_copy(
      function find_format_all (line 250) | inline void find_format_all(

FILE: deps/boost/include/boost/algorithm/string/find_iterator.hpp
  type boost (line 33) | namespace boost {
    type algorithm (line 34) | namespace algorithm {
      class find_iterator (line 50) | class find_iterator :
        method find_iterator (line 77) | find_iterator() {}
        method find_iterator (line 83) | find_iterator( const find_iterator& Other ) :
        method find_iterator (line 94) | find_iterator(
        method find_iterator (line 111) | find_iterator(
        method match_type (line 127) | const match_type& dereference() const
        method increment (line 133) | void increment()
        method equal (line 139) | bool equal( const find_iterator& Other ) const
        method eof (line 160) | bool eof() const
      function make_find_iterator (line 181) | inline find_iterator<
      class split_iterator (line 206) | class split_iterator :
        method split_iterator (line 233) | split_iterator() :
        method split_iterator (line 243) | split_iterator( const split_iterator& Other ) :
        method split_iterator (line 257) | split_iterator(
        method split_iterator (line 279) | split_iterator(
        method match_type (line 302) | const match_type& dereference() const
        method increment (line 308) | void increment()
        method equal (line 326) | bool equal( const split_iterator& Other ) const
        method eof (line 348) | bool eof() const
      function make_split_iterator (line 366) | inline split_iterator<

FILE: deps/boost/include/boost/algorithm/string/finder.hpp
  type boost (line 34) | namespace boost {
    type algorithm (line 35) | namespace algorithm {
      function first_finder (line 49) | inline detail::first_finderF<
      function first_finder (line 66) | inline detail::first_finderF<
      function last_finder (line 89) | inline detail::last_finderF<
      function last_finder (line 105) | inline detail::last_finderF<
      function nth_finder (line 128) | inline detail::nth_finderF<
      function nth_finder (line 146) | inline detail::nth_finderF<
      function head_finder (line 172) | inline detail::head_finderF
      function tail_finder (line 189) | inline detail::tail_finderF
      function token_finder (line 214) | inline detail::token_finderF<PredicateT>
      function range_finder (line 233) | inline detail::range_finderF<ForwardIteratorT>
      function range_finder (line 246) | inline detail::range_finderF<ForwardIteratorT>

FILE: deps/boost/include/boost/algorithm/string/formatter.hpp
  type boost (line 31) | namespace boost {
    type algorithm (line 32) | namespace algorithm {
      function const_formatter (line 45) | inline detail::const_formatF<
      function identity_formatter (line 63) | inline detail::identity_formatF<
      function empty_formatter (line 83) | inline detail::empty_formatF<
      function dissect_formatter (line 101) | inline detail::dissect_formatF< FinderT >

FILE: deps/boost/include/boost/algorithm/string/iter_find.hpp
  type boost (line 41) | namespace boost {
    type algorithm (line 42) | namespace algorithm {

FILE: deps/boost/include/boost/algorithm/string/join.hpp
  type boost (line 28) | namespace boost {
    type algorithm (line 29) | namespace algorithm {
      function join (line 45) | inline typename range_value<SequenceSequenceT>::type
      function join_if (line 95) | inline typename range_value<SequenceSequenceT>::type

FILE: deps/boost/include/boost/algorithm/string/predicate.hpp
  type boost (line 38) | namespace boost {
    type algorithm (line 39) | namespace algorithm {
      function starts_with (line 58) | inline bool starts_with(
      function starts_with (line 92) | inline bool starts_with(
      function istarts_with (line 113) | inline bool istarts_with(
      function ends_with (line 140) | inline bool ends_with(
      function ends_with (line 169) | inline bool ends_with(
      function iends_with (line 190) | inline bool iends_with(
      function contains (line 214) | inline bool contains(
      function contains (line 238) | inline bool contains(
      function icontains (line 258) | inline bool icontains(
      function equals (line 285) | inline bool equals(
      function equals (line 319) | inline bool equals(
      function iequals (line 342) | inline bool iequals(
      function lexicographical_compare (line 371) | inline bool lexicographical_compare(
      function lexicographical_compare (line 392) | inline bool lexicographical_compare(
      function ilexicographical_compare (line 416) | inline bool ilexicographical_compare(
      function all (line 439) | inline bool all(

FILE: deps/boost/include/boost/algorithm/string/predicate_facade.hpp
  type boost (line 23) | namespace boost {
    type algorithm (line 24) | namespace algorithm {
      type predicate_facade (line 36) | struct predicate_facade {}

FILE: deps/boost/include/boost/algorithm/string/regex.hpp
  type boost (line 32) | namespace boost {
    type algorithm (line 33) | namespace algorithm {
      function find_regex (line 56) | inline iterator_range<
      function OutputIteratorT (line 94) | inline OutputIteratorT replace_regex_copy(
      function SequenceT (line 117) | inline SequenceT replace_regex_copy(
      function replace_regex (line 144) | inline void replace_regex(
      function OutputIteratorT (line 180) | inline OutputIteratorT replace_all_regex_copy(
      function SequenceT (line 203) | inline SequenceT replace_all_regex_copy(
      function replace_all_regex (line 230) | inline void replace_all_regex(
      function OutputIteratorT (line 264) | inline OutputIteratorT erase_regex_copy(
      function SequenceT (line 285) | inline SequenceT erase_regex_copy(
      function erase_regex (line 309) | inline void erase_regex(
      function OutputIteratorT (line 343) | inline OutputIteratorT erase_all_regex_copy(
      function SequenceT (line 364) | inline SequenceT erase_all_regex_copy(
      function erase_all_regex (line 388) | inline void erase_all_regex(
      function SequenceSequenceT (line 428) | inline SequenceSequenceT& find_all_regex(
     
Copy disabled (too large) Download .json
Condensed preview — 25774 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (110,284K chars).
[
  {
    "path": ".gitignore",
    "chars": 656,
    "preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 5070,
    "preview": "cmake_minimum_required(VERSION 3.5)\n\n# Store in CMAKE_DEB_HOST_ARCH var the current build architecture\nexecute_process(C"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.cn.md",
    "chars": 1618,
    "preview": "## 项目说明:\n### 本项目是基于mediasoup v3 版本 webrtc m77版本 的sfu的js版本修改成的c++版本.\n### 支持和js版本一样的完整demo功能,但是本项目是直接把worker进程代码集成 到了demo可"
  },
  {
    "path": "README.md",
    "chars": 3496,
    "preview": "\n## [中文说明请点击](https://github.com/yanhua133/mediasoup-sfu-cpp/blob/main/README.cn.md)\n## [gitee地址](https://gitee.com/yanh"
  },
  {
    "path": "build.sh",
    "chars": 437,
    "preview": "cur_dir=$(cd \"$(dirname \"$0\")\"; pwd)\nparent_dir=$(dirname $(pwd))\n\nif [ -e /etc ]; then\n   /bin/rm -rf build\n   /bin/rm "
  },
  {
    "path": "builddeps.sh",
    "chars": 431,
    "preview": "cur_dir=$(cd \"$(dirname \"$0\")\"; pwd)\nparent_dir=$(dirname $(pwd))\ncd script\n#./buildzlib.sh\n#./buildopenssl.sh\n#./buildb"
  },
  {
    "path": "cmake/llvm.toolchain.cmake",
    "chars": 860,
    "preview": "cmake_minimum_required( VERSION 2.6.3 )\nset(CMAKE_SYSTEM_NAME Linux )\n \nSET (CMAKE_C_COMPILER             \"/usr/bin/clan"
  },
  {
    "path": "demo/AppComponent.hpp",
    "chars": 8066,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/CMakeLists.txt",
    "chars": 6835,
    "preview": "cmake_minimum_required(VERSION 3.5)\n\nset(PROJECT_NAME \"sfu-demo\")\n\nproject(${PROJECT_NAME})\nmessage(\"\\n=========== ${PRO"
  },
  {
    "path": "demo/Config.cpp",
    "chars": 3436,
    "preview": "#include \"Config.hpp\"\n#include <fstream>\n#include \"Log.hpp\"\n#include <algorithm>\n#include <string>\n#include <iostream>\n#"
  },
  {
    "path": "demo/Config.hpp",
    "chars": 649,
    "preview": "#pragma once\n#include <fstream>\n#include \"Log.hpp\"\n#include <algorithm>\n#include <string>\n#include <iostream>\n#include <"
  },
  {
    "path": "demo/PeerOld.cpp",
    "chars": 544,
    "preview": "#include \"Peer.hpp\"\n#include \"Log.hpp\"\n\nusing namespace std;\nusing namespace nlohmann;\n\n\n\n    Peer::Peer() {\n\n    }\n    "
  },
  {
    "path": "demo/PeerOld.hpp",
    "chars": 1611,
    "preview": "#ifndef _PEER_H\n#define _PEER_H\n\n#include \"json.hpp\"\n#include \"Transport/WebSocketTransport.h\"\n#include <stdexcept>\n#inc"
  },
  {
    "path": "demo/RoomOld.cpp",
    "chars": 5278,
    "preview": "#include \"Room.hpp\"\n#include <iostream>\n#include <string>\n#include <cstring>\n\n\nvoid to_json(json& j, const _device& st){"
  },
  {
    "path": "demo/RoomOld.hpp",
    "chars": 89377,
    "preview": "#pragma once\n#include \"IMediasoup.hpp\"\n#include \"IWorker.hpp\"\n#include \"Log.hpp\"\n#include \"Consumer.hpp\"\n#include \"Route"
  },
  {
    "path": "demo/Server.cpp",
    "chars": 29684,
    "preview": "#include \"Server.hpp\"\n// #include <webservice/file_request_handler.hpp>\n// #include <webservice/ws_service.hpp>\n// #incl"
  },
  {
    "path": "demo/Server.hpp",
    "chars": 3763,
    "preview": "#pragma once\n// #include <webservice/file_request_handler.hpp>\n// #include <webservice/ws_service.hpp>\n// #include <webs"
  },
  {
    "path": "demo/Transfmt.cpp",
    "chars": 8280,
    "preview": "#include \"Transfmt.hpp\"\n#include <string>\n#include <sstream>\n#include <iostream> \n#include \"Log.hpp\"\n#include \"Router.hp"
  },
  {
    "path": "demo/Transfmt.hpp",
    "chars": 2242,
    "preview": "#pragma once\n#include <string>\n#include \"./rooms/Peer.hpp\"\n#include \"Router.hpp\"\n#include \"Producer.hpp\"\n#include \"json."
  },
  {
    "path": "demo/config.json",
    "chars": 2714,
    "preview": "{\n\t\"domain\" : \"localhost\",\n\t\"https\"  :\n\t{\n\t\t\"listenIp\"   : \"0.0.0.0\",\n\t\t\"listenPort\" : 4443,\n\t\t\"tls\"        :\n\t\t{\n\t\t\t\"ce"
  },
  {
    "path": "demo/controller/RoomsController.hpp",
    "chars": 3638,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/controller/StatisticsController.hpp",
    "chars": 2426,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/dto/ConfigDto.hpp",
    "chars": 3166,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/dto/DTOs.hpp",
    "chars": 2826,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/main.cpp",
    "chars": 10750,
    "preview": "#include <stdio.h>\n#include <iostream>\n#include \"Config.hpp\"\n\n#include \"common.hpp\"\n#include \"DepLibSRTP.hpp\"\n#include \""
  },
  {
    "path": "demo/rooms/Lobby.cpp",
    "chars": 3407,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/rooms/Lobby.hpp",
    "chars": 2828,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/rooms/Message.cpp",
    "chars": 3273,
    "preview": "//\n// Created by pan chenguang on 2021/2/4.\n//\n\n#include \"Message.h\"\n#include \"../utils/util.h\"\n\nusing namespace std;\nus"
  },
  {
    "path": "demo/rooms/Message.h",
    "chars": 595,
    "preview": "//\n// Created by pan chenguang on 2021/2/4.\n//\n\n#ifndef TESTBEASTCLION_MESSAGE_H\n#define TESTBEASTCLION_MESSAGE_H\n\n#incl"
  },
  {
    "path": "demo/rooms/Peer.cpp",
    "chars": 12994,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/rooms/Peer.hpp",
    "chars": 5893,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/rooms/Room.cpp",
    "chars": 48630,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/rooms/Room.hpp",
    "chars": 8278,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/utils/Nickname.cpp",
    "chars": 4139,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/utils/Nickname.hpp",
    "chars": 1647,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/utils/Statistics.cpp",
    "chars": 3094,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/utils/Statistics.hpp",
    "chars": 3123,
    "preview": "/***************************************************************************\n *\n * Project:   ______                ____"
  },
  {
    "path": "demo/utils/util.cpp",
    "chars": 922,
    "preview": "#include \"util.h\"\n#include <random>\n\nusing std::default_random_engine;\nusing std::uniform_real_distribution;\n\nint genera"
  },
  {
    "path": "demo/utils/util.h",
    "chars": 414,
    "preview": "#ifndef PEERTIMER_H\n#define PEERTIMER_H\n\n#include <iostream>\n#include <thread>\n#include <chrono>\n#include <functional>\n/"
  },
  {
    "path": "deps/boost/build.bat",
    "chars": 248,
    "preview": ".\\bootstrap.bat --with-libraries=system,context,coroutine,thread,regex,random,atomic,date_time,asio,beast\n.\\b2 --toolset"
  },
  {
    "path": "deps/boost/build.sh",
    "chars": 1157,
    "preview": "cur_dir=$(cd \"$(dirname \"$0\")\"; pwd)\nparent_dir=$(dirname $(pwd))\nmain_dir=$(dirname ${parent_dir})\necho \"cur_dir=${cur_"
  },
  {
    "path": "deps/boost/include/boost/accumulators/accumulators.hpp",
    "chars": 1410,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file accumulators.hpp\r\n/// Include"
  },
  {
    "path": "deps/boost/include/boost/accumulators/accumulators_fwd.hpp",
    "chars": 8526,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// accumulators_fwd.hpp\r\n//\r\n//  Copyri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulator_base.hpp",
    "chars": 1527,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// accumulator_base.hpp\r\n//\r\n//  Copyri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulator_concept.hpp",
    "chars": 754,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// accumulator_concept.hpp\r\n//\r\n//  Cop"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulator_set.hpp",
    "chars": 24446,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// accumulator_set.hpp\r\n//\r\n//  Copyrig"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulators/droppable_accumulator.hpp",
    "chars": 10464,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// droppable_accumulator.hpp\r\n//\r\n//  C"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulators/external_accumulator.hpp",
    "chars": 3714,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// external_accumulator.hpp\r\n//\r\n//  Co"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulators/reference_accumulator.hpp",
    "chars": 2626,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// reference_accumulator.hpp\r\n//\r\n//  C"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/accumulators/value_accumulator.hpp",
    "chars": 2509,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// value_accumulator.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/depends_on.hpp",
    "chars": 15628,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// depends_on.hpp\r\n//\r\n//  Copyright 20"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/external.hpp",
    "chars": 809,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// external.hpp\r\n//\r\n//  Copyright 2005"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/extractor.hpp",
    "chars": 11545,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// extractor.hpp\r\n//\r\n//  Copyright 200"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/features.hpp",
    "chars": 952,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// features.hpp\r\n//\r\n//  Copyright 2005"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/parameters/accumulator.hpp",
    "chars": 748,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// accumulator.hpp\r\n//\r\n//  Copyright 2"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/parameters/sample.hpp",
    "chars": 718,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// sample.hpp\r\n//\r\n//  Copyright 2005 E"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/parameters/weight.hpp",
    "chars": 752,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weight.hpp\r\n//\r\n//  Copyright 2005 E"
  },
  {
    "path": "deps/boost/include/boost/accumulators/framework/parameters/weights.hpp",
    "chars": 751,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weights.hpp\r\n//\r\n//  Copyright 2005 "
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/function1.hpp",
    "chars": 2756,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/function2.hpp",
    "chars": 416,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/function3.hpp",
    "chars": 419,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/function4.hpp",
    "chars": 419,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/function_n.hpp",
    "chars": 6873,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/detail/pod_singleton.hpp",
    "chars": 550,
    "preview": "// Copyright David Abrahams 2006. Distributed under the Boost\r\n// Software License, Version 1.0. (See accompanying\r\n// f"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/functional/complex.hpp",
    "chars": 2398,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file complex.hpp\r\n///\r\n//  Copyrig"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/functional/valarray.hpp",
    "chars": 15974,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file valarray.hpp\r\n///\r\n//  Copyri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/functional/vector.hpp",
    "chars": 13137,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file vector.hpp\r\n///\r\n//  Copyrigh"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/functional.hpp",
    "chars": 23250,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file functional.hpp\r\n///\r\n//  Copy"
  },
  {
    "path": "deps/boost/include/boost/accumulators/numeric/functional_fwd.hpp",
    "chars": 9679,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file functional_fwd.hpp\r\n///\r\n//  "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/count.hpp",
    "chars": 2100,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// count.hpp\r\n//\r\n//  Copyright 2005 Er"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/covariance.hpp",
    "chars": 7356,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// covariance.hpp\r\n//\r\n//  Copyright 20"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/density.hpp",
    "chars": 10273,
    "preview": "\r\n///////////////////////////////////////////////////////////////////////////////\r\n// density.hpp\r\n//\r\n//  Copyright 200"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/error_of.hpp",
    "chars": 2687,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// error_of.hpp\r\n//\r\n//  Copyright 2005"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/error_of_mean.hpp",
    "chars": 2266,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// error_of.hpp\r\n//\r\n//  Copyright 2005"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/extended_p_square.hpp",
    "chars": 11942,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// extended_p_square.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/extended_p_square_quantile.hpp",
    "chars": 12853,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// extended_p_square_quantile.hpp\r\n//\r\n"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/kurtosis.hpp",
    "chars": 3980,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// kurtosis.hpp\r\n//\r\n//  Copyright 2006"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/max.hpp",
    "chars": 2386,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// max.hpp\r\n//\r\n//  Copyright 2005 Eric"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/mean.hpp",
    "chars": 9642,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// mean.hpp\r\n//\r\n//  Copyright 2005 Eri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/median.hpp",
    "chars": 10566,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// median.hpp\r\n//\r\n//  Copyright 2006 E"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/min.hpp",
    "chars": 2386,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// min.hpp\r\n//\r\n//  Copyright 2005 Eric"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/moment.hpp",
    "chars": 3568,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// moment.hpp\r\n//\r\n//  Copyright 2005 E"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/p_square_cumul_dist.hpp",
    "chars": 10644,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// p_square_cumulative_distribution.hpp"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/p_square_cumulative_distribution.hpp",
    "chars": 974,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// p_square_cumulative_distribution.hpp"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/p_square_quantile.hpp",
    "chars": 10357,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// p_square_quantile.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/parameters/quantile_probability.hpp",
    "chars": 789,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// quantile_probability.hpp\r\n//\r\n//  Co"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/peaks_over_threshold.hpp",
    "chars": 17959,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// peaks_over_threshold.hpp\r\n//\r\n//  Co"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/pot_quantile.hpp",
    "chars": 7548,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// pot_quantile.hpp\r\n//\r\n//  Copyright "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/pot_tail_mean.hpp",
    "chars": 8021,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// pot_tail_mean.hpp\r\n//\r\n//  Copyright"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_count.hpp",
    "chars": 2658,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_count.hpp\r\n//\r\n// Copyright "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_mean.hpp",
    "chars": 6949,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_mean.hpp\r\n// Copyright (C) 2"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_moment.hpp",
    "chars": 3861,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_moment.hpp\r\n// Copyright 200"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_sum.hpp",
    "chars": 2969,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_sum.hpp\r\n//\r\n// Copyright 20"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_variance.hpp",
    "chars": 9745,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_variance.hpp\r\n// Copyright ("
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/rolling_window.hpp",
    "chars": 7475,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// rolling_window.hpp\r\n//\r\n// Copyright"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/skewness.hpp",
    "chars": 3809,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// skewness.hpp\r\n//\r\n//  Copyright 2006"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/stats.hpp",
    "chars": 1001,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file stats.hpp\r\n/// Contains the s"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/sum.hpp",
    "chars": 4030,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// sum.hpp\r\n//\r\n//  Copyright 2005 Eric"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/sum_kahan.hpp",
    "chars": 5282,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// sum_kahan.hpp\r\n//\r\n//  Copyright 201"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/tail.hpp",
    "chars": 11364,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// tail.hpp\r\n//\r\n//  Copyright 2005 Eri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/tail_mean.hpp",
    "chars": 9412,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// tail_mean.hpp\r\n//\r\n//  Copyright 200"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/tail_quantile.hpp",
    "chars": 5697,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// tail_quantile.hpp\r\n//\r\n//  Copyright"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/tail_variate.hpp",
    "chars": 4654,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// tail_variate.hpp\r\n//\r\n//  Copyright "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/tail_variate_means.hpp",
    "chars": 10733,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// tail_variate_means.hpp\r\n//\r\n//  Copy"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/times2_iterator.hpp",
    "chars": 2035,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// times2_iterator.hpp\r\n//\r\n//  Copyrig"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/variance.hpp",
    "chars": 7769,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// variance.hpp\r\n//\r\n//  Copyright 2005"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/variates/covariate.hpp",
    "chars": 817,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weight.hpp\r\n//\r\n//  Copyright 2005 E"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_covariance.hpp",
    "chars": 5384,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_covariance.hpp\r\n//\r\n//  Cop"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_density.hpp",
    "chars": 9755,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_density.hpp\r\n//\r\n//  Copyri"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_extended_p_square.hpp",
    "chars": 13144,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_extended_p_square.hpp\r\n//\r\n"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_kurtosis.hpp",
    "chars": 4252,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_kurtosis.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_mean.hpp",
    "chars": 6833,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_mean.hpp\r\n//\r\n//  Copyright"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_median.hpp",
    "chars": 8922,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_median.hpp\r\n//\r\n//  Copyrig"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_moment.hpp",
    "chars": 3487,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_moment.hpp\r\n//\r\n//  Copyrig"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp",
    "chars": 11333,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_p_square_cumul_dist.hpp\r\n//"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp",
    "chars": 1028,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_p_square_cumulative_distrib"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_p_square_quantile.hpp",
    "chars": 11376,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_p_square_quantile.hpp\r\n//\r\n"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp",
    "chars": 12654,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_peaks_over_threshold.hpp\r\n/"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_skewness.hpp",
    "chars": 3945,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_skewness.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_sum.hpp",
    "chars": 3762,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_sum.hpp\r\n//\r\n//  Copyright "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_sum_kahan.hpp",
    "chars": 4705,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_sum_kahan.hpp\r\n//\r\n//  Copy"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_tail_mean.hpp",
    "chars": 5957,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_tail_mean.hpp\r\n//\r\n//  Copy"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_tail_quantile.hpp",
    "chars": 5281,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_tail_quantile.hpp\r\n//\r\n//  "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_tail_variate_means.hpp",
    "chars": 10305,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_tail_variate_means.hpp\r\n//\r"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/weighted_variance.hpp",
    "chars": 6967,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// weighted_variance.hpp\r\n//\r\n//  Copyr"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics/with_error.hpp",
    "chars": 1321,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// with_error.hpp\r\n//\r\n//  Copyright 20"
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics.hpp",
    "chars": 3426,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n/// \\file statistics.hpp\r\n/// Includes "
  },
  {
    "path": "deps/boost/include/boost/accumulators/statistics_fwd.hpp",
    "chars": 14053,
    "preview": "///////////////////////////////////////////////////////////////////////////////\r\n// statistics_fwd.hpp\r\n//\r\n//  Copyrigh"
  },
  {
    "path": "deps/boost/include/boost/algorithm/algorithm.hpp",
    "chars": 2510,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2014.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompan"
  },
  {
    "path": "deps/boost/include/boost/algorithm/apply_permutation.hpp",
    "chars": 4639,
    "preview": "/*\r\n  Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2017\r\n\r\n  Distributed under the Boost Software License, Ve"
  },
  {
    "path": "deps/boost/include/boost/algorithm/clamp.hpp",
    "chars": 8093,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/all_of.hpp",
    "chars": 2905,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/any_of.hpp",
    "chars": 2897,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/copy_if.hpp",
    "chars": 5605,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/copy_n.hpp",
    "chars": 1311,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/find_if_not.hpp",
    "chars": 1972,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/iota.hpp",
    "chars": 2201,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/is_partitioned.hpp",
    "chars": 2206,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/is_permutation.hpp",
    "chars": 8282,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acco"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/is_sorted.hpp",
    "chars": 11353,
    "preview": "//  Copyright (c) 2010 Nuovation System Designs, LLC\r\n//    Grant Erickson <gerickson@nuovations.com>\r\n//\r\n//  Reworked "
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/none_of.hpp",
    "chars": 2882,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/one_of.hpp",
    "chars": 3001,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/partition_copy.hpp",
    "chars": 3038,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx11/partition_point.hpp",
    "chars": 2161,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx14/equal.hpp",
    "chars": 4170,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx14/is_permutation.hpp",
    "chars": 3709,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2014.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx14/mismatch.hpp",
    "chars": 2698,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/exclusive_scan.hpp",
    "chars": 1610,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/for_each_n.hpp",
    "chars": 1148,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/inclusive_scan.hpp",
    "chars": 2063,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/reduce.hpp",
    "chars": 2131,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/transform_exclusive_scan.hpp",
    "chars": 1404,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/transform_inclusive_scan.hpp",
    "chars": 2071,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/cxx17/transform_reduce.hpp",
    "chars": 1912,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2017.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accompany"
  },
  {
    "path": "deps/boost/include/boost/algorithm/find_backward.hpp",
    "chars": 2619,
    "preview": "/*\r\n   Copyright (c) T. Zachary Laine 2018.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accomp"
  },
  {
    "path": "deps/boost/include/boost/algorithm/find_not.hpp",
    "chars": 1024,
    "preview": "/*\r\n   Copyright (c) T. Zachary Laine 2018.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See accomp"
  },
  {
    "path": "deps/boost/include/boost/algorithm/gather.hpp",
    "chars": 4290,
    "preview": "/* \r\n    Copyright 2008 Adobe Systems Incorporated\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See"
  },
  {
    "path": "deps/boost/include/boost/algorithm/hex.hpp",
    "chars": 13448,
    "preview": "/*\r\n   Copyright (c) Marshall Clow 2011-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acco"
  },
  {
    "path": "deps/boost/include/boost/algorithm/is_palindrome.hpp",
    "chars": 4420,
    "preview": "/*\r\n  Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2016\r\n\r\n  Distributed under the Boost Software License, Ve"
  },
  {
    "path": "deps/boost/include/boost/algorithm/is_partitioned_until.hpp",
    "chars": 2640,
    "preview": "/*\r\n   Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.by>, 2017.\r\n\r\n   Distributed under the Boost Software License, "
  },
  {
    "path": "deps/boost/include/boost/algorithm/minmax.hpp",
    "chars": 1329,
    "preview": "//  (C) Copyright Herve Bronnimann 2004.\r\n//\r\n// Distributed under the Boost Software License, Version 1.0. (See accompa"
  },
  {
    "path": "deps/boost/include/boost/algorithm/minmax_element.hpp",
    "chars": 18043,
    "preview": "//  (C) Copyright Herve Bronnimann 2004.\r\n//\r\n// Distributed under the Boost Software License, Version 1.0. (See accompa"
  },
  {
    "path": "deps/boost/include/boost/algorithm/searching/boyer_moore.hpp",
    "chars": 11838,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2010-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/searching/boyer_moore_horspool.hpp",
    "chars": 8963,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2010-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/searching/detail/bm_traits.hpp",
    "chars": 4402,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2010-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/searching/detail/debugging.hpp",
    "chars": 867,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2010-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/searching/knuth_morris_pratt.hpp",
    "chars": 11152,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2010-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/sort_subrange.hpp",
    "chars": 3721,
    "preview": "/* \r\n   Copyright (c) Marshall Clow 2008-2012.\r\n\r\n   Distributed under the Boost Software License, Version 1.0. (See acc"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/case_conv.hpp",
    "chars": 6345,
    "preview": "//  Boost string_algo library case_conv.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/classification.hpp",
    "chars": 11954,
    "preview": "//  Boost string_algo library classification.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/compare.hpp",
    "chars": 6590,
    "preview": "//  Boost string_algo library compare.hpp header file  -------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-200"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/concept.hpp",
    "chars": 2427,
    "preview": "//  Boost string_algo library concept.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-2"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/config.hpp",
    "chars": 818,
    "preview": "//  Boost string_algo library config.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-20"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/constants.hpp",
    "chars": 1035,
    "preview": "//  Boost string_algo library constants.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/case_conv.hpp",
    "chars": 4508,
    "preview": "//  Boost string_algo library string_funct.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/classification.hpp",
    "chars": 12702,
    "preview": "//  Boost string_algo library classification.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/find_format.hpp",
    "chars": 7903,
    "preview": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 20"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/find_format_all.hpp",
    "chars": 10541,
    "preview": "//  Boost string_algo library find_format_all.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Drob"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/find_format_store.hpp",
    "chars": 3247,
    "preview": "//  Boost string_algo library find_format_store.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Dr"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/find_iterator.hpp",
    "chars": 2819,
    "preview": "//  Boost string_algo library find_iterator.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba "
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/finder.hpp",
    "chars": 23556,
    "preview": "//  Boost string_algo library finder.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-20"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/finder_regex.hpp",
    "chars": 4707,
    "preview": "//  Boost string_algo library find_regex.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 200"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/formatter.hpp",
    "chars": 3939,
    "preview": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/formatter_regex.hpp",
    "chars": 2058,
    "preview": "//  Boost string_algo library formatter_regex.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Drob"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/predicate.hpp",
    "chars": 2555,
    "preview": "//  Boost string_algo library predicate.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/replace_storage.hpp",
    "chars": 6103,
    "preview": "//  Boost string_algo library replace_storage.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Drob"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/sequence.hpp",
    "chars": 7729,
    "preview": "//  Boost string_algo library sequence.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/trim.hpp",
    "chars": 3260,
    "preview": "//  Boost string_algo library trim.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-2003"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/detail/util.hpp",
    "chars": 3594,
    "preview": "//  Boost string_algo library util.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-2003"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/erase.hpp",
    "chars": 32657,
    "preview": "//  Boost string_algo library erase.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-200"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/find.hpp",
    "chars": 13405,
    "preview": "//  Boost string_algo library find.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-2003"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/find_format.hpp",
    "chars": 10529,
    "preview": "//  Boost string_algo library find_format.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 20"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/find_iterator.hpp",
    "chars": 12597,
    "preview": "//  Boost string_algo library find_iterator.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba "
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/finder.hpp",
    "chars": 9652,
    "preview": "//  Boost string_algo library finder.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-20"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/formatter.hpp",
    "chars": 4342,
    "preview": "//  Boost string_algo library formatter.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/iter_find.hpp",
    "chars": 7714,
    "preview": "//  Boost string_algo library iter_find.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/join.hpp",
    "chars": 5191,
    "preview": "//  Boost string_algo library join.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002-2006"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/predicate.hpp",
    "chars": 17835,
    "preview": "//  Boost string_algo library predicate.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Droba 2002"
  },
  {
    "path": "deps/boost/include/boost/algorithm/string/predicate_facade.hpp",
    "chars": 1364,
    "preview": "//  Boost string_algo library predicate_facade.hpp header file  ---------------------------//\r\n\r\n//  Copyright Pavol Dro"
  }
]

// ... and 25574 more files (download for full content)

About this extraction

This page contains the full source code of the yanhua133/mediasoup-sfu-cpp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 25774 files (214.9 MB), approximately 27.7M tokens, and a symbol index with 154725 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!