| # Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 
 | # | 
 | # Use of this source code is governed by a BSD-style license | 
 | # that can be found in the LICENSE file in the root of the source | 
 | # tree. An additional intellectual property rights grant can be found | 
 | # in the file PATENTS.  All contributing project authors may | 
 | # be found in the AUTHORS file in the root of the source tree. | 
 |  | 
 | import("../webrtc.gni") | 
 |  | 
 | if (is_android) { | 
 |   import("//build/config/android/config.gni") | 
 |   import("//build/config/android/rules.gni") | 
 | } | 
 |  | 
 | if (!rtc_build_ssl) { | 
 |   config("external_ssl_library") { | 
 |     assert(rtc_ssl_root != "", | 
 |            "You must specify rtc_ssl_root when rtc_build_ssl==0.") | 
 |     include_dirs = [ rtc_ssl_root ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("protobuf_utils") { | 
 |   sources = [ "protobuf_utils.h" ] | 
 |   if (rtc_enable_protobuf) { | 
 |     public_configs = [ "//third_party/protobuf:protobuf_config" ] | 
 |     deps = [ "//third_party/protobuf:protobuf_lite" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("bitstream_reader") { | 
 |   sources = [ | 
 |     "bitstream_reader.cc", | 
 |     "bitstream_reader.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_conversions", | 
 |     "../api:array_view", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/numeric:bits", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("compile_assert_c") { | 
 |   sources = [ "compile_assert_c.h" ] | 
 | } | 
 |  | 
 | rtc_source_set("ignore_wundef") { | 
 |   sources = [ "ignore_wundef.h" ] | 
 | } | 
 |  | 
 | rtc_source_set("untyped_function") { | 
 |   sources = [ "untyped_function.h" ] | 
 |   deps = [ "system:assume" ] | 
 | } | 
 |  | 
 | rtc_source_set("callback_list") { | 
 |   sources = [ | 
 |     "callback_list.cc", | 
 |     "callback_list.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":untyped_function", | 
 |     "../api:function_view", | 
 |     "system:assume", | 
 |     "system:inline", | 
 |     "system:rtc_export", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("buffer") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "buffer.h" ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":type_traits", | 
 |     ":zero_memory", | 
 |     "../api:array_view", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_source_set("byte_order") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "byte_order.h" ] | 
 |   deps = [ "system:arch" ] | 
 | } | 
 |  | 
 | rtc_source_set("mod_ops") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "numerics/mod_ops.h" ] | 
 |   deps = [ ":checks" ] | 
 | } | 
 |  | 
 | rtc_source_set("moving_max_counter") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "numerics/moving_max_counter.h" ] | 
 |   deps = [ ":checks" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_source_set("one_time_event") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "one_time_event.h" ] | 
 |   deps = [ "synchronization:mutex" ] | 
 | } | 
 |  | 
 | rtc_source_set("strong_alias") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "strong_alias.h" ] | 
 | } | 
 |  | 
 | rtc_source_set("swap_queue") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "swap_queue.h" ] | 
 |   deps = [ ":checks" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ] | 
 | } | 
 |  | 
 | rtc_source_set("macromagic") { | 
 |   sources = [ | 
 |     "arraysize.h", | 
 |     "thread_annotations.h", | 
 |   ] | 
 |   deps = [ "system:arch" ] | 
 | } | 
 |  | 
 | rtc_library("bit_buffer") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "bit_buffer.cc", | 
 |     "bit_buffer.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     "../api/units:data_size", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/numeric:bits", | 
 |     "//third_party/abseil-cpp/absl/strings:strings", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("byte_buffer") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "byte_buffer.cc", | 
 |     "byte_buffer.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":buffer", | 
 |     ":byte_order", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("buffer_queue") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "buffer_queue.cc", | 
 |     "buffer_queue.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":buffer", | 
 |     ":macromagic", | 
 |     "../api:sequence_checker", | 
 |     "system:no_unique_address", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("copy_on_write_buffer") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "copy_on_write_buffer.cc", | 
 |     "copy_on_write_buffer.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":buffer", | 
 |     ":checks", | 
 |     ":refcount", | 
 |     ":type_traits", | 
 |     "../api:scoped_refptr", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("event_tracer") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "event_tracer.cc", | 
 |     "event_tracer.h", | 
 |     "trace_event.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":platform_thread", | 
 |     ":platform_thread_types", | 
 |     ":rtc_event", | 
 |     ":timeutils", | 
 |     "../api:sequence_checker", | 
 |     "synchronization:mutex", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("histogram_percentile_counter") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "numerics/histogram_percentile_counter.cc", | 
 |     "numerics/histogram_percentile_counter.h", | 
 |   ] | 
 |   deps = [ ":checks" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_library("race_checker") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "race_checker.cc", | 
 |     "race_checker.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":platform_thread_types", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("random") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "random.cc", | 
 |     "random.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_conversions", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("rate_statistics") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "rate_statistics.cc", | 
 |     "rate_statistics.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":safe_conversions", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_library("rate_tracker") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "rate_tracker.cc", | 
 |     "rate_tracker.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":timeutils", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("sample_counter") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "numerics/sample_counter.cc", | 
 |     "numerics/sample_counter.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_conversions", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_library("timestamp_aligner") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "timestamp_aligner.cc", | 
 |     "timestamp_aligner.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":timeutils", | 
 |     "system:rtc_export", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("zero_memory") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "zero_memory.cc", | 
 |     "zero_memory.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     "../api:array_view", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("platform_thread_types") { | 
 |   sources = [ | 
 |     "platform_thread_types.cc", | 
 |     "platform_thread_types.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("refcount") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "ref_count.h", | 
 |     "ref_counted_object.h", | 
 |     "ref_counter.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":macromagic", | 
 |     "../api:scoped_refptr", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("criticalsection") { | 
 |   sources = [ | 
 |     "deprecated/recursive_critical_section.cc", | 
 |     "deprecated/recursive_critical_section.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":platform_thread_types", | 
 |     "synchronization:yield", | 
 |     "system:unused", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("platform_thread") { | 
 |   sources = [ | 
 |     "platform_thread.cc", | 
 |     "platform_thread.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":platform_thread_types", | 
 |     ":rtc_event", | 
 |     ":timeutils", | 
 |     "../api:sequence_checker", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("rtc_event") { | 
 |   if (build_with_chromium) { | 
 |     sources = [ | 
 |       "../../webrtc_overrides/rtc_base/event.cc", | 
 |       "../../webrtc_overrides/rtc_base/event.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       "../api/units:time_delta", | 
 |       "system:rtc_export",  # Only Chromium's rtc::Event use RTC_EXPORT. | 
 |       "//base",  # Dependency on chromium's waitable_event. | 
 |     ] | 
 |   } else { | 
 |     sources = [ | 
 |       "event.cc", | 
 |       "event.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       ":timeutils", | 
 |       "../api/units:time_delta", | 
 |       "synchronization:yield_policy", | 
 |       "system:warn_current_thread_is_deadlocked", | 
 |     ] | 
 |     absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 |   } | 
 | } | 
 |  | 
 | config("chromium_logging_config") { | 
 |   defines = [ "LOGGING_INSIDE_WEBRTC" ] | 
 | } | 
 |  | 
 | rtc_library("logging") { | 
 |   visibility = [ "*" ] | 
 |   libs = [] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":platform_thread_types", | 
 |     ":stringutils", | 
 |     ":timeutils", | 
 |     "../api/units:timestamp", | 
 |     "synchronization:mutex", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/meta:type_traits", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 |  | 
 |   if (build_with_chromium) { | 
 |     # Dependency on chromium's logging (in //base). | 
 |     deps += [ "//base" ] | 
 |     sources = [ | 
 |       "../../webrtc_overrides/rtc_base/logging.cc", | 
 |       "../../webrtc_overrides/rtc_base/logging.h", | 
 |     ] | 
 |  | 
 |     # This macro needs to be both present in all WebRTC targets (see its | 
 |     # definition in //BUILD.gn but also propagated to all the targets | 
 |     # depending on the Chromium component defined in | 
 |     # //third_party/webrtc_overrides:webrtc_component. This public_config | 
 |     # allows GN to propagate the macro accordingly. | 
 |     public_configs = [ ":chromium_logging_config" ] | 
 |   } else { | 
 |     sources = [ | 
 |       "logging.cc", | 
 |       "logging.h", | 
 |     ] | 
 |     deps += [ "system:inline" ] | 
 |  | 
 |     if (is_mac) { | 
 |       frameworks = [ "Foundation.framework" ] | 
 |     } | 
 |  | 
 |     if (is_android) { | 
 |       libs += [ "log" ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("checks") { | 
 |   # TODO(bugs.webrtc.org/9607): This should not be public. | 
 |   visibility = [ "*" ] | 
 |   libs = [] | 
 |   sources = [ | 
 |     "checks.cc", | 
 |     "checks.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":safe_compare", | 
 |     "../api:scoped_refptr", | 
 |     "system:inline", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   if (build_with_chromium) { | 
 |     sources += [ "../../webrtc_overrides/rtc_base/checks_overrides.cc" ] | 
 |     deps += [ "//base" ] | 
 |   } | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/meta:type_traits", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 |   if (is_android) { | 
 |     libs += [ "log" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("rate_limiter") { | 
 |   sources = [ | 
 |     "rate_limiter.cc", | 
 |     "rate_limiter.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":macromagic", | 
 |     ":rate_statistics", | 
 |     "../system_wrappers", | 
 |     "synchronization:mutex", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_source_set("sanitizer") { | 
 |   sources = [ "sanitizer.h" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/meta:type_traits" ] | 
 | } | 
 |  | 
 | rtc_source_set("bounded_inline_vector") { | 
 |   public = [ "bounded_inline_vector.h" ] | 
 |   sources = [ "bounded_inline_vector_impl.h" ] | 
 |   deps = [ ":checks" ] | 
 | } | 
 |  | 
 | rtc_source_set("divide_round") { | 
 |   sources = [ "numerics/divide_round.h" ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_compare", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("safe_compare") { | 
 |   sources = [ "numerics/safe_compare.h" ] | 
 |   deps = [ ":type_traits" ] | 
 | } | 
 |  | 
 | rtc_source_set("safe_minmax") { | 
 |   sources = [ "numerics/safe_minmax.h" ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_compare", | 
 |     ":type_traits", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("safe_conversions") { | 
 |   sources = [ | 
 |     "numerics/safe_conversions.h", | 
 |     "numerics/safe_conversions_impl.h", | 
 |   ] | 
 |   deps = [ ":checks" ] | 
 | } | 
 |  | 
 | rtc_library("timeutils") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "system_time.cc", | 
 |     "system_time.h", | 
 |     "time_utils.cc", | 
 |     "time_utils.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":safe_conversions", | 
 |     ":stringutils", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   if (rtc_exclude_system_time) { | 
 |     defines = [ "WEBRTC_EXCLUDE_SYSTEM_TIME" ] | 
 |   } | 
 |  | 
 |   libs = [] | 
 |   if (is_win) { | 
 |     libs += [ "winmm.lib" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("stringutils") { | 
 |   sources = [ | 
 |     "string_encode.cc", | 
 |     "string_encode.h", | 
 |     "string_to_number.cc", | 
 |     "string_to_number.h", | 
 |     "string_utils.cc", | 
 |     "string_utils.h", | 
 |     "strings/string_builder.cc", | 
 |     "strings/string_builder.h", | 
 |     "strings/string_format.cc", | 
 |     "strings/string_format.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":safe_minmax", | 
 |     "../api:array_view", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("audio_format_to_string") { | 
 |   sources = [ | 
 |     "strings/audio_format_to_string.cc", | 
 |     "strings/audio_format_to_string.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":stringutils", | 
 |     "../api/audio_codecs:audio_codecs_api", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("type_traits") { | 
 |   sources = [ "type_traits.h" ] | 
 | } | 
 |  | 
 | rtc_library("rtc_task_queue") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "task_queue.cc", | 
 |     "task_queue.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":macromagic", | 
 |     "../api/task_queue", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("rtc_operations_chain") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "operations_chain.cc", | 
 |     "operations_chain.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":refcount", | 
 |     "../api:make_ref_counted", | 
 |     "../api:refcountedbase", | 
 |     "../api:scoped_refptr", | 
 |     "../api:sequence_checker", | 
 |     "system:no_unique_address", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | if (rtc_enable_libevent) { | 
 |   rtc_library("rtc_task_queue_libevent") { | 
 |     visibility = [ "../api/task_queue:default_task_queue_factory" ] | 
 |     sources = [ | 
 |       "task_queue_libevent.cc", | 
 |       "task_queue_libevent.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       ":logging", | 
 |       ":macromagic", | 
 |       ":platform_thread", | 
 |       ":platform_thread_types", | 
 |       ":safe_conversions", | 
 |       ":timeutils", | 
 |       "../api/task_queue", | 
 |       "../api/units:time_delta", | 
 |       "synchronization:mutex", | 
 |     ] | 
 |     absl_deps = [ | 
 |       "//third_party/abseil-cpp/absl/container:inlined_vector", | 
 |       "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |       "//third_party/abseil-cpp/absl/strings", | 
 |     ] | 
 |     if (rtc_build_libevent) { | 
 |       deps += [ "//third_party/libevent" ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | if (is_mac || is_ios) { | 
 |   rtc_library("rtc_task_queue_gcd") { | 
 |     visibility = [ "../api/task_queue:default_task_queue_factory" ] | 
 |     sources = [ | 
 |       "task_queue_gcd.cc", | 
 |       "task_queue_gcd.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       ":logging", | 
 |       "../api:location", | 
 |       "../api/task_queue", | 
 |       "../api/units:time_delta", | 
 |       "synchronization:mutex", | 
 |       "system:gcd_helpers", | 
 |     ] | 
 |     absl_deps = [ | 
 |       "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |       "//third_party/abseil-cpp/absl/strings", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | if (is_win) { | 
 |   rtc_library("rtc_task_queue_win") { | 
 |     visibility = [ "../api/task_queue:default_task_queue_factory" ] | 
 |     sources = [ | 
 |       "task_queue_win.cc", | 
 |       "task_queue_win.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       ":logging", | 
 |       ":macromagic", | 
 |       ":platform_thread", | 
 |       ":rtc_event", | 
 |       ":safe_conversions", | 
 |       ":timeutils", | 
 |       "../api/task_queue", | 
 |       "../api/units:time_delta", | 
 |       "../api/units:timestamp", | 
 |       "synchronization:mutex", | 
 |     ] | 
 |     absl_deps = [ | 
 |       "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |       "//third_party/abseil-cpp/absl/strings", | 
 |       "//third_party/abseil-cpp/absl/types:optional", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("rtc_task_queue_stdlib") { | 
 |   sources = [ | 
 |     "task_queue_stdlib.cc", | 
 |     "task_queue_stdlib.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":divide_round", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":platform_thread", | 
 |     ":rtc_event", | 
 |     ":safe_conversions", | 
 |     ":timeutils", | 
 |     "../api/task_queue", | 
 |     "../api/units:time_delta", | 
 |     "synchronization:mutex", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 | } | 
 |  | 
 | if (rtc_include_tests) { | 
 |   rtc_library("task_queue_stdlib_unittest") { | 
 |     testonly = true | 
 |  | 
 |     sources = [ "task_queue_stdlib_unittest.cc" ] | 
 |     deps = [ | 
 |       ":gunit_helpers", | 
 |       ":rtc_task_queue_stdlib", | 
 |       "../api/task_queue:task_queue_test", | 
 |       "../test:test_main", | 
 |       "../test:test_support", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("weak_ptr") { | 
 |   sources = [ | 
 |     "weak_ptr.cc", | 
 |     "weak_ptr.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":refcount", | 
 |     "../api:scoped_refptr", | 
 |     "../api:sequence_checker", | 
 |     "system:no_unique_address", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("rtc_numerics") { | 
 |   sources = [ | 
 |     "numerics/event_based_exponential_moving_average.cc", | 
 |     "numerics/event_based_exponential_moving_average.h", | 
 |     "numerics/exp_filter.cc", | 
 |     "numerics/exp_filter.h", | 
 |     "numerics/math_utils.h", | 
 |     "numerics/moving_average.cc", | 
 |     "numerics/moving_average.h", | 
 |     "numerics/moving_percentile_filter.h", | 
 |     "numerics/percentile_filter.h", | 
 |     "numerics/running_statistics.h", | 
 |     "numerics/sequence_number_unwrapper.h", | 
 |     "numerics/sequence_number_util.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":mod_ops", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_library("rtc_stats_counters") { | 
 |   sources = [ | 
 |     "numerics/event_rate_counter.cc", | 
 |     "numerics/event_rate_counter.h", | 
 |     "numerics/sample_stats.cc", | 
 |     "numerics/sample_stats.h", | 
 |   ] | 
 |   deps = [ | 
 |     "../api/numerics", | 
 |     "../api/units:data_rate", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |   ] | 
 |   absl_deps = [] | 
 | } | 
 |  | 
 | config("rtc_json_suppressions") { | 
 |   if (!is_win || is_clang) { | 
 |     cflags_cc = [ | 
 |       # TODO(bugs.webrtc.org/10814): Remove -Wno-undef as soon as it get | 
 |       # removed upstream. | 
 |       "-Wno-undef", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("rtc_json") { | 
 |   public_configs = [ ":rtc_json_suppressions" ] | 
 |   poisonous = [ "rtc_json" ] | 
 |   defines = [] | 
 |   sources = [ | 
 |     "strings/json.cc", | 
 |     "strings/json.h", | 
 |   ] | 
 |   deps = [ ":stringutils" ] | 
 |   all_dependent_configs = [ "//third_party/jsoncpp:jsoncpp_config" ] | 
 |   if (rtc_build_json) { | 
 |     deps += [ "//third_party/jsoncpp" ] | 
 |   } else { | 
 |     include_dirs = [ "$rtc_jsoncpp_root" ] | 
 |  | 
 |     # When defined changes the include path for json.h to where it is | 
 |     # expected to be when building json outside of the standalone build. | 
 |     defines += [ "WEBRTC_EXTERNAL_JSON" ] | 
 |   } | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("net_helpers") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "net_helpers.cc", | 
 |     "net_helpers.h", | 
 |   ] | 
 |   deps = [ "system:rtc_export" ] | 
 |   if (is_android) { | 
 |     deps += [ ":ifaddrs_android" ] | 
 |   } | 
 |   if (is_win) { | 
 |     deps += [ | 
 |       ":win32", | 
 |       "win:windows_version", | 
 |     ] | 
 |   } | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("async_resolver_interface") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "async_resolver_interface.cc", | 
 |     "async_resolver_interface.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":socket_address", | 
 |     "system:rtc_export", | 
 |     "third_party/sigslot", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("ip_address") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "ip_address.cc", | 
 |     "ip_address.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":byte_order", | 
 |     ":net_helpers", | 
 |     ":stringutils", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("socket_address") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "socket_address.cc", | 
 |     "socket_address.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":byte_order", | 
 |     ":checks", | 
 |     ":ip_address", | 
 |     ":logging", | 
 |     ":net_helpers", | 
 |     ":safe_conversions", | 
 |     ":stringutils", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("null_socket_server") { | 
 |   sources = [ | 
 |     "null_socket_server.cc", | 
 |     "null_socket_server.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":rtc_event", | 
 |     ":socket", | 
 |     ":socket_server", | 
 |     "../api/units:time_delta", | 
 |     "system:rtc_export", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_source_set("socket_server") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ "socket_server.h" ] | 
 |   deps = [ | 
 |     ":rtc_event", | 
 |     ":socket_factory", | 
 |     "../api/units:time_delta", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("threading") { | 
 |   visibility = [ "*" ] | 
 |  | 
 |   sources = [ | 
 |     "async_resolver.cc", | 
 |     "async_resolver.h", | 
 |     "internal/default_socket_server.cc", | 
 |     "internal/default_socket_server.h", | 
 |     "network_monitor.cc", | 
 |     "network_monitor.h", | 
 |     "network_monitor_factory.cc", | 
 |     "network_monitor_factory.h", | 
 |     "physical_socket_server.cc", | 
 |     "physical_socket_server.h", | 
 |     "thread.cc", | 
 |     "thread.h", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/cleanup", | 
 |     "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_resolver_interface", | 
 |     ":byte_order", | 
 |     ":checks", | 
 |     ":criticalsection", | 
 |     ":event_tracer", | 
 |     ":ip_address", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":network_constants", | 
 |     ":null_socket_server", | 
 |     ":platform_thread", | 
 |     ":platform_thread_types", | 
 |     ":refcount", | 
 |     ":rtc_event", | 
 |     ":rtc_task_queue", | 
 |     ":socket_address", | 
 |     ":socket_server", | 
 |     ":timeutils", | 
 |     "../api:function_view", | 
 |     "../api:location", | 
 |     "../api:refcountedbase", | 
 |     "../api:scoped_refptr", | 
 |     "../api:sequence_checker", | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/units:time_delta", | 
 |     "../system_wrappers:field_trial", | 
 |     "synchronization:mutex", | 
 |     "system:no_unique_address", | 
 |     "system:rtc_export", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   if (is_android) { | 
 |     deps += [ ":ifaddrs_android" ] | 
 |   } | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 |   if (is_mac || is_ios) { | 
 |     deps += [ "system:cocoa_threading" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("socket_factory") { | 
 |   sources = [ "socket_factory.h" ] | 
 |   deps = [ ":socket" ] | 
 | } | 
 |  | 
 | rtc_library("async_socket") { | 
 |   sources = [ | 
 |     "async_socket.cc", | 
 |     "async_socket.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":socket", | 
 |     ":socket_address", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/memory" ] | 
 | } | 
 |  | 
 | rtc_library("socket") { | 
 |   sources = [ | 
 |     "socket.cc", | 
 |     "socket.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":macromagic", | 
 |     ":socket_address", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_source_set("network_constants") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "network_constants.cc", | 
 |     "network_constants.h", | 
 |   ] | 
 |   deps = [ ":checks" ] | 
 | } | 
 |  | 
 | if (is_android) { | 
 |   rtc_library("ifaddrs_android") { | 
 |     sources = [ | 
 |       "ifaddrs_android.cc", | 
 |       "ifaddrs_android.h", | 
 |     ] | 
 |     libs = [ | 
 |       "log", | 
 |       "GLESv2", | 
 |     ] | 
 |     absl_deps = [ "//third_party/abseil-cpp/absl/cleanup" ] | 
 |   } | 
 | } | 
 |  | 
 | if (is_win) { | 
 |   rtc_library("win32") { | 
 |     sources = [ | 
 |       "win32.cc", | 
 |       "win32.h", | 
 |       "win32_window.cc", | 
 |       "win32_window.h", | 
 |     ] | 
 |  | 
 |     deps = [ | 
 |       ":byte_order", | 
 |       ":checks", | 
 |       ":logging", | 
 |       ":macromagic", | 
 |       ":stringutils", | 
 |     ] | 
 |  | 
 |     libs = [ | 
 |       "crypt32.lib", | 
 |       "iphlpapi.lib", | 
 |       "secur32.lib", | 
 |     ] | 
 |  | 
 |     defines = [ "_CRT_NONSTDC_NO_DEPRECATE" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("ifaddrs_converter") { | 
 |   sources = [] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":ip_address", | 
 |     ":logging", | 
 |   ] | 
 |  | 
 |   if (is_android) { | 
 |     deps += [ ":ifaddrs_android" ] | 
 |   } | 
 |  | 
 |   if (is_ios || is_mac) { | 
 |     sources += [ "mac_ifaddrs_converter.cc" ] | 
 |   } | 
 |  | 
 |   if (is_posix || is_fuchsia) { | 
 |     sources += [ | 
 |       "ifaddrs_converter.cc", | 
 |       "ifaddrs_converter.h", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("rolling_accumulator") { | 
 |   sources = [ "rolling_accumulator.h" ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":rtc_numerics", | 
 |   ] | 
 | } | 
 |  | 
 | if (is_win) { | 
 |   rtc_library("win32_socket_init") { | 
 |     sources = [ "win32_socket_init.h" ] | 
 |     deps = [ ":win32" ] | 
 |   } | 
 | } | 
 |  | 
 | if (!build_with_chromium) { | 
 |   rtc_library("log_sinks") { | 
 |     visibility = [ "*" ] | 
 |     sources = [ | 
 |       "log_sinks.cc", | 
 |       "log_sinks.h", | 
 |     ] | 
 |     deps = [ | 
 |       ":checks", | 
 |       ":file_rotating_stream", | 
 |       ":logging", | 
 |     ] | 
 |     absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("network") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "network.cc", | 
 |     "network.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":ifaddrs_converter", | 
 |     ":ip_address", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":mdns_responder_interface", | 
 |     ":socket", | 
 |     ":socket_factory", | 
 |     ":stringutils", | 
 |     ":threading", | 
 |     "../api:array_view", | 
 |     "../api:field_trials_view", | 
 |     "../api:sequence_checker", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/transport:field_trial_based_config", | 
 |     "../api/units:time_delta", | 
 |     "experiments:field_trial_parser", | 
 |     "memory:always_valid_pointer", | 
 |     "system:rtc_export", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 |  | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("socket_address_pair") { | 
 |   sources = [ | 
 |     "socket_address_pair.cc", | 
 |     "socket_address_pair.h", | 
 |   ] | 
 |   deps = [ ":socket_address" ] | 
 | } | 
 |  | 
 | rtc_library("net_helper") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "net_helper.cc", | 
 |     "net_helper.h", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 |   deps = [ "system:rtc_export" ] | 
 | } | 
 |  | 
 | rtc_library("socket_adapters") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "socket_adapters.cc", | 
 |     "socket_adapters.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_socket", | 
 |     ":buffer", | 
 |     ":byte_buffer", | 
 |     ":checks", | 
 |     ":crypt_string", | 
 |     ":http_common", | 
 |     ":logging", | 
 |     ":stringutils", | 
 |     ":zero_memory", | 
 |     "../api:array_view", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("network_route") { | 
 |   sources = [ | 
 |     "network_route.cc", | 
 |     "network_route.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":network_constants", | 
 |     ":stringutils", | 
 |     "system:inline", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("async_tcp_socket") { | 
 |   sources = [ | 
 |     "async_tcp_socket.cc", | 
 |     "async_tcp_socket.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_packet_socket", | 
 |     ":buffer", | 
 |     ":byte_order", | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":socket", | 
 |     ":socket_address", | 
 |     ":timeutils", | 
 |     "../api:array_view", | 
 |     "network:sent_packet", | 
 |     "third_party/sigslot", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("async_udp_socket") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "async_udp_socket.cc", | 
 |     "async_udp_socket.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_packet_socket", | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":socket", | 
 |     ":socket_address", | 
 |     ":socket_factory", | 
 |     ":timeutils", | 
 |     "../api:sequence_checker", | 
 |     "../system_wrappers:field_trial", | 
 |     "network:sent_packet", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] | 
 | } | 
 |  | 
 | rtc_library("async_packet_socket") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "async_packet_socket.cc", | 
 |     "async_packet_socket.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":callback_list", | 
 |     ":dscp", | 
 |     ":socket", | 
 |     ":timeutils", | 
 |     "../api:sequence_checker", | 
 |     "network:sent_packet", | 
 |     "system:no_unique_address", | 
 |     "system:rtc_export", | 
 |     "third_party/sigslot", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("mdns_responder_interface") { | 
 |   sources = [ "mdns_responder_interface.h" ] | 
 |   deps = [ ":ip_address" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("dscp") { | 
 |   sources = [ "dscp.h" ] | 
 | } | 
 |  | 
 | rtc_library("proxy_info") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "proxy_info.cc", | 
 |     "proxy_info.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":crypt_string", | 
 |     ":socket_address", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("file_rotating_stream") { | 
 |   sources = [ | 
 |     "file_rotating_stream.cc", | 
 |     "file_rotating_stream.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":logging", | 
 |     ":stringutils", | 
 |     "system:file_wrapper", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("data_rate_limiter") { | 
 |   sources = [ | 
 |     "data_rate_limiter.cc", | 
 |     "data_rate_limiter.h", | 
 |   ] | 
 |   deps = [ "system:rtc_export" ] | 
 | } | 
 |  | 
 | rtc_library("unique_id_generator") { | 
 |   sources = [ | 
 |     "unique_id_generator.cc", | 
 |     "unique_id_generator.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":ssl", | 
 |     ":stringutils", | 
 |     "../api:array_view", | 
 |     "../api:sequence_checker", | 
 |     "synchronization:mutex", | 
 |     "system:no_unique_address", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("crc32") { | 
 |   sources = [ | 
 |     "crc32.cc", | 
 |     "crc32.h", | 
 |   ] | 
 |   deps = [ ":macromagic" ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("stream") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "stream.cc", | 
 |     "stream.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":buffer", | 
 |     ":checks", | 
 |     ":threading", | 
 |     "../api:array_view", | 
 |     "system:rtc_export", | 
 |     "third_party/sigslot", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("rtc_certificate_generator") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "rtc_certificate_generator.cc", | 
 |     "rtc_certificate_generator.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":ssl", | 
 |     ":threading", | 
 |     "../api:scoped_refptr", | 
 |     "system:rtc_export", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("ssl") { | 
 |   visibility = [ "*" ] | 
 |   sources = [ | 
 |     "helpers.cc", | 
 |     "helpers.h", | 
 |     "message_digest.cc", | 
 |     "message_digest.h", | 
 |     "openssl.h", | 
 |     "openssl_adapter.cc", | 
 |     "openssl_adapter.h", | 
 |     "openssl_digest.cc", | 
 |     "openssl_digest.h", | 
 |     "openssl_key_pair.cc", | 
 |     "openssl_key_pair.h", | 
 |     "openssl_session_cache.cc", | 
 |     "openssl_session_cache.h", | 
 |     "openssl_stream_adapter.cc", | 
 |     "openssl_stream_adapter.h", | 
 |     "openssl_utility.cc", | 
 |     "openssl_utility.h", | 
 |     "rtc_certificate.cc", | 
 |     "rtc_certificate.h", | 
 |     "ssl_adapter.cc", | 
 |     "ssl_adapter.h", | 
 |     "ssl_certificate.cc", | 
 |     "ssl_certificate.h", | 
 |     "ssl_fingerprint.cc", | 
 |     "ssl_fingerprint.h", | 
 |     "ssl_identity.cc", | 
 |     "ssl_identity.h", | 
 |     "ssl_stream_adapter.cc", | 
 |     "ssl_stream_adapter.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     ":async_socket", | 
 |     ":buffer", | 
 |     ":checks", | 
 |     ":copy_on_write_buffer", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":safe_conversions", | 
 |     ":socket", | 
 |     ":socket_address", | 
 |     ":stream", | 
 |     ":stringutils", | 
 |     ":threading", | 
 |     ":timeutils", | 
 |     "../api:array_view", | 
 |     "../api:refcountedbase", | 
 |     "../api:scoped_refptr", | 
 |     "../api/task_queue:pending_task_safety_flag", | 
 |     "../api/units:time_delta", | 
 |     "../system_wrappers:field_trial", | 
 |     "system:rtc_export", | 
 |     "task_utils:repeating_task", | 
 |     "third_party/base64", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |  | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/base:core_headers", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 |  | 
 |   # If we are building the SSL library ourselves, we know it's BoringSSL. | 
 |   if (rtc_build_ssl) { | 
 |     sources += [ | 
 |       "boringssl_certificate.cc", | 
 |       "boringssl_certificate.h", | 
 |       "boringssl_identity.cc", | 
 |       "boringssl_identity.h", | 
 |     ] | 
 |  | 
 |     deps += [ "//third_party/boringssl" ] | 
 |   } else { | 
 |     sources += [ | 
 |       "openssl_certificate.cc", | 
 |       "openssl_certificate.h", | 
 |       "openssl_identity.cc", | 
 |       "openssl_identity.h", | 
 |     ] | 
 |  | 
 |     configs += [ ":external_ssl_library" ] | 
 |   } | 
 |  | 
 |   if (build_with_chromium) { | 
 |     include_dirs = [ "../../boringssl/src/include" ] | 
 |   } else { | 
 |     sources += [ "ssl_roots.h" ] | 
 |   } | 
 |  | 
 |   if (is_win) { | 
 |     deps += [ ":win32" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("crypt_string") { | 
 |   sources = [ | 
 |     "crypt_string.cc", | 
 |     "crypt_string.h", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("http_common") { | 
 |   sources = [ | 
 |     "http_common.cc", | 
 |     "http_common.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":crypt_string", | 
 |     ":logging", | 
 |     ":socket_address", | 
 |     ":ssl", | 
 |     ":stringutils", | 
 |     ":zero_memory", | 
 |     "third_party/base64", | 
 |   ] | 
 |  | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_source_set("gtest_prod") { | 
 |   sources = [ "gtest_prod_util.h" ] | 
 | } | 
 |  | 
 | rtc_library("gunit_helpers") { | 
 |   testonly = true | 
 |   sources = [ | 
 |     "gunit.cc", | 
 |     "gunit.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":logging", | 
 |     ":rtc_base_tests_utils", | 
 |     ":stringutils", | 
 |     ":threading", | 
 |     "../test:test_support", | 
 |   ] | 
 |   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] | 
 | } | 
 |  | 
 | rtc_library("testclient") { | 
 |   testonly = true | 
 |   sources = [ | 
 |     "test_client.cc", | 
 |     "test_client.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_udp_socket", | 
 |     ":gunit_helpers", | 
 |     ":rtc_base_tests_utils", | 
 |     ":threading", | 
 |     ":timeutils", | 
 |     "synchronization:mutex", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("callback_list_unittests") { | 
 |   testonly = true | 
 |  | 
 |   sources = [ "callback_list_unittest.cc" ] | 
 |   deps = [ | 
 |     ":callback_list", | 
 |     ":gunit_helpers", | 
 |     "../api:function_view", | 
 |     "../test:test_support", | 
 |   ] | 
 | } | 
 |  | 
 | rtc_library("rtc_base_tests_utils") { | 
 |   testonly = true | 
 |   sources = [ | 
 |     "cpu_time.cc", | 
 |     "cpu_time.h", | 
 |     "fake_clock.cc", | 
 |     "fake_clock.h", | 
 |     "fake_mdns_responder.h", | 
 |     "fake_network.h", | 
 |     "fake_ssl_identity.cc", | 
 |     "fake_ssl_identity.h", | 
 |     "firewall_socket_server.cc", | 
 |     "firewall_socket_server.h", | 
 |     "memory_stream.cc", | 
 |     "memory_stream.h", | 
 |     "memory_usage.cc", | 
 |     "memory_usage.h", | 
 |     "nat_server.cc", | 
 |     "nat_server.h", | 
 |     "nat_socket_factory.cc", | 
 |     "nat_socket_factory.h", | 
 |     "nat_types.cc", | 
 |     "nat_types.h", | 
 |     "proxy_server.cc", | 
 |     "proxy_server.h", | 
 |     "server_socket_adapters.cc", | 
 |     "server_socket_adapters.h", | 
 |     "sigslot_tester.h", | 
 |     "socket_stream.cc", | 
 |     "socket_stream.h", | 
 |     "test_base64.h", | 
 |     "test_certificate_verifier.h", | 
 |     "test_echo_server.cc", | 
 |     "test_echo_server.h", | 
 |     "test_utils.cc", | 
 |     "test_utils.h", | 
 |     "virtual_socket_server.cc", | 
 |     "virtual_socket_server.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":async_packet_socket", | 
 |     ":async_socket", | 
 |     ":async_tcp_socket", | 
 |     ":async_udp_socket", | 
 |     ":byte_buffer", | 
 |     ":checks", | 
 |     ":ip_address", | 
 |     ":logging", | 
 |     ":macromagic", | 
 |     ":mdns_responder_interface", | 
 |     ":network", | 
 |     ":rtc_event", | 
 |     ":socket", | 
 |     ":socket_adapters", | 
 |     ":socket_address", | 
 |     ":socket_address_pair", | 
 |     ":socket_factory", | 
 |     ":socket_server", | 
 |     ":ssl", | 
 |     ":stream", | 
 |     ":stringutils", | 
 |     ":threading", | 
 |     ":timeutils", | 
 |     "../api:make_ref_counted", | 
 |     "../api:refcountedbase", | 
 |     "../api:scoped_refptr", | 
 |     "../api/task_queue", | 
 |     "../api/units:time_delta", | 
 |     "../api/units:timestamp", | 
 |     "../test:scoped_key_value_config", | 
 |     "memory:always_valid_pointer", | 
 |     "memory:fifo_buffer", | 
 |     "synchronization:mutex", | 
 |     "third_party/sigslot", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/algorithm:container", | 
 |     "//third_party/abseil-cpp/absl/memory", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |     "//third_party/abseil-cpp/absl/types:optional", | 
 |   ] | 
 |   if (is_fuchsia) { | 
 |     deps += [ "//third_party/fuchsia-sdk/sdk/pkg/zx" ] | 
 |   } | 
 | } | 
 |  | 
 | rtc_library("task_queue_for_test") { | 
 |   testonly = true | 
 |  | 
 |   sources = [ | 
 |     "task_queue_for_test.cc", | 
 |     "task_queue_for_test.h", | 
 |   ] | 
 |   deps = [ | 
 |     ":checks", | 
 |     ":macromagic", | 
 |     ":rtc_event", | 
 |     ":rtc_task_queue", | 
 |     "../api:function_view", | 
 |     "../api/task_queue", | 
 |     "../api/task_queue:default_task_queue_factory", | 
 |   ] | 
 |   absl_deps = [ | 
 |     "//third_party/abseil-cpp/absl/cleanup", | 
 |     "//third_party/abseil-cpp/absl/strings", | 
 |   ] | 
 | } | 
 |  | 
 | if (rtc_include_tests) { | 
 |   rtc_library("sigslot_unittest") { | 
 |     testonly = true | 
 |     sources = [ "sigslot_unittest.cc" ] | 
 |     deps = [ | 
 |       ":gunit_helpers", | 
 |       ":rtc_base_tests_utils", | 
 |       "../test:test_support", | 
 |       "synchronization:mutex", | 
 |       "third_party/sigslot", | 
 |     ] | 
 |   } | 
 |  | 
 |   rtc_library("untyped_function_unittest") { | 
 |     testonly = true | 
 |     sources = [ "untyped_function_unittest.cc" ] | 
 |     deps = [ | 
 |       ":untyped_function", | 
 |       "../test:test_support", | 
 |     ] | 
 |   } | 
 |  | 
 |   rtc_library("rtc_operations_chain_unittests") { | 
 |     testonly = true | 
 |  | 
 |     sources = [ "operations_chain_unittest.cc" ] | 
 |     deps = [ | 
 |       ":gunit_helpers", | 
 |       ":rtc_event", | 
 |       ":rtc_operations_chain", | 
 |       ":threading", | 
 |       "../test:test_support", | 
 |     ] | 
 |   } | 
 |  | 
 |   if (!build_with_chromium) { | 
 |     rtc_library("rtc_base_nonparallel_tests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ | 
 |         "cpu_time_unittest.cc", | 
 |         "file_rotating_stream_unittest.cc", | 
 |         "null_socket_server_unittest.cc", | 
 |         "physical_socket_server_unittest.cc", | 
 |         "socket_address_unittest.cc", | 
 |         "socket_unittest.cc", | 
 |         "socket_unittest.h", | 
 |       ] | 
 |       deps = [ | 
 |         ":async_packet_socket", | 
 |         ":async_udp_socket", | 
 |         ":buffer", | 
 |         ":checks", | 
 |         ":file_rotating_stream", | 
 |         ":gunit_helpers", | 
 |         ":ip_address", | 
 |         ":logging", | 
 |         ":macromagic", | 
 |         ":net_helpers", | 
 |         ":null_socket_server", | 
 |         ":platform_thread", | 
 |         ":rtc_base_tests_utils", | 
 |         ":socket", | 
 |         ":socket_address", | 
 |         ":socket_server", | 
 |         ":testclient", | 
 |         ":threading", | 
 |         ":timeutils", | 
 |         "../api/units:time_delta", | 
 |         "../system_wrappers", | 
 |         "../test:field_trial", | 
 |         "../test:fileutils", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |         "third_party/sigslot", | 
 |         "//testing/gtest", | 
 |       ] | 
 |       absl_deps = [ | 
 |         "//third_party/abseil-cpp/absl/memory", | 
 |         "//third_party/abseil-cpp/absl/strings", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_library("rtc_base_approved_unittests") { | 
 |       testonly = true | 
 |       sources = [ | 
 |         "base64_unittest.cc", | 
 |         "bit_buffer_unittest.cc", | 
 |         "bitstream_reader_unittest.cc", | 
 |         "bounded_inline_vector_unittest.cc", | 
 |         "buffer_queue_unittest.cc", | 
 |         "buffer_unittest.cc", | 
 |         "byte_buffer_unittest.cc", | 
 |         "byte_order_unittest.cc", | 
 |         "checks_unittest.cc", | 
 |         "copy_on_write_buffer_unittest.cc", | 
 |         "deprecated/recursive_critical_section_unittest.cc", | 
 |         "event_tracer_unittest.cc", | 
 |         "event_unittest.cc", | 
 |         "logging_unittest.cc", | 
 |         "numerics/divide_round_unittest.cc", | 
 |         "numerics/histogram_percentile_counter_unittest.cc", | 
 |         "numerics/mod_ops_unittest.cc", | 
 |         "numerics/moving_max_counter_unittest.cc", | 
 |         "numerics/safe_compare_unittest.cc", | 
 |         "numerics/safe_minmax_unittest.cc", | 
 |         "numerics/sample_counter_unittest.cc", | 
 |         "one_time_event_unittest.cc", | 
 |         "platform_thread_unittest.cc", | 
 |         "random_unittest.cc", | 
 |         "rate_limiter_unittest.cc", | 
 |         "rate_statistics_unittest.cc", | 
 |         "rate_tracker_unittest.cc", | 
 |         "ref_counted_object_unittest.cc", | 
 |         "sanitizer_unittest.cc", | 
 |         "string_encode_unittest.cc", | 
 |         "string_to_number_unittest.cc", | 
 |         "string_utils_unittest.cc", | 
 |         "strings/string_builder_unittest.cc", | 
 |         "strings/string_format_unittest.cc", | 
 |         "strong_alias_unittest.cc", | 
 |         "swap_queue_unittest.cc", | 
 |         "thread_annotations_unittest.cc", | 
 |         "time_utils_unittest.cc", | 
 |         "timestamp_aligner_unittest.cc", | 
 |         "virtual_socket_unittest.cc", | 
 |         "zero_memory_unittest.cc", | 
 |       ] | 
 |       deps = [ | 
 |         ":async_packet_socket", | 
 |         ":async_udp_socket", | 
 |         ":bit_buffer", | 
 |         ":bitstream_reader", | 
 |         ":bounded_inline_vector", | 
 |         ":buffer", | 
 |         ":buffer_queue", | 
 |         ":byte_buffer", | 
 |         ":byte_order", | 
 |         ":checks", | 
 |         ":copy_on_write_buffer", | 
 |         ":criticalsection", | 
 |         ":divide_round", | 
 |         ":event_tracer", | 
 |         ":gunit_helpers", | 
 |         ":histogram_percentile_counter", | 
 |         ":ip_address", | 
 |         ":logging", | 
 |         ":macromagic", | 
 |         ":mod_ops", | 
 |         ":moving_max_counter", | 
 |         ":null_socket_server", | 
 |         ":one_time_event", | 
 |         ":platform_thread", | 
 |         ":random", | 
 |         ":rate_limiter", | 
 |         ":rate_statistics", | 
 |         ":rate_tracker", | 
 |         ":refcount", | 
 |         ":rtc_base_tests_utils", | 
 |         ":rtc_event", | 
 |         ":rtc_numerics", | 
 |         ":rtc_task_queue", | 
 |         ":safe_compare", | 
 |         ":safe_minmax", | 
 |         ":sample_counter", | 
 |         ":sanitizer", | 
 |         ":socket", | 
 |         ":socket_address", | 
 |         ":socket_server", | 
 |         ":ssl", | 
 |         ":stringutils", | 
 |         ":strong_alias", | 
 |         ":swap_queue", | 
 |         ":testclient", | 
 |         ":threading", | 
 |         ":timestamp_aligner", | 
 |         ":timeutils", | 
 |         ":zero_memory", | 
 |         "../api:array_view", | 
 |         "../api:make_ref_counted", | 
 |         "../api:scoped_refptr", | 
 |         "../api/numerics", | 
 |         "../api/units:time_delta", | 
 |         "../system_wrappers", | 
 |         "../test:fileutils", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |         "containers:flat_map", | 
 |         "containers:unittests", | 
 |         "memory:unittests", | 
 |         "synchronization:mutex", | 
 |         "task_utils:repeating_task", | 
 |         "third_party/base64", | 
 |         "third_party/sigslot", | 
 |       ] | 
 |       absl_deps = [ | 
 |         "//third_party/abseil-cpp/absl/base:core_headers", | 
 |         "//third_party/abseil-cpp/absl/memory", | 
 |         "//third_party/abseil-cpp/absl/numeric:bits", | 
 |         "//third_party/abseil-cpp/absl/strings", | 
 |         "//third_party/abseil-cpp/absl/types:optional", | 
 |       ] | 
 |  | 
 |       if (is_win) { | 
 |         deps += [ "win:windows_version_unittest" ] | 
 |       } | 
 |     } | 
 |  | 
 |     rtc_library("rtc_task_queue_unittests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ "task_queue_unittest.cc" ] | 
 |       deps = [ | 
 |         ":gunit_helpers", | 
 |         ":rtc_base_tests_utils", | 
 |         ":rtc_event", | 
 |         ":rtc_task_queue", | 
 |         ":task_queue_for_test", | 
 |         ":timeutils", | 
 |         "../api/units:time_delta", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |       ] | 
 |       absl_deps = [ "//third_party/abseil-cpp/absl/memory" ] | 
 |     } | 
 |  | 
 |     rtc_library("weak_ptr_unittests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ "weak_ptr_unittest.cc" ] | 
 |       deps = [ | 
 |         ":gunit_helpers", | 
 |         ":rtc_base_tests_utils", | 
 |         ":rtc_event", | 
 |         ":task_queue_for_test", | 
 |         ":weak_ptr", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_library("rtc_numerics_unittests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ | 
 |         "numerics/event_based_exponential_moving_average_unittest.cc", | 
 |         "numerics/exp_filter_unittest.cc", | 
 |         "numerics/moving_average_unittest.cc", | 
 |         "numerics/moving_percentile_filter_unittest.cc", | 
 |         "numerics/percentile_filter_unittest.cc", | 
 |         "numerics/running_statistics_unittest.cc", | 
 |         "numerics/sequence_number_unwrapper_unittest.cc", | 
 |         "numerics/sequence_number_util_unittest.cc", | 
 |       ] | 
 |       deps = [ | 
 |         ":rtc_numerics", | 
 |         ":timeutils", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |       ] | 
 |       absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ] | 
 |     } | 
 |  | 
 |     rtc_library("rtc_json_unittests") { | 
 |       testonly = true | 
 |  | 
 |       sources = [ "strings/json_unittest.cc" ] | 
 |       deps = [ | 
 |         ":gunit_helpers", | 
 |         ":rtc_base_tests_utils", | 
 |         ":rtc_json", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |       ] | 
 |     } | 
 |  | 
 |     rtc_library("rtc_base_unittests") { | 
 |       testonly = true | 
 |       defines = [] | 
 |  | 
 |       sources = [ | 
 |         "crc32_unittest.cc", | 
 |         "data_rate_limiter_unittest.cc", | 
 |         "fake_clock_unittest.cc", | 
 |         "helpers_unittest.cc", | 
 |         "ip_address_unittest.cc", | 
 |         "memory_usage_unittest.cc", | 
 |         "message_digest_unittest.cc", | 
 |         "nat_unittest.cc", | 
 |         "network_route_unittest.cc", | 
 |         "network_unittest.cc", | 
 |         "proxy_unittest.cc", | 
 |         "rolling_accumulator_unittest.cc", | 
 |         "rtc_certificate_generator_unittest.cc", | 
 |         "rtc_certificate_unittest.cc", | 
 |         "sigslot_tester_unittest.cc", | 
 |         "test_client_unittest.cc", | 
 |         "thread_unittest.cc", | 
 |         "unique_id_generator_unittest.cc", | 
 |       ] | 
 |       deps = [ | 
 |         ":async_packet_socket", | 
 |         ":async_tcp_socket", | 
 |         ":async_udp_socket", | 
 |         ":buffer", | 
 |         ":buffer_queue", | 
 |         ":checks", | 
 |         ":crc32", | 
 |         ":data_rate_limiter", | 
 |         ":gunit_helpers", | 
 |         ":ifaddrs_converter", | 
 |         ":ip_address", | 
 |         ":logging", | 
 |         ":macromagic", | 
 |         ":net_helpers", | 
 |         ":network", | 
 |         ":network_route", | 
 |         ":null_socket_server", | 
 |         ":refcount", | 
 |         ":rolling_accumulator", | 
 |         ":rtc_base_tests_utils", | 
 |         ":rtc_certificate_generator", | 
 |         ":rtc_event", | 
 |         ":safe_conversions", | 
 |         ":socket", | 
 |         ":socket_adapters", | 
 |         ":socket_address", | 
 |         ":socket_factory", | 
 |         ":socket_server", | 
 |         ":ssl", | 
 |         ":stream", | 
 |         ":stringutils", | 
 |         ":testclient", | 
 |         ":threading", | 
 |         ":timeutils", | 
 |         ":unique_id_generator", | 
 |         "../api:array_view", | 
 |         "../api:field_trials_view", | 
 |         "../api:make_ref_counted", | 
 |         "../api/task_queue", | 
 |         "../api/task_queue:pending_task_safety_flag", | 
 |         "../api/task_queue:task_queue_test", | 
 |         "../api/units:time_delta", | 
 |         "../test:field_trial", | 
 |         "../test:fileutils", | 
 |         "../test:rtc_expect_death", | 
 |         "../test:scoped_key_value_config", | 
 |         "../test:test_main", | 
 |         "../test:test_support", | 
 |         "memory:fifo_buffer", | 
 |         "synchronization:mutex", | 
 |         "third_party/sigslot", | 
 |       ] | 
 |       if (rtc_enable_google_benchmarks) { | 
 |         deps += [ "synchronization:synchronization_unittests" ] | 
 |       } | 
 |       if (is_win) { | 
 |         sources += [ | 
 |           "win32_unittest.cc", | 
 |           "win32_window_unittest.cc", | 
 |         ] | 
 |         deps += [ ":win32" ] | 
 |       } | 
 |       if (is_posix || is_fuchsia) { | 
 |         sources += [ | 
 |           "openssl_adapter_unittest.cc", | 
 |           "openssl_session_cache_unittest.cc", | 
 |           "openssl_utility_unittest.cc", | 
 |           "ssl_adapter_unittest.cc", | 
 |           "ssl_identity_unittest.cc", | 
 |           "ssl_stream_adapter_unittest.cc", | 
 |         ] | 
 |       } | 
 |       absl_deps = [ | 
 |         "//third_party/abseil-cpp/absl/algorithm:container", | 
 |         "//third_party/abseil-cpp/absl/functional:any_invocable", | 
 |         "//third_party/abseil-cpp/absl/memory", | 
 |         "//third_party/abseil-cpp/absl/strings", | 
 |         "//third_party/abseil-cpp/absl/types:optional", | 
 |       ] | 
 |  | 
 |       if (build_with_chromium) { | 
 |         include_dirs = [ "../../boringssl/src/include" ] | 
 |       } | 
 |       if (rtc_build_ssl) { | 
 |         deps += [ "//third_party/boringssl" ] | 
 |       } else { | 
 |         configs += [ ":external_ssl_library" ] | 
 |       } | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | if (is_android) { | 
 |   rtc_android_library("base_java") { | 
 |     visibility = [ "*" ] | 
 |     sources = [ | 
 |       "java/src/org/webrtc/ContextUtils.java", | 
 |       "java/src/org/webrtc/Loggable.java", | 
 |       "java/src/org/webrtc/Logging.java", | 
 |       "java/src/org/webrtc/Size.java", | 
 |       "java/src/org/webrtc/ThreadUtils.java", | 
 |     ] | 
 |     deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] | 
 |   } | 
 |   java_cpp_enum("network_monitor_enums") { | 
 |     sources = [ "network_monitor.h" ] | 
 |     visibility = [ "*" ] | 
 |   } | 
 | } |